J'héberge mon application sur google app engine. Ce que mon application doit faire est de se connecter toutes les deux minutes à un site Web, de l'analyser et d'envoyer les informations nécessaires à mon appareil en utilisant C2DM. J'ai d'abord testé mon application pour voir si cela fonctionne une fois. Et ça fonctionne bien. Mais pour vérifier le webiste toutes les deux minutes, je mets les méthodes nécessaires dans une boucle while, puis je mets Thread.sleep (120000) dans la boucle while. Il a wokred pendant un moment mais maintenant je reçois ceci: Exception non interceptée de servlet com.google.apphosting.runtime.HardDeadlineExceededError: Cette demande (f6b9f0b8e1ec6f23) a commencé à 2011/06/09 10: 24: 22.514 UTC et était toujours en cours d'exécution à 2011/06/09 10: 24: 52.824 UTC. Donc, avant la chose de deux minutes, tout était OK.google app engine HardDeadlineExceededError
ce qui est tout le message d'erreur:
Uncaught exception from servlet
com.google.apphosting.runtime.HardDeadlineExceededError: This request (f6b9f0b8e1ec6f23) started at 2011/06/09 10:24:22.514 UTC and was still executing at 2011/06/09 10:24:52.824 UTC.
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:408)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at java.lang.StringBuilder.<init>(StringBuilder.java:110)
at tripplannerServer.ParseVerstoring.parsePlanned(ParseVerstoring.java:50)
at tripplannerServer.SendMessage2.geplandeVerstoring(SendMessage2.java:257)
at tripplannerServer.TripplannerServerServlet.doGet(TripplannerServerServlet.java:152)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:238)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135)
at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$2.handleRequest(RuntimePb.java:9669)
at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:439)
at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:573)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:448)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:688)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:326)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:318)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:446)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
Toute idée comment résoudre ce problème? Ou l'idée d'utiliser Thread.sleep() n'est pas bonne? Sinon comment puis-je faire l'application vérifier le site Web toutes les deux minutes?
Merci d'avance.
Nous vous remercions de votre réponse. Dois-je réécrire mon code à partir de rien pour que ce cron.xml fonctionne ou simplement intégrer le cron dans mon application existante? Je suppose que Google me facture pour l'utilisation de Backends, non? Je pose ces questions parce que je n'ai jamais entendu parler de cron.xml ou Backends – mnish
@mnish L'application dans crom.xml est simplement une servlet. Je suppose que vous avez juste besoin de supprimer sleep() et loop pour créer un sevlet pour une seule course. Cochez [link] (http://code.google.com/appengine/docs/java/configyaml/cron.html) pour plus de détails sur cron.xml. – ShuaiYuan