【发布时间】:2024-01-20 01:12:01
【问题描述】:
在带有插件 v1.4.0 AppEngine 1.3.8 GWT 2.1.0 本地任务队列的 Eclipse 3.6 中不再执行。
复制:
创建一个新的 GWT 和 AppEngine 项目(我将包命名为“test2” 下面)
在 GreetingServiceImpl greetServer() 方法之前添加以下内容 返回线路:
final Queue queue = QueueFactory.getDefaultQueue();
queue.add(TaskOptions.Builder.url("/taskrunner").param("id",
UUID.randomUUID().toString()));
使用以下内容在服务器包“TaskRunner”中创建一个类:
public class TaskRunner extends HttpServlet {
@Override
public void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
System.out.println("TaskRunner");
}
@Override
public void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
System.out.println("TaskRunner");
}
}
将以下内容添加到 web.xml
<servlet>
<servlet-name>taskRunner</servlet-name>
<servlet-class>test2.server.TaskRunner</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>taskRunner</servlet-name>
<url-pattern>/taskrunner</url-pattern>
</servlet-mapping>
运行项目并单击 GWT 按钮。大约 10 秒后,您 将在控制台上得到以下异常:
[ERROR] Job default.task1 threw an unhandled Exception:
com.google.apphosting.api.ApiProxy$ApplicationException:
ApplicationError: 2: Received exception executing http method POST
against URL http: //0.0.0.0:8888/taskrunner: No route to host: connect
at
com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:
239)
at com.google.appengine.api.labs.taskqueue.dev.LocalTaskQueue
$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:
471)
at
com.google.appengine.api.labs.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:
77)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool
$WorkerThread.run(SimpleThreadPool.java:520)
[ERROR] Job (default.task1 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See
nested exception: com.google.apphosting.api.ApiProxy
$ApplicationException: ApplicationError: 2: Received exception
executing http method POST against URL http: //0.0.0.0:8888/taskrunner:
No route to host: connect]
at org.quartz.core.JobRunShell.run(JobRunShell.java:214)
at org.quartz.simpl.SimpleThreadPool
$WorkerThread.run(SimpleThreadPool.java:520)
* Nested Exception (Underlying Cause) ---------------
com.google.apphosting.api.ApiProxy$ApplicationException:
ApplicationError: 2: Received exception executing http method POST
against URL http: //0.0.0.0:8888/taskrunner: No route to host: connect
at
com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:
239)
at com.google.appengine.api.labs.taskqueue.dev.LocalTaskQueue
$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:
471)
at
com.google.appengine.api.labs.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:
77)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool
$WorkerThread.run(SimpleThreadPool.java:520)
从项目中删除 GWT,它就可以工作了!对此进行测试:
添加服务器类
public class TaskRunnerTest extends HttpServlet {
public void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
final Queue queue = QueueFactory.getDefaultQueue();
queue.add(TaskOptions.Builder.url("/taskrunner").param("id", UUID.randomUUID().toString()));
}
}
添加到 web.xml
<servlet>
<servlet-name>taskRunnerTest</servlet-name>
<servlet-class>test2.server.TaskRunnerTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>taskRunnerTest</servlet-name>
<url-pattern>/taskrunnertest</url-pattern>
</servlet-mapping>
从项目中删除 GWT(取消选中使用 GWT)并点击 http://127.0.0.1:8888/taskrunnertest - 不会引发异常。 (启用 GWT 后,该 url 会引发异常)。
这曾经在启用 GWT 的情况下工作。请有人建议修复,因为它花了我 2 到现在为止。
谢谢!
【问题讨论】:
标签: google-app-engine gwt google-eclipse-plugin