【发布时间】:2012-11-05 11:45:55
【问题描述】:
我正在从事 GWT Appenginge 项目。我从外部 api 获取数据,我想每分钟更新一次数据库。我刚刚发现appengine不允许计时器!为什么?? 有什么解决方法,或者你认为我有一般的设计缺陷。
谢谢
【问题讨论】:
标签: java google-app-engine gwt timer
我正在从事 GWT Appenginge 项目。我从外部 api 获取数据,我想每分钟更新一次数据库。我刚刚发现appengine不允许计时器!为什么?? 有什么解决方法,或者你认为我有一般的设计缺陷。
谢谢
【问题讨论】:
标签: java google-app-engine gwt timer
按要求回答您的问题:
我刚刚发现 appengine 不允许使用计时器!为什么??
java.util.Timer 是使用线程实现的,AppEngine 不允许,除非使用自己的 API。所以当你尝试使用 java.util.Timer 时,你会得到一个异常:
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:375)
at java.security.AccessController.checkPermission(AccessController.java:565)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56)
at com.google.apphosting.runtime.security.CustomSecurityManager.checkAccess(CustomSecurityManager.java:131)
at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
at java.lang.Thread.init(Thread.java:378)
at java.lang.Thread.<init>(Thread.java:432)
at java.util.TimerThread.<init>(Timer.java:499)
at java.util.Timer.<init>(Timer.java:101)
at java.util.Timer.<init>(Timer.java:132)
禁止任意线程创建使 AppEngine 系统更容易管理同一台机器上的多个应用程序,而不会过多地相互干扰。
AppEngine 正在提供一项名为“托管虚拟机”的新服务,该服务将支持您想要的任何环境,包括可以具有后台线程的完整 JVM: https://developers.google.com/appengine/docs/managed-vms/
请注意,此 API 目前处于“预览”阶段,这意味着尚不建议将其用于可靠的生产用途。
【讨论】:
您是否尝试过 App Engine cron 任务?
【讨论】:
您可能正在寻找与此类似的内容:GWT, Google App Engine, TimerTask or Thread in ServiceImpl throw exception
另外,您可能想要更新您的问题标题 - 它似乎与您的问题无关。
【讨论】: