0

3分ごとにXMLファイルをプルし、XMLを解析した後、ハッシュテーブルを最新の状態に保つ必要があるGWTアプリケーションのサーバー側コンポーネントを作成しようとしています。

調査の結果、ScheduledThreadPoolExecutorを使用してスレッドを設定しました

stationParser = new TFLStationsParserThread(bikeStations);
scheduler.scheduleWithFixedDelay(stationParser, 2, 180, SECONDS);

TFLStationsParserThreadには最小限のコンストラクターがあり、このrun()メソッドは

public void run() {
    System.out.println("TFLStationsParserThread run()");
    stationParser.refreshStationData(stations);
}

stationParserは、最終的に次のコマンドでデータを取得します

HTTPResponse response = URLFetchServiceFactory.getURLFetchService().fetch(request);

これが私の問題です:これ.fetch()をScheduledThreadPoolExecutor内から実行すると、次のエラーが発生します

com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'urlfetch' or call 'Fetch()' was not found.
    at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:98)
    at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:37)
    at couk.mtaylor.bikes.server.TFLStationsParser.refreshStationData(TFLStationsParser.java:66)
    at couk.mtaylor.bikes.server.TFLStationsParserThread.run(TFLStationsParserThread.java:35)
    ...

scheduleWithFixedDelayスケジューラーをコメントアウトしてrefreshStationData直接呼び出すと、そのような問題は発生しません。

これにより、スレッドに必要なGWTライブラリがいくつか欠落していると思いますが、これは私の知識を超えており、役立つソリューションをオンラインで見つけることができません。

メソッドを直接呼び出したときに、スケジュールされたスレッド内からこれらのGWTエラーメッセージが表示されるのはなぜですか?

4

2 に答える 2

1

これを確認することはできませんが、これはGAEでスレッドを実行する方法ではないことを伝えるGAEの方法である可能性があると思います。buildpath から GAE を削除し、.fetch() の使用を停止すると、コードは正常に機能します。

今のところ、Java に慣れるまで、GAE 用に作成するという考えは捨てています。

于 2012-06-07T22:07:40.843 に答える
0

Java用のGoogleアプリエンジンで非同期httpを実装しようとして奇妙な例外が発生する

Web アプリケーションではなく、Java アプリケーションとして実行しようとしていますか?

于 2012-06-05T00:26:17.163 に答える