2010-11-04 13 views
1

Dans Eclipse 3.6 avec Plugin v1.4.0 AppEngine 1.3.8 Les files d'attente de tâches locales GWT 2.1.0 ne sont plus exécutées.Eclipse GWT et AppEngine - Les files d'attente de tâches locales ne sont plus exécutées

Reproduire:

Créer un nouveau projet GWT et AppEngine (j'ai appelé le paquet "test2" ci-dessous)

Ajoutez la méthode suivante à GreetingServiceImpl greetServer() avant la ligne de retour:

final Queue queue = QueueFactory.getDefaultQueue(); 
queue.add(TaskOptions.Builder.url("/taskrunner").param("id", 
UUID.randomUUID().toString())); 

Créer une classe dans le package serveur "TaskRunner" ce qui suit:

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"); 
    } 

} 

Ajouter ce qui suit à 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> 

Exécutez le projet et cliquez sur le bouton GWT. Après environ 10 secondes, vous obtiendrez l'exception suivante sur la console:

[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) 

Retirer GWT du projet et il fonctionne! Pour tester ceci:

Ajouter classe serveur

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())); 

} 
    } 

Ajouter à 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> 

Retirez GWT et appuyez sur http://127.0.0.1:8888/taskrunnertest du projet (décocher utilisation GWT) - aucune exception est levée. (Avec GWT activé cette URL jette l'exception).

Cela fonctionnait avec GWT activé. S'il vous plaît, quelqu'un peut-il vous conseiller un correctif car il m'a coûté 2 jours jusqu'à présent.

Merci!

Répondre

0

Je recevais la même erreur, il s'est avéré être parce que je fonctionnais sur un bâton large bande mobile 3G USB. Cela change quelque chose dans le fonctionnement du réseau sur mon ordinateur portable. Fondamentalement, l'URL http://0.0.0.0 ne résout plus pour moi, localhost l'a toujours fait, c'est pourquoi je pouvais encore parcourir l'application en cours d'exécution localement - mais les tâches sur le serveur de développement utilisent 0.0.0.0 semble-t-il.

+0

Avez-vous déjà compris ce que c'était que le fonctionnement du réseau? Je frappe ce même problème. –