我正在尝试编写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错误消息,但是当我直接调用该方法时却没有?
答案 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应用程序运行吗?