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

时间:2015-03-17 14:10:00

标签: java tomcat weblogic hazelcast

我一直在玩弄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

1 个答案:

答案 0 :(得分:2)

可靠的Hazelcast docs说:

  

最后一步,如果您已完成客户端,可以将其关闭,如下所示。这将释放所有已使用的资源,并将关闭与群集的连接。

  client.shutdown();

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

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

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