2009-12-08 5 views
1

Je travaille sur mon premier projet Java basé sur GWT pour une tâche d'école. C'est une application de chat et le client interroge le serveur pour de nouveaux événements, tandis que le serveur garde un minuteur pour chaque utilisateur afin de détecter l'inactivité.GWT: Timer provoque un avertissement d'exécution

Le problème suivant se produit lors de l'exécution:

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. Le problème semble être dans server/ChatServiceImpl.java.

Est-ce que je fais quelque chose de mal? Je suis coincé.

Répondre

2

Comme il s'agit d'une affectation scolaire, essayez d'abord de désactiver SecurityManager.

Mis à jour: Il doit être désactivé sauf si vous avez défini un -Djava.security.manager quelque part. Voir How to disable Java security manager?

BTW, vous pourriez être intéressé par this lien;) La page a le code source disponible pour le téléchargement.

+0

Merci de m'avoir indiqué le livre. On dirait une ressource merveilleuse! Maintenant, si je peux seulement comprendre comment désactiver le SecurityManager ... :) – Dan

+0

Obtenez-vous cette erreur lors de l'exécution en mode hébergé? avez-vous essayé de déployer le dossier war dans une installation standard de tomcat pour voir si vous obtenez toujours la même erreur? –

+0

Merci pour toute l'aide. J'ai temporairement commenté la partie avec la minuterie afin que je puisse faire quelque chose. Je vais essayer de désactiver le gestionnaire de sécurité lorsque j'applique le minuteur d'inactivité. – Dan

0

Si vous essayez d'exécuter l'application de servlet sur Google App Engine, ce que la trace de la pile semble indiquer, vous ne pouvez pas créer de nouveaux threads. App Engine ne le permet pas.