ScheduledThreadPoolExecutor线程中的GWT环境错误

时间:2012-06-05 00:10:47

标签: java multithreading google-app-engine gwt

我正在尝试编写GWT应用程序的服务器端组件,该组件应每3分钟提取一个XML文件,并在解析XML后保持Hashtable为最新。

经过一番研究,我使用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);

这是我的问题:当从ScheduledThreadPoolExecutor中运行此.fetch()时,我收到以下错误

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错误消息,但是当我直接调用该方法时却没有?

2 个答案:

答案 0 :(得分:1)

我无法证实这一点,但我认为这可能是GAE告诉我这不是如何在GAE中做线程的方式。如果我从构建路径中删除GAE并停止使用.fetch()。

,代码工作正常

现在我放弃了为GAE写作的想法,而我更习惯于Java。

答案 1 :(得分:0)

getting strange exception trying to implement asynchronous http in google app engine for java

您是尝试将其作为Java应用程序而不是Web应用程序运行吗?