【发布时间】:2016-08-06 12:48:35
【问题描述】:
我的本地机器上有两台 tomcat 服务器,每台服务器上有“n”次战争。
我只想通过服务器获得一个 Hazelcast 实例,但我只通过 WAR 获得 1 个实例,同时使用 Singleton Wrapper,因为这个单例是“附加”到 WAR 类加载器....
有什么简单的方法吗?
Tomcat 服务器的一个 Hazelcast 实例(希望在 Oracle Weblogic 中使用相同的方法),以及一个共享的 hazelcast 实例在所有战争中进入同一服务器。 JVM只有一个节点
那些 Hazelcast 实例仅加入一个集群。
我不明白的一件事是,如果我在一个 WAR 中创建一个 HazelCast 实例,并尝试进入另一个 WAR,这是空的..是同一个进程 (JVM ...)。
类似这样的:
@Slf4j
public class MyCustomHazelCastManager {
public static void debugInstances() {
Set<HazelcastInstance> debugginIsntances = Hazelcast.getAllHazelcastInstances();
log.debug("Current Instances:" + debugginIsntances.size());;
for (HazelcastInstance i : debugginIsntances ) {
log.debug(i.getName());
}
}
public static HazelcastInstance getInstance() {
log.debug("MyCustomHazelCastManager.getInstance() for {}" , ManagementFactory.getRuntimeMXBean().getName());
HazelcastInstance instance =
Hazelcast.getHazelcastInstanceByName(ManagementFactory.getRuntimeMXBean().getName());
if (instance == null) {
Config config = new Config();
log.debug("RuntimeProcess ID :" +ManagementFactory.getRuntimeMXBean().getName());
config.setInstanceName(ManagementFactory.getRuntimeMXBean().getName());
instance = Hazelcast.newHazelcastInstance(config);
log.debug("Create Hazelcast instance with name:"+ ManagementFactory.getRuntimeMXBean().getName() );
} else {
System.out.println("\n\n Warning ! there is one instance with name :{}"+ManagementFactory.getRuntimeMXBean().getName());
}
return instance;
}
}
为什么 Hazelcast.getHazelcastInstanceByName() 不起作用??????
更新:
如果将 HazelCast 库放在 Tomcat 类路径上,(例如 lib 目录)可以正常工作。
所以,我推断要获取 Hazelcast 实例,使用的是活动进程和 Hazelcast 对象使用的类加载器。如果在 Tomcat 上(在同一虚拟机上)部署的不同 WAR 中,让不同的 Hazelcast 库(由 WAR)发生这种战争,Hazelcast 将尝试创建新实例,即使它是同一个进程
【问题讨论】:
标签: tomcat hazelcast weblogic-10.x