I'm trying to make a one-to-many relationship in GAE and when i'm adding to the list i'm getting the following error:
[java] java.lang.NullPointerException
[java] at com.google.appengine.datanucleus.scostore.FKListStore.getIndexPropertyName(FKListStore.java:965)
[java] at com.google.appengine.datanucleus.scostore.FKListStore.getFilterPredicates(FKListStore.java:940)
[java] at com.google.appengine.datanucleus.scostore.FKListStore.listIterator(FKListStore.java:383)
[java] at com.google.appengine.datanucleus.scostore.FKListStore.listIterator(FKListStore.java:349)
[java] at com.google.appengine.datanucleus.scostore.FKListStore.iterator(FKListStore.java:342)
[java] at org.datanucleus.store.types.sco.backed.List.loadFromStore(List.java:304)
[java] at org.datanucleus.store.types.sco.backed.List.add(List.java:685)
[java] at Utils.GardenUtils.PostMessage(GardenUtils.java:187)
[java] at Servlets.GardenServlets.PostGardenMessageServlet.processRequest(PostGardenMessageServlet.java:28)
[java] at Servlets.GardenServlets.PostGardenMessageServlet.doPost(PostGardenMessageServlet.java:70)
[java] at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
[java] at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[java] at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
[java] at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
[java] at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
[java] at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
[java] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[java] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
[java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
[java] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
[java] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
[java] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
[java] at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
[java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[java] at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:491)
[java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[java] at org.mortbay.jetty.Server.handle(Server.java:326)
[java] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
[java] at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
[java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
[java] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
[java] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[java] at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
[java] at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
This is how i'm adding the new list member:
public static void PostMessage(String userID, String gardenKey, String content) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
User user = pm.getObjectById(User.class, userID);
GardenMessage message = new GardenMessage();
message.setFirstName(user.getFirstName());
message.setLastName(user.getLastName());
message.setUserID(userID);
message.setContent(content);
message.setGardenKey(gardenKey);
message.setPostDate(new Date());
Garden garden = pm.getObjectById(Garden.class, gardenKey);
garden.getMessages().add(message);
} finally {
pm.close();
}
}
On the Garden class I have this:
@Persistent
private List<GardenMessage> messages;
Please let me know what is wrong with my code.
AFAIK that plugin of Google's had several updates after the last release (2.1.2), and they didn't bother releasing it. The code is at http://code.google.com/p/datanucleus-appengine/source/browse/#svn%2Ftrunk The line where you have an NPE is definitely different from a cursory glance, so suggest you try their current SVN. You should be able to simply do a checkout and then "mvn clean install" to get a version 3.0.0-SNAPSHOT (uses DataNucleus 3.2 IIRC).
A simple search also found this post javax.jdo.JDOException: Unexpected error during precommit