![](/img/trans.png)
[英]GWT, Google App Engine, TimerTask or Thread in ServiceImpl throw exception
[英]App Engine UserService calls in servlet throw thread exception - Eclipse java
我在Eclipse中有一個使用GWT的基本Google App Engine Java項目。 我按照說明在Eclipse中設置了App Engine SDK和最新的GWT,並在Windows中將環境變量路徑設置為指向SDK根文件夾。
通過單擊起始頁上的登錄鏈接(在web.xml文件中定義)調用登錄servlet時,調用將按預期路由到我的HttpServlet處理程序類。 這樣就可以了。 在代碼中,我通過factory方法創建了UserService,但是任何調用(例如isUserLoggedIn()或createLoginURL())都會導致異常 。 我希望問題很明顯,但是我花了數小時試圖找出是什么原因導致了這個問題,但是沒有運氣:(
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {
UserService userService = UserServiceFactory.getUserService();
if (userService.isUserLoggedIn()) {
這是調用isUserLoggedIn()時的控制台輸出:
java.lang.IllegalStateException: Operation not allowed in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.users.UserServiceImpl.getCurrentEnvironmentOrThrow(UserServiceImpl.java:152)
at com.google.appengine.api.users.UserServiceImpl.isUserLoggedIn(UserServiceImpl.java:96)
使用這種類型的開發環境的任何人看起來都熟悉嗎? 我希望它是項目或xml配置文件中的簡單設置,或者是我所缺少的東西。 幾年前,我已經成功運行了類似的代碼,但只是回到了GAE的工作,所以servlet或項目設置可能已經改變了一些重要的事情。 非常感謝您的幫助和提示。
要使用App Engine API,您必須使用Development App Server在本地運行/調試應用程序 。 在Eclipse中,右鍵單擊項目,然后選擇運行方式> App Engine或調試方式> App Engine 。 有關更多詳細信息,請參閱文檔 。
要啟用GWT,您需要通過右鍵單擊項目並選擇Configure> Enable GWT SDM builder來配置GWT SDM Builder 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.