Java 为什么Hazelcast能够';我的应用服务器上没有关机吗?

Java 为什么Hazelcast能够';我的应用服务器上没有关机吗?,java,jakarta-ee,websphere,hazelcast,Java,Jakarta Ee,Websphere,Hazelcast,我需要在WebSphereApplicationServer(8.5)上部署我的企业应用程序 为了处理hazelcast的生命周期,我准备了以下监控对象: public class HazelMonitor{ private static HazelcastInstance inst = null; public static synchronized getInstance(){ if(inst == null){ inst = Hazelcast

我需要在WebSphereApplicationServer(8.5)上部署我的企业应用程序

为了处理hazelcast的生命周期,我准备了以下监控对象:

public class HazelMonitor{
    private static HazelcastInstance inst = null;

    public static synchronized getInstance(){
     if(inst == null){
         inst = Hazelcast.getOrCreateInstance(...);
     }
      return inst;
    }

 public static synchronized shutdown(){
       if(inst != null){
           inst.shutdown();
           inst = null;
       }
 }
}
现在,我的Ejb是这样的:

public class MyEjb{
 @PostConstruct
 pulic void init(){
   HazelMonitor.getInstance();
 }

 @PreDestroy
 public void close(){
    HazelMonitor.shutdown();
 }
}
除了我试图关闭我的服务器外,一切似乎都正常:Hazelcast似乎无法关闭,最后,服务器挂起,迫使我终止进程。 一旦我终止进程,我就会收到一个关于未找到类的hazelcast异常节点$2


我做错了什么?如何确保Hazelcast与我的应用程序一起正常关闭?

您使用的是哪个Hazelcast版本?我们修复了3.8中可能导致此类行为的类加载器泄漏(请参阅)

因此,如果您以前使用过旧版本,请尝试Hazelcast 3.8。否则,线程转储将非常有助于了解Hazelcast正在做什么

您可以通过找到所有正在运行的Java进程

jps -l
然后通过创建线程转储

jstack <PID>
jstack

您使用的是哪个Hazelcast版本?我们修复了3.8中可能导致此类行为的类加载器泄漏(请参阅)

因此,如果您以前使用过旧版本,请尝试Hazelcast 3.8。否则,线程转储将非常有助于了解Hazelcast正在做什么

您可以通过找到所有正在运行的Java进程

jps -l
然后通过创建线程转储

jstack <PID>
jstack

您是否确认EJB
@PreDestroy
实际上正在被调用,并且正在进行
.shutdown()
调用?我猜在调用
PreDestroy
方法时,类加载器已经被杀死。尝试将其包装到Try/catch块中,记录发生的任何异常。您是否确认EJB
@PreDestroy
实际上正在被调用,并且
.shutdown()
调用正在发生?我猜调用
PreDestroy
方法时,类加载器已经被杀死。尝试将其包装到Try/catch块中,记录发生的任何异常。