2017-10-04 7 views
0

J'ai incorporé la noisette (3.8.2) dans une application web Tomcat 7. Lors de l'arrêt que je vous appelleLa mise en niche intégrée empêche l'arrêt net dans Tomcat

myInstance.shutdown(); 
Hazelcast.shutdownAll(); 

Mais je suis toujours à obtenir cette erreur dans les journaux, tomcat qui empêche l'arrêt propre de mon webapp. HazelcastManagedThread semble essayer d'exécuter une instance de ClisterListenerSupport après l'arrêt du serveur. Est-ce qu'il me manque d'autres étapes de nettoyage que je devrais ajouter à mon crochet d'arrêt?

04-Oct-2017 12:15:08.923 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8084"] 
04-Oct-2017 12:15:08.952 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"] 
04-Oct-2017 12:15:09.048 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8084"] 
04-Oct-2017 12:15:09.049 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"] 
04-Oct-2017 12:15:14.226 INFO [hz.client_0.cluster-] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load [com.hazelcast.client.spi.impl.ClusterListenerSupport$1$1]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. 
    java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [com.hazelcast.client.spi.impl.ClusterListenerSupport$1$1]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. 
     at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1327) 
     at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1313) 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1196) 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 
     at com.hazelcast.client.spi.impl.ClusterListenerSupport$1.run(ClusterListenerSupport.java:235) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
     at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64) 
     at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80) 

    Exception in thread "hz.client_0.cluster-" java.lang.IllegalStateException: Can't overwrite cause with java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [com.hazelcast.client.spi.impl.ClusterListenerSupport$1$1]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. 
     at java.lang.Throwable.initCause(Throwable.java:457) 
     at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1316) 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1196) 
     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 
     at com.hazelcast.client.spi.impl.ClusterListenerSupport$1.run(ClusterListenerSupport.java:235) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
     at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64) 
     at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80) 
    Caused by: java.lang.ClassNotFoundException 
     at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1315) 
     ... 8 more 

Répondre

0

Ceci est difficile à résoudre. Le problème est que Tomcat est déjà en mode d'arrêt et que le chargeur de classe ne chargera pas de nouvelles classes. Hazelcast utilise cependant des classes lors de l'arrêt pour la première fois, elles devraient donc être chargées. Corriger cela est en fait plutôt moche. Vous pouvez utiliser Class.forName (ou d'autres mécanismes de réflexion) pour charger la classe. Vous n'avez pas besoin de stocker une référence à la classe, mais cela forcera la JVM à charger cette autre classe.

+0

Une idée de pourquoi Hazelcast essaye de faire ceci après l'arrêt? Cela ressemble à quelque chose que je fais mal soit au démarrage ou à l'arrêt. – Kevin

+0

Simplement parce que les classes sont utilisées pendant l'arrêt qui n'ont jamais été utilisées auparavant. – noctarius