Google app engine 在GoogleAppEngine上,我在启动dev服务器后第一次查询数据存储时收到一个InvocationTargetException

Google app engine 在GoogleAppEngine上,我在启动dev服务器后第一次查询数据存储时收到一个InvocationTargetException,google-app-engine,Google App Engine,在Google App Engine上,每次启动开发服务器时,我都会收到多个java.lang.reflect.InvocationTargetException。我使用的是SpringMVC3.0 我的应用程序工作正常,但我觉得异常会减慢开发服务器的启动时间,我不确定在真正的服务器上是否也会发生异常,并在GAE启动新实例时减慢启动时间 输出为: [java] The server is running at http://localhost:8080/ [java] Jan 21, 201

在Google App Engine上,每次启动开发服务器时,我都会收到多个java.lang.reflect.InvocationTargetException。我使用的是SpringMVC3.0

我的应用程序工作正常,但我觉得异常会减慢开发服务器的启动时间,我不确定在真正的服务器上是否也会发生异常,并在GAE启动新实例时减慢启动时间

输出为:

 [java] The server is running at http://localhost:8080/
 [java] Jan 21, 2010 4:16:52 PM com.google.appengine.repackaged.com.google.common.base.FinalizableReferenceQueue <init>
 [java] INFO: Failed to start reference finalizer thread. Reference cleanup will only occur when new references are created.
 [java] java.lang.reflect.InvocationTargetException
 [java]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [java]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 [java]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 [java]         at java.lang.reflect.Method.invoke(Method.java:597)
 [java]         at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
 [java]         at com.google.appengine.repackaged.com.google.common.base.FinalizableReferenceQueue.<init>(FinalizableReferenceQueue.java:124)
 [java]         at com.google.appengine.repackaged.com.google.common.labs.misc.InterningPools$WeakInterningPool.<clinit>(InterningPools.java:104)
 [java]         at com.google.appengine.repackaged.com.google.common.labs.misc.InterningPools.newWeakInterningPool(InterningPools.java:48)
 [java]         at com.google.appengine.repackaged.com.google.io.protocol.ProtocolSupport.<clinit>(ProtocolSupport.java:55)
 [java]         at com.google.apphosting.api.DatastorePb$Query.<init>(DatastorePb.java:1072)
 [java]         at com.google.apphosting.api.DatastorePb$Query$1.<init>(DatastorePb.java:2355)
 [java]         at com.google.apphosting.api.DatastorePb$Query.<clinit>(DatastorePb.java:2355)
 [java]         at com.google.appengine.api.datastore.QueryTranslator.convertToPb(QueryTranslator.java:28)
 [java]         at com.google.appengine.api.datastore.DatastoreServiceImpl$PreparedQueryImpl.convertToPb(DatastoreServiceImpl.java:382)
 [java]         at com.google.appengine.api.datastore.DatastoreServiceImpl$PreparedQueryImpl.runQuery(DatastoreServiceImpl.java:342)
 [java]         at com.google.appengine.api.datastore.DatastoreServiceImpl$PreparedQueryImpl.access$100(DatastoreServiceImpl.java:272)
 [java]         at com.google.appengine.api.datastore.DatastoreServiceImpl$PreparedQueryImpl$1.iterator(DatastoreServiceImpl.java:306)
 [java]         at org.datanucleus.store.appengine.query.RuntimeExceptionWrappingIterable.iterator(RuntimeExceptionWrappingIterable.java:42)
 [java]         at org.datanucleus.store.appengine.query.StreamingQueryResult.<init>(StreamingQueryResult.java:77)
 [java]         at org.datanucleus.store.appengine.query.DatastoreQuery.newStreamingQueryResultForEntities(DatastoreQuery.java:324)
 [java]         at org.datanucleus.store.appengine.query.DatastoreQuery.fulfillEntityQuery(DatastoreQuery.java:310)
 [java]         at org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:242)
 [java]         at org.datanucleus.store.appengine.query.JDOQLQuery.performExecute(JDOQLQuery.java:84)
 [java]         at org.datanucleus.store.query.Query.executeQuery(Query.java:1489)
 [java]         at org.datanucleus.store.query.Query.executeWithArray(Query.java:1371)
 [java]         at org.datanucleus.store.query.Query.execute(Query.java:1344)
 [java]         at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:221)
 [java]         at app.controllers.RootController.Index(RootController.java:30)
[java]服务器正在运行http://localhost:8080/
[java]2010年1月21日下午4:16:52 com.google.appengine.repackaged.com.google.common.base.FinalizableReferenceQueue
[java]信息:无法启动引用终结器线程。仅当创建新引用时,才会进行引用清理。
[java]java.lang.reflect.InvocationTargetException
[java]位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
[java]位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java]位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java]位于java.lang.reflect.Method.invoke(Method.java:597)
[java]位于com.google.appengine.tools.development.agent.runtime.runtime.invoke(runtime.java:100)
[java]位于com.google.appengine.repackaged.com.google.common.base.FinalizableReferenceQueue。(FinalizableReferenceQueue.java:124)
[java]位于com.google.appengine.repackaged.com.google.common.labs.misc.InterningPools$WeakInterningPool.(InterningPools.java:104)
[java]位于com.google.appengine.repackaged.com.google.common.labs.misc.InterningPools.newWeakInterningPool(InterningPools.java:48)
[java]位于com.google.appengine.repacked.com.google.io.protocol.ProtocolSupport.(ProtocolSupport.java:55)
[java]位于com.google.apphosting.api.DatastorePb$Query.(DatastorePb.java:1072)
[java]位于com.google.apphosting.api.DatastorePb$Query$1。(DatastorePb.java:2355)
[java]位于com.google.apphosting.api.DatastorePb$Query.(DatastorePb.java:2355)
[java]位于com.google.appengine.api.datastore.QueryTranslator.convertToPb(QueryTranslator.java:28)
[java]位于com.google.appengine.api.datastore.datastoreserviceinpl$PreparedQueryImpl.convertToPb(datastoreserviceinpl.java:382)
[java]位于com.google.appengine.api.datastore.datastoreserviceinpl$PreparedQueryImpl.runQuery(datastoreserviceinpl.java:342)
[java]位于com.google.appengine.api.datastore.datastoreserviceinpl$PreparedQueryImpl.access$100(datastoreserviceinpl.java:272)
[java]位于com.google.appengine.api.datastore.datastoreserviceinpl$PreparedQueryImpl$1.iterator(datastoreserviceinpl.java:306)
[java]位于org.datanucleus.store.appengine.query.RuntimeExceptionWrappingitrable.iterator(RuntimeExceptionWrappingitrable.java:42)
[java]位于org.datanucleus.store.appengine.query.StreamingQueryResult.(StreamingQueryResult.java:77)
[java]位于org.datanucleus.store.appengine.query.DatastoreQuery.newstreamingqueryresultforenties(DatastoreQuery.java:324)
[java]位于org.datanucleus.store.appengine.query.DatastoreQuery.fulfillEntityQuery(DatastoreQuery.java:310)
[java]位于org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:242)
[java]位于org.datanucleus.store.appengine.query.JDOQLQuery.performExecute(JDOQLQuery.java:84)
[java]位于org.datanucleus.store.query.query.executeQuery(query.java:1489)
[java]位于org.datanucleus.store.query.query.executeWithArray(query.java:1371)
[java]位于org.datanucleus.store.query.query.execute(query.java:1344)
[java]位于org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:221)
[java]位于app.controllers.RootController.Index(RootController.java:30)
编辑:当我的索引页运行一个简单的选择数据存储查询时,就会发生这种情况。但它仍然只在开发服务器启动之后发生。如果刷新索引页或执行其他查询,则不再发生异常

以下是第一次运行时导致异常的查询

Query q = pm.newQuery(Question.class);
List<Question> cards = (List<Question>) q.execute();
Query q=pm.newQuery(Question.class);
列表卡片=(列表)q.execute();

事实上,我认为这是一个捕获并处理的异常。如果你看这里:


您将看到,
队列
仍然在第134行创建。我将进行更多的搜索,看看是否有其他方法可以更好地处理此问题,但我不知道这是否是导致您速度缓慢的原因。

这看起来像是竞争条件或其他与并发相关的问题。如果没有所有的代码加上我对GAE的知识不足,我不知道还能说什么。这似乎也涵盖了这个主题:它似乎是一个正确捕获和处理的异常,因为GAE不是一个线程系统。