javax.jdo.JDOFatalInternalException: Cannot instantiate abstract class.

295 views
Skip to first unread message

pbtrn10k

unread,
Dec 12, 2009, 10:42:39 AM12/12/09
to Google App Engine
I have an abstract class Person which contains, among other things,
the following code:



@PersistenceCapable(identityType = IdentityType.APPLICATION)
public abstract class Person {

@Persistent(valueStrategy = IdGeneratorStrategy.UNSPECIFIED)
@PrimaryKey
private String username; // the username of this person
@Persistent
private String passwordHash; // the hashed password of this person



and another abstract class Staff which extends it...



@PersistenceCapable
public abstract class Staff extends Person {

/**
* @see com.appspot.cs3099d.nhit.model.Person
*/
public Staff(String userName, String password, String title, String
fname,
List<String> mnames, String lname) {
super(userName, password, title, fname, mnames, lname);
}



and a class Administrator which extends this...



@PersistenceCapable
public class Administrator extends Staff {

/**
* @see com.appspot.cs3099d.nhit.model.Staff
*/
public Administrator(String userName, String password, String title,
String fname, List<String> mnames, String lname) {
super(userName, password, title, fname, mnames, lname);
}



I am trying to store a new Administrator object in the datastore
inside a RemoteServiceServlet...



Person p = new Administrator
("user","userpassword","","super",null,"user");

PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(p);

pm.close();



And I receive this error...



checking initialisation conditions
retrieved initialisation conditions
12-Dec-2009 15:30:23
com.google.appengine.tools.development.ApiProxyLocalImpl log
SEVERE: [1260631823692000] javax.servlet.ServletContext log: Exception
while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method
'public abstract void
com.appspot.cs3099d.nhit.client.InitService.initialise()' threw an
unexpected exception: javax.jdo.JDOFatalInternalException: Cannot
instantiate abstract class.
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure
(RPC.java:360)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse
(RPC.java:546)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall
(RemoteServiceServlet.java:166)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost
(RemoteServiceServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1093)
at
com.appspot.cs3099d.nhit.server.user.LogInVerificationFilter.doFilter
(LogInVerificationFilter.java:47)
at com.appspot.cs3099d.nhit.server.HttpFilter.doFilter
(HttpFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at com.google.appengine.tools.development.StaticFileFilter.doFilter
(StaticFileFilter.java:121)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:342)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
506)
at org.mortbay.jetty.HttpConnection$RequestHandler.content
(HttpConnection.java:844)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java:396)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run
(BoundedThreadPool.java:442)
Caused by: javax.jdo.JDOFatalInternalException: Cannot instantiate
abstract class.
at com.appspot.cs3099d.nhit.model.Person.jdoNewInstance(Person.java)
at org.datanucleus.state.JDOStateManagerImpl.saveFields
(JDOStateManagerImpl.java:1048)
at
org.datanucleus.state.JDOStateManagerImpl.initialiseForPersistentNew
(JDOStateManagerImpl.java:400)
at
org.datanucleus.state.StateManagerFactory.newStateManagerForPersistentNew
(StateManagerFactory.java:151)
at org.datanucleus.ObjectManagerImpl.persistObjectInternal
(ObjectManagerImpl.java:1297)
at org.datanucleus.ObjectManagerImpl.persistObject
(ObjectManagerImpl.java:1175)
at org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent
(JDOPersistenceManager.java:669)
at org.datanucleus.jdo.JDOPersistenceManager.makePersistent
(JDOPersistenceManager.java:694)
at com.appspot.cs3099d.nhit.server.InitServiceImpl.initialise
(InitServiceImpl.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke
(Runtime.java:100)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse
(RPC.java:527)
... 30 more



I couldn't find anything on this anywhere. The Javadoc page for this
exception says this: "This class represents errors in the
implementation for which no user error handling is possible. The error
should be reported to the JDO vendor for corrective action." I hope
this is the right place!! ;)

(Also I hope that post's not too badly formatted, couldn't find
guidelines for posting code)
Reply all
Reply to author
Forward
0 new messages