我需要在 Websphere Application Server (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 似乎无法关闭,最后,服务器挂起,迫使我终止该进程。 一旦我终止了该进程,我就会收到一个关于未找到类 Node$2 的 hazelcast 异常。
我做错了什么?如何确保 Hazelcast 与我的应用程序一起正常关闭?
最佳答案
您使用的是哪个 Hazelcast 版本?我们在 3.8 中修复了可能导致此类行为的类加载器泄漏(请参阅 https://github.com/hazelcast/hazelcast/pull/9691 )。
因此,如果您之前使用过旧版本,请尝试 Hazelcast 3.8。否则,线程转储将非常有助于了解 Hazelcast 正在做什么。
您可以通过以下方式找到所有正在运行的Java进程
jps -l
然后通过创建线程转储
jstack <PID>
关于java - 为什么 Hazelcast 无法在我的应用程序服务器上关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42610811/