Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java appengine entitymanager.close()导致谷歌appengine中出现npe_Java_Google App Engine_Datanucleus_Google Cloud Endpoints - Fatal编程技术网

Java appengine entitymanager.close()导致谷歌appengine中出现npe

Java appengine entitymanager.close()导致谷歌appengine中出现npe,java,google-app-engine,datanucleus,google-cloud-endpoints,Java,Google App Engine,Datanucleus,Google Cloud Endpoints,我试图更新数据存储中的实体,但当调用mgr.close时,实体管理器为null 我没有在代码中的任何地方将实体管理器设置为null。我也不认为appengine会将实体管理器设置为null,它只是看起来实体管理器可能已经崩溃或者自己出了问题 实体经理是否有生命周期或我不知道的东西?我是否可以在代码中执行一些操作,使实体管理器过早关闭 在等待回答这个问题时,我注意到,我的更新方法由云端点生成,然后由我自己修改,但没有检查对象是否已存在于数据存储中的contains方法。我编辑了这个方法,得到了相同

我试图更新数据存储中的实体,但当调用mgr.close时,实体管理器为null

我没有在代码中的任何地方将实体管理器设置为null。我也不认为appengine会将实体管理器设置为null,它只是看起来实体管理器可能已经崩溃或者自己出了问题

实体经理是否有生命周期或我不知道的东西?我是否可以在代码中执行一些操作,使实体管理器过早关闭

在等待回答这个问题时,我注意到,我的更新方法由云端点生成,然后由我自己修改,但没有检查对象是否已存在于数据存储中的contains方法。我编辑了这个方法,得到了相同的错误,只是它发生在contains方法内部。代码显示在下面

@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;
}
包含方法:

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;
}
编辑 *更新了第二组方法的调试级堆栈跟踪:*


这可能不可行,但该项目是否足够小,可以从JPA转换到JDO?其他地方有理由选择JDO。这种转换可能会让其他一些开发人员尝试您的代码场景,这显然是个人的偏见。或者它可能只是工作-不,这个项目相当大。所以你的实体经理是空的。。。假设getEntityManager中的变量为非null,您在哪里将该变量设置为null。AppEngine无法为您设置变量,因为该变量存在于您的方法中。这就是调试器的用途。如果有一个NPE,我希望你能用堆栈跟踪来发布它。@DataNucleus谢谢你的回复。我不会在代码中的任何地方将实体管理器设置为null。我希望我添加了足够的信息来澄清我的问题。提前感谢。因此,从堆栈跟踪来看,EntityManager不是空的。如果向数据存储发送请求,则在调试级别查看日志,以了解发送了什么请求。
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