Google App Engine/Javaã«cronã®è¨å®ãå ¥ãã¦ã¿ãã
ãããã¤ããã以ä¸ã¨ã©ã¼
Unable to upload: java.io.IOException: Error posting to URL: http://appengine.google.com/api/datastore/cron/update?app_id=*****&version=*& 500 Internal Server Error Server Error (500) A server error has occurred. at com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java:140) at com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java:78) at com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java:345) at com.google.appengine.tools.admin.AppVersionUpload.updateCron(AppVersionUpload.java:101) at com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java:87) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:49) at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java:271) at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java:148) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
ã©ããããcron.xmlã«æ¥æ¬èªã¯ä½¿ããªãããã§ãã
ã¨ã©ã¼ããã¯ãã¾ãã¡ããããããªãã£ããã©ãæ¥æ¬èªé¨åãåé¤ãããéã£ãã
æ¯é±æ¨æã®19:00ã«ãããªããããªæã
<?xml version="1.0" encoding="UTF-8"?> <cronentries> <cron> <url>/cron/hoge</url> <description>thursday 19:30</description> <schedule>every thursday 19:30</schedule> <timezone>Asia/Tokyo</timezone> </cron> </cronentries>
timezoneãæå®ããã°ãUTCã§æå®ããªãã¦ãããã
ä¸è¨ãè¦ãã°ãããããã«ãcronã¯åºæ¬çã«URLããããã ããªã®ã§ã
ãµã¼ãã¬ãã(doGet)ãã¤ããããããã³ã°ãããã
ãã®éã»ãã¥ãªãã£ä¿è·ãã¦ãå¹³æ°ã ããã¨ã®ãã¨ãªã®ã§ã以ä¸ã®ããã«web.xmlã«è¿½è¨
<servlet-mapping> <servlet-name>numberCheck</servlet-name> <url-pattern>/cron/hoge</url-pattern> </servlet-mapping> <security-constraint> <web-resource-collection> <web-resource-name>cronJobs</web-resource-name> <url-pattern>/cron/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
ä¸è¨ã®ããã«æå®ãã¦ã¿ãã¨ããããã°ã«
ã¨ã©ã¼ããå®è¡ãã°ãåºãªãã
cronjobèªä½ã¯å¤±æã¨ãªãã
ã§ãrequests onlyã§ãã°ãè¦ãã¨
05-21 09:46PM 26.372 /cron/hoge 302 2002ms 1582cpu_ms 0kb See details 0.1.0.1 - - [21/May/2009:21:46:28 -0700] "GET /cron/hoge HTTP/1.1" 302 243 - -
302ã§ããã»ã»ã»
ç´æ¥ãµã¼ãã¬ãããããã¨ããã°ã¤ã³ãã¼ã¸ã«ãªãã¤ã¬ã¯ãããããããã
cronã§ããããªã£ã¦ãã£ã½ããã
ã¨ããããã§ã
ã»ãã¥ãªãã£ä¿è·ãã¯ããã¦å®è¡ããã¨ãããç¡äºæåã
ä¸å¿ä»¥ä¸ã®ããã«ã¦ã¼ã¶æ å ±ãåã£ã¦ã¿ã¾ããã
UserService userService = UserServiceFactory.getUserService(); Principal principal = req.getUserPrincipal(); log.info(principal == null ? "principal is null" : principal.getName()); User currentUser = userService.getCurrentUser(); log.info(currentUser == null ? "no user" : currentUser.getNickname()); String header = req.getHeader("X-AppEngine-Cron"); log.info(header);
çµæ
principal is null no user true
ã ããã§ããã¯ãã¦ã¼ã¶ããã¿ãé§ç®ãããä¸å¿cronèµ·åã ã¨ãããããã¯å
¥ã£ã¦ããã¨ãã£ãæãã§ããã
ã²ã¨ã¾ãã¯ã»ãã¥ãªãã£ä¿è·ãèªåã«ãã¦å¯¾å¿ãã¾ããã
追è¨
Issueãããã£ã¦ã
http://code.google.com/p/googleappengine/issues/detail?id=1299&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component
追è¨
æ´æ°ãã¾ã ã ã£ããã5åã¹ãªã¼ããã¦å度ãªãã©ã¤ã¨ãããã³ã¼ãã¯ãããªããã§ããã»ã»ã»
ãããããªãã®ã§ãåããããªcronè¨å®ãè¤æ°å
¥ãã¾ããã
urlã®éè¤ã¨ããé§ç®ã£ã½ãã®ã§é©å½ã«ã¯ã¨ãªãä»ä¸ãã¦éè¤ããªãããã«ãã¾ããã
å¾ç¶ã®cronã¯ååã®çµæãè¦ãããã«ãã¾ããã
ãããªã®ã§æ£ããã®ããªãã»ã»ã»
ãªãã¨ãªããå¦çèªä½ãå¥ã¹ã¬ããã«ãã¦æ¾ãæãã¦ãã¾ãã°ããã¯ã¨ã³ãã§ã¡ããã¡ããã¨ãã£ã¦ãããããªæ°ããã¾ããã
EntityManagerã¯filterã§éãã¦ãã¾ãã®ã§ãããã¾ããã
ãã£ã¨ããfilterã§éããEntityManagerã使ããã«æ¹ãã¦EntityManagerå©ç¨ããã°ããã ããã¨ãæãã¾ããã»ã»ã»