我正在開發一個GWT Appenginge項目。我從外部API獲取數據,並且我想每分鐘更新一次數據庫。我剛發現appengine不允許定時器!爲什麼?? 有什麼解決方法,或者您認爲我有一個通用設計缺陷。定時器替換爲Appengine
感謝
我正在開發一個GWT Appenginge項目。我從外部API獲取數據,並且我想每分鐘更新一次數據庫。我剛發現appengine不允許定時器!爲什麼?? 有什麼解決方法,或者您認爲我有一個通用設計缺陷。定時器替換爲Appengine
感謝
你可能尋找類似這樣:GWT, Google App Engine, TimerTask or Thread in ServiceImpl throw exception
此外,您可能需要更新您的問題的標題 - 這似乎並不可能與你的問題。
要回答你的問題問爲:
我剛剛發現的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是目前在「預覽」,這意味着它還不被推薦用於可靠的生產。
我會看看它,謝謝你的標題提示:D – benehsv