私はTimerTask
をGoogle App EngineのdataStoreから定期的にエントリを削除するように設定しようとしています。だからServletContextListener
をTimer
に設定しました。タスクが実際に実行されるとき、それはAPIの環境が設定されていないと文句を言い、しかしObjectify and TimerTask:このスレッドにAPI環境が登録されていません
ObjectifyService.register(Person.class);
:
Exception in thread "Timer-0" java.lang.NullPointerException: No API environment is registered for this thread.
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:80)
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:90)
at com.google.appengine.api.datastore.Query.<init>(Query.java:214)
at com.google.appengine.api.datastore.Query.<init>(Query.java:143)
at com.googlecode.objectify.impl.cmd.QueryImpl.<init>(QueryImpl.java:72)
at com.googlecode.objectify.impl.cmd.LoadTypeImpl.createQuery(LoadTypeImpl.java:50)
at com.googlecode.objectify.impl.cmd.LoadTypeImpl.filter(LoadTypeImpl.java:58)
at myApp.MyServletContextListener$MyTask.run(MyServletContextListener.java:58)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
任意のアイデアをcontextInitialized
インサイド
は、私は私の客観クラスを登録しています?私はクラスを登録する行をObjectifyService.factory().register(Person.class);
に変更しようとしましたが、それは役に立たなかったようです。 documentation of java.util.Timer
classから
は、これは客観とは何の関係もありません。タイマースレッドから低レベルのAPIに直接問合せを発行すると、同じエラーが表示されます。私はあなたが質問を簡素化することをお勧めします、あなたはより良い答えを得ることができます。私はTimerが(開発者ではなく)GAEプロダクションで働いていると聞いて実際に驚いています。 – stickfigure
@stickfigureプロダクションで働いているのか、まだアップロードしようとしていないのか分かりません。 :) –