Auf Google App Engine erhalte ich jedes Mal, wenn ich den Entwicklungsserver starte, mehrere java.lang.reflect.InvocationTargetException. Ich verwende Spring MVC 3.0.
Meine Anwendung funktioniert gut, aber ich habe das Gefühl, dass die Ausnahme die Startzeit des Entwicklungsservers verlangsamt, und ich bin nicht sicher, ob die Ausnahme auch auf dem echten Server auftritt und die Startzeit verlangsamt, wenn GAE eine neue Instanz startet.
Die Ausgabe ist:
[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)
EDIT: Es stellte sich heraus, dass es passiert, wenn meine Indexseite eine einfache SELECT-Datenspeicherabfrage ausführt. Aber es passiert immer noch nur direkt nach dem Start des Entwicklungsservers. Wenn ich die Indexseite aktualisiere oder andere Abfragen ausführe, tritt die Ausnahme nicht mehr auf.
Hier ist die Abfrage, die bei der ersten Ausführung die Ausnahme verursacht.
Query q = pm.newQuery(Question.class);
List<Question> cards = (List<Question>) q.execute();