-2

我正在从事 GWT Appenginge 项目。我从外部 api 获取数据,我想每分钟更新一次数据库。我刚刚发现 appengine 不允许使用计时器!为什么??有什么解决方法,或者你认为我有一般的设计缺陷。

谢谢

4

3 回答 3

3

您是否尝试过 App Engine cron 任务?

于 2012-11-16T18:01:31.347 回答
1

您可能正在寻找与此类似的内容:GWT、Google App Engine、TimerTask 或 ServiceImpl 中的线程抛出异常

此外,您可能想要更新您的问题标题 - 它似乎与您的问题无关。

于 2012-11-16T17:58:23.747 回答
1

按要求回答您的问题:

我刚刚发现 appengine 不允许使用计时器!为什么??

java.util.Timer 是使用 Thread 实现的,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 正在提供一项名为“托管 VM”的新服务,该服务将允许您想要的任何环境,包括可以具有后台线程的完整 JVM: https ://developers.google.com/appengine/docs/managed-vms/

请注意,此 API 当前处于“预览”状态,这意味着尚不建议将其用于可靠的生产用途。

于 2014-07-07T23:54:42.997 回答