2009-12-08 22 views
1

我正在爲我的第一個基於GWT的Java項目進行學校作業。這是一個聊天應用程序,客戶端輪詢服務器以查找新事件,而服務器爲每個用戶保留一個計時器以檢測不活動。在運行時發生GWT:計時器導致運行時警告

以下問題:

Dec 8, 2009 7:41:17 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: /GAEChat/chat 
java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup) 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:151) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:176) 
    at java.lang.ThreadGroup.checkAccess(Unknown Source) 
    at java.lang.Thread.init(Unknown Source) 
    at java.lang.Thread.<init>(Unknown Source) 
    at java.util.TimerThread.<init>(Unknown Source) 
    at java.util.Timer.<init>(Unknown Source) 
    at java.util.Timer.<init>(Unknown Source) 
    at gaechat.server.ChatServiceImpl.<init>(ChatServiceImpl.java:22) 
    at sun.reflect.GeneratedConstructorAccessor14.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at java.lang.Class.newInstance0(Unknown Source) 
    at java.lang.Class.newInstance(Unknown Source) 
    at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) 
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:121) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:352) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at org.mortbay.jetty.Server.handle(Server.java:313) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
    at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) 

Here's the code repository。問題似乎在server/ChatServiceImpl.java

我做錯了什麼?我卡住了。

回答

2

因爲這是一個學校任務,請先嚐試禁用SecurityManager。

更新:它應該被禁用,除非你有一個-Djava.security.manager設置的地方。 請參閱How to disable Java security manager?

順便說一句,您可能會感興趣this鏈接;)該網頁的源代碼可供下載。

+0

感謝您指點我的書。看起來像一個美妙的資源!現在,如果我只能弄清楚如何禁用SecurityManager ... :) – Dan 2009-12-08 20:24:26

+0

您是否在託管模式下運行時遇到錯誤?你有沒有試過在標準的tomcat安裝中部署war文件夾,看看你是否仍然得到相同的錯誤? – 2009-12-08 20:31:48

+0

感謝您的幫助。我已經用計時器暫時註釋掉了部件,這樣我就可以完成一些任務。當我將不活動計時器恢復時,我將嘗試禁用安全管理器。 – Dan 2009-12-08 20:34:52

0

如果您嘗試在Google App Engine上運行servlet應用程序,而該堆棧跟蹤似乎表明您正在使用該應用程序,則無法創建新線程。 App Engine不允許它。