java - ScheduledThreadPoolExecutor 线程中的 GWT 环境错误

标签 java multithreading google-app-engine gwt

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

经过一番研究,我使用 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 错误消息,但在直接调用该方法时却不会?

最佳答案

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

现在我放弃了为 GAE 编写代码的想法,同时我更加习惯了 Java。

关于java - ScheduledThreadPoolExecutor 线程中的 GWT 环境错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10890025/

相关文章:

java - 通过 Spring Boot Rest API 查询 mongodb 集合以分页格式返回结果

java - 如何使用 JRuby 创建 Java applet?

java - 为 Java Socket 设置端口

python - main() 是否需要在每个包含处理程序的脚本中?

Python 奇怪的类变量用法

google-app-engine - 当内存利用率超过限制时横向扩展 GAE

java - struts 2基础应用了解

multithreading - Work Stealing 总是最合适的用户级线程调度算法吗?

c# - 从后台线程在 UI 线程上打开表单

python - 在 Python 队列中伪造一个插入