在帶插件v1.4.0的Eclipse 3.6中AppEngine 1.3.8 GWT 2.1.0本地任務隊列不再執行。Eclipse GWT和AppEngine - 本地任務隊列不再執行
重現:
創建一個新的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天時間。
謝謝!
你有沒有想過網絡的工作方式是什麼?我遇到了同樣的問題。 – 2011-11-06 18:00:45