2012-11-16 56 views
-2

我正在開發一個GWT Appenginge項目。我從外部API獲取數據,並且我想每分鐘更新一次數據庫。我剛發現appengine不允許定時器!爲什麼?? 有什麼解決方法,或者您認爲我有一個通用設計缺陷。定時器替換爲Appengine

感謝

回答

3

您是否嘗試過App Engine cron任務?

+0

還沒有,我會嘗試一下。 – benehsv

1

要回答你的問題問爲:

我剛剛發現的AppEngine不允許計時器!爲什麼??

java.util.Timer是使用線程實現的,除了使用自己的API之外,AppEngine不允許使用該線程。所以,當您嘗試使用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是目前在「預覽」,這意味着它還不被推薦用於可靠的生產。