Question

I am trying to update an entity in the datastore but when mgr.close gets called, the entity manager is null.

I don't set the entity manager to null anywhere in the code. I don't think that app engine is setting the entity manager to null for me either, it just seems like the entity manager may have crashed or something on its own.

Does the entity manager have a life cycle or something I am not aware of? Is there something I could be doing in the code to make the entity manager close prematurely?

While waiting on this question to be answered I noticed that my update method (generated by cloud endpoints and then altered by myself) didn't have the contains method that checks to see if the object is already present in the datastore. I edited the method and got the same error except it occurred inside the contains method. The code is displayed below.

@ApiMethod(name = "updateParty")
public Party updateParty(Party party) {
    EntityManager mgr = getEntityManager();
    //update party with serving url             
    try {
        if (!containsParty(party)) {
            throw new EntityNotFoundException("Object does not exist");
        }
        if (party.getFlyerServingUrl() == null && party.getFlyerStr() != null) {
             blob = new BlobKey(party.getFlyerStr());        
                options = Builder.withBlobKey(blob);
                servingUrl = imagesService.getServingUrl(options);
                party.setFlyerServingUrl(servingUrl);       
        }
        mgr.persist(party);
    } finally {
        mgr.close();
    }
    return party;
}

contains method:

private boolean containsParty(Party party) {
    EntityManager mgr = getEntityManager();
    boolean contains = true;
    try {
        if(party.getId() == null){
            contains = false;
        }else{
        Party item = mgr.find(Party.class, party.getId());
        if (item == null) {
            contains = false;
            }
        }
    } finally {
        mgr.close();
    }
    return contains;
}

EDIT *updated DEBUG level stack trace for the second set of methods:*

2014-03-05 10:20:40.484 /_ah/spi/com.mastermindcode.theincrowd.PartyEndpoint.updateParty 500 15ms 0kb Google-HTTP-Java-Client/1.16.0-rc (gzip) module=default version=1
75.108.229.93 - - [05/Mar/2014:10:20:40 -0800] "POST /_ah/spi/com.mastermindcode.theincrowd.PartyEndpoint.updateParty HTTP/1.1" 500 117 - "Google-HTTP-Java-Client/1.16.0-rc (gzip)" "incrowdmobile.appspot.com" ms=15 cpu_ms=0 cpm_usd=0.000013 app_engine_release=1.9.0 instance=00c61b117c5f081d6ff00df1aac468f916fc26
D 2014-03-05 10:20:40.474
com.google.api.server.spi.SystemServiceServlet execute: serviceName=com.mastermindcode.theincrowd.PartyEndpoint methodName=updateParty
D 2014-03-05 10:20:40.474
com.google.api.server.spi.SystemService findService: com.mastermindcode.theincrowd.PartyEndpoint => com.mastermindcode.theincrowd.PartyEndpoint@2c3abe
D 2014-03-05 10:20:40.474
com.google.api.server.spi.ConfiguredObjectMapper$Builder build: Cache hit, reusing ObjectMapper
D 2014-03-05 10:20:40.474
com.google.api.server.spi.SystemServiceServlet execute: serviceMethod=Method: public     com.mastermindcode.theincrowd.Party     com.mastermindcode.theincrowd.PartyEndpoint.updateParty(com.mastermindcode.theincrowd.Party)    , Resolved Return Type: class com.mastermindcode.theincrowd.Party, Resolved Parameter     Types: [class com.mastermindcode.theincrowd.Party]
    D 2014-03-05 10:20:40.474
com.google.api.server.spi.SystemService findService:     com.mastermindcode.theincrowd.PartyEndpoint =>     com.mastermindcode.theincrowd.PartyEndpoint@2c3abe
    D 2014-03-05 10:20:40.474
com.google.api.server.spi.ConfiguredObjectMapper$Builder build: Cache hit, reusing     ObjectMapper
    D 2014-03-05 10:20:40.474
com.google.api.server.spi.SystemService findService:     com.mastermindcode.theincrowd.PartyEndpoint =>     com.mastermindcode.theincrowd.PartyEndpoint@2c3abe
    D 2014-03-05 10:20:40.474
com.google.api.server.spi.request.ServletRequestParamReader read: requestBody={"Id":{"appId":"s~incrowdmobile","complete":true,"id":"5317797651415040","kind":"Party"},"featuredPosition":0,"flyerStr":"AMIfv968K2J3isP3BSq67ru69rgCgnDkA0n0Fq1rqk8XhvuqeAItMXImE9JI-trSr3RxMEkLswCRAZib_FnsVtF3BVrCtVmJtkxDnSmIcgIKtcXhq1KNsOxy3EnWEdBc73boMhGr4EcVQqZhbPhiTru81JEtPqX-G-MZCQzw6lb4tyforoGVII8","flyerUploadUrl":"https://incrowdmobile.appspot.com/_ah/upload/AMmfu6bB660x2WmQHniLC84sjVvyOwlGwJEGLWCbp6-tBbalHrqo6vmc0lSDeR0CY18kOmphXxAZf5FGV9Lb5Hw2Ln74ZDCUX1DCmxiwS1QHv3iGXWTjqzg60hA5W34x_RSzklXtq3M3/ALBNUaYAAAAAUxdtHwJEZ3edBNcVIp_G5tbuCBUYtJ6o/","genre":"Electronic Dance","headPromoterId":"24001","headPromoterName":"Kreshendo","isClaimable":false,"location":{"latitude":30.088441848754883,"longitude":-95.11273193359375},"maxAge":0,"minAge":0,"partyHashtag":"#hdvfcdg","partyLocation":{"latitude":30.088441848754883,"longitude":-95.11273193359375},"partyName":"hfcdcvh","promoTeamId":"0","id":{"kind":"Party","appId":"s~incrowdmobile","id":"5317797651415040","complete":true},"kind":"partyendpoint#resourcesItem","etag":"\"o5z31f-yQaEVGsxCvjrmPxs4_Z4/I4PX-YUoH_IOu_T_IRwC_CBHXwQ\""}
    D 2014-03-05 10:20:40.475
com.google.api.server.spi.request.ServletRequestParamReader deserializeParams: deserialize: class com.mastermindcode.theincrowd.Party com.mastermindcode.theincrowd.Party@f2869f injected into unnamed param[0]
    D 2014-03-05 10:20:40.475
com.google.api.server.spi.SystemService invokeServiceMethod: params=[com.mastermindcode.theincrowd.Party@f2869f] (String)
I 2014-03-05 10:20:40.479
com.google.api.server.spi.SystemService invokeServiceMethod: cause={0}
java.lang.NullPointerException
at com.google.appengine.api.datastore.KeyTranslator.convertToPb(KeyTranslator.java:49)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$V3KeyBatcher.toPb(AsyncDatastoreServiceImpl.java:111)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$V3KeyBatcher.toPb(AsyncDatastoreServiceImpl.java:102)
    at com.google.appengine.api.datastore.Batcher$BatchIterator.<init>(Batcher.java:176)
    at com.google.appengine.api.datastore.Batcher$1.<init>(Batcher.java:270)
    at com.google.appengine.api.datastore.Batcher.getBatches(Batcher.java:270)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.doBatchGet(AsyncDatastoreServiceImpl.java:301)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.get(AsyncDatastoreServiceImpl.java:280)
    at com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:69)
    at com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:66)
    at com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java:29)
at com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:66)
at com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:56)
at com.google.appengine.datanucleus.WrappedDatastoreService.get(WrappedDatastoreService.java:60)
at com.google.appengine.datanucleus.EntityUtils.getEntityFromDatastore(EntityUtils.java:665)
at com.google.appengine.datanucleus.DatastorePersistenceHandler.fetchObject(DatastorePersistenceHandler.java:543)
at org.datanucleus.state.JDOStateManager.loadFieldsFromDatastore(JDOStateManager.java:1638)
at org.datanucleus.state.JDOStateManager.loadUnloadedFieldsInFetchPlan(JDOStateManager.java:1363)
at org.datanucleus.state.JDOStateManager.detach(JDOStateManager.java:2718)
at org.datanucleus.ObjectManagerImpl.performDetachOnCloseWork(ObjectManagerImpl.java:4571)
at org.datanucleus.ObjectManagerImpl.performDetachOnClose(ObjectManagerImpl.java:4534)
at org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1105)
at org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193)
at com.mastermindcode.theincrowd.PartyEndpoint.containsParty(PartyEndpoint.java:440)
at com.mastermindcode.theincrowd.PartyEndpoint.updateParty(PartyEndpoint.java:393)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:45)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:124)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
at java.lang.Thread.run(Thread.java:724)
E 2014-03-05 10:20:40.479
com.google.api.server.spi.SystemService invokeServiceMethod: null
java.lang.NullPointerException
at com.google.appengine.api.datastore.KeyTranslator.convertToPb(KeyTranslator.java:49)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$V3KeyBatcher.toPb(AsyncDatastoreServiceImpl.java:111)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$V3KeyBatcher.toPb(AsyncDatastoreServiceImpl.java:102)
at com.google.appengine.api.datastore.Batcher$BatchIterator.<init>(Batcher.java:176)
at com.google.appengine.api.datastore.Batcher$1.<init>(Batcher.java:270)
at com.google.appengine.api.datastore.Batcher.getBatches(Batcher.java:270)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.doBatchGet(AsyncDatastoreServiceImpl.java:301)
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.get(AsyncDatastoreServiceImpl.java:280)
at com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:69)
at com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:66)
at com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java:29)
at com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:66)
at com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:56)
at com.google.appengine.datanucleus.WrappedDatastoreService.get(WrappedDatastoreService.java:60)
at com.google.appengine.datanucleus.EntityUtils.getEntityFromDatastore(EntityUtils.java:665)
at com.google.appengine.datanucleus.DatastorePersistenceHandler.fetchObject(DatastorePersistenceHandler.java:543)
at org.datanucleus.state.JDOStateManager.loadFieldsFromDatastore(JDOStateManager.java:1638)
at org.datanucleus.state.JDOStateManager.loadUnloadedFieldsInFetchPlan(JDOStateManager.java:1363)
at org.datanucleus.state.JDOStateManager.detach(JDOStateManager.java:2718)
at org.datanucleus.ObjectManagerImpl.performDetachOnCloseWork(ObjectManagerImpl.java:4571)
at org.datanucleus.ObjectManagerImpl.performDetachOnClose(ObjectManagerImpl.java:4534)
at org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1105)
at org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193)
at com.mastermindcode.theincrowd.PartyEndpoint.containsParty(PartyEndpoint.java:440)
at com.mastermindcode.theincrowd.PartyEndpoint.updateParty(PartyEndpoint.java:393)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:45)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:124)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
at java.lang.Thread.run(Thread.java:724

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top