java – Hazelcast在Weblogic(以及Tomcat)上停止应用程序后继续运行

我一直在玩弄Hazelcast提供的东西.在应用程序中使用Hazelcast只有一些事情.

在Weblogic服务器10.3.6上,我看到其中一个地图出了问题.尽管它运行的时间可能超过几天没有问题,但它仍然没有出现类定义错误.然后我在Oracle Weblogic上运行8个节点时停止应用程序.我假设Hazelcast集群/实例也会关闭,但即使应用程序在Weblogic的所有节点上停止,我也看到Hazelcast在日志上合并异常(继续抛出).

我还在Tomcat 7上测试了我的基于Spring的应用程序,即使我关闭了应用程序,Hazelcast还是拒绝以某种方式关闭.

这是正常的行为吗?即使在关闭应用程序后,我们如何关闭所有Hazelcast实例?

请注意,我在应用程序启动时调用Hazelcast,没有特殊客户端,只有8个Weblogic服务器节点.

编辑:这是迁移问题的堆栈跟踪

    SEVERE: Problem while reading DataSerializable, namespace: 0, id: 0, class: 'com.hazelcast.partition.impl.MigrationRequestOperation', exception: com.hazelcast.partition.impl.MigrationRequestOperation
com.hazelcast.nio.serialization.HazelcastSerializationException: Problem while reading DataSerializable, namespace: 0, id: 0, class: 'com.hazelcast.partition.impl.MigrationRequestOperation', exception: com.hazelcast.partition.impl.MigrationRequestOperatio

 at com.hazelcast.nio.serialization.DataSerializer.read(DataSerializer.java:120)
 at com.hazelcast.nio.serialization.DataSerializer.read(DataSerializer.java:39)
 at com.hazelcast.nio.serialization.StreamSerializerAdapter.toObject(StreamSerializerAdapter.java:65)
 at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:260)
 at com.hazelcast.spi.impl.NodeEngineImpl.toObject(NodeEngineImpl.java:186)
 at com.hazelcast.spi.impl.BasicOperationService$OperationPacketHandler.loadOperation(BasicOperationService.java:638)
 at com.hazelcast.spi.impl.BasicOperationService$OperationPacketHandler.handle(BasicOperationService.java:621)
 at com.hazelcast.spi.impl.BasicOperationService$OperationPacketHandler.access$1500(BasicOperationService.java:614)
 at com.hazelcast.spi.impl.BasicOperationService$BasicDispatcherImpl.dispatch(BasicOperationService.java:566)
 at com.hazelcast.spi.impl.BasicOperationScheduler$OperationThread.process(BasicOperationScheduler.java:466)
 at com.hazelcast.spi.impl.BasicOperationScheduler$OperationThread.processPriorityMessages(BasicOperationScheduler.java:480)
 at com.hazelcast.spi.impl.BasicOperationScheduler$OperationThread.doRun(BasicOperationScheduler.java:457)
 at com.hazelcast.spi.impl.BasicOperationScheduler$OperationThread.run(BasicOperationScheduler.java:432)
Caused by: java.lang.ClassNotFoundException: com.hazelcast.partition.impl.MigrationRequestOperation
 at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
 at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
 at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
 at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
 at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
 at com.hazelcast.nio.ClassLoaderUtil.tryLoadClass(ClassLoaderUtil.java:124)
 at com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:113)
 at com.hazelcast.nio.ClassLoaderUtil.newInstance(ClassLoaderUtil.java:66)
 at com.hazelcast.nio.serialization.DataSerializer.read(DataSerializer.java:109)
 ... 12 more
Mar 16, 2015 5:31:29 PM com.hazelcast.spi.OperationService

最佳答案 可靠的
Hazelcast docs说:

As a final step, if you are done with your client, you can shut it down as shown below. This will release all the used resources and will close connections to the cluster.

  client.shutdown();

应该在bean的destroy()方法中调用:

 public class ExampleBean implements DisposableBean {
    public void destroy() {
      client.shutdown();
    }
 }

您粘贴的异常是由于您的应用程序类加载器在关闭应用程序时被销毁的事实.

点赞