我的本地计算机上有两个tomcat服务器," n"每个服务器上的战争。
我希望只有服务器的一个Hazelcast实例,但我只获得一个WAR实例,同样使用Singleton Wrappe r因为这个单例是"附加"到WAR Classloader ....
这么简单吗?
Tomcat Server的一个Hazelcast实例(希望在Oracle Weblogic中使用相同的方法),以及在同一服务器上的所有战争中的共享hazelcast实例。 JVM只有一个节点
那些Hazelcast实例加入了一个群集,只有一个群集。
有一件事我不明白,如果我在一个WAR中创建一个HazelCast实例,并试图进入另一个,那么这是空的......同样的过程(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 Classpath上,(例如lib目录)可以正常工作。
因此,我推断出,对于获取Hazelcast实例,使用了Hazelcast对象使用的活动进程和类加载器。如果在Tomcat上部署的不同WAR(在同一个虚拟机上),使用此战争不同的Hazelcast库(通过WAR),Hazelcast将尝试创建新实例,即使它是相同的过程
答案 0 :(得分:2)
您需要使用hazelcast客户端连接到hazelcast服务器。您需要将hazelcast服务器节点作为可运行的jar文件(在不同的服务器节点上)运行 - 并且它们必须配置为在其网络接口上托管并连接到运行hazelcast节点的所有其他服务器主机,以便形成淡褐色群集。 hazelcast客户端可以连接到此群集(您可以在hazelcast客户端xml文件中指定或通过Hazelcast API执行此操作)。您可以使用枚举来创建返回hazelcast客户端实例的单例 - 通过枚举获取对此hazelcast客户端的引用。您可以根据需要在尽可能多的Java进程上使用此客户端。
答案 1 :(得分:1)
正如更新的条目所说,只是在Tomcat,Weblogic,任何服务器,启动类路径库上都有Hazelcast库......:
我已经推断出,对于获取Hazelcast实例,使用的是活动的 进程和Hazelcast对象使用的类加载器。如果在 在Tomcat上部署的不同WAR(在同一个虚拟机上), 有这场战争的不同Hazelcast图书馆(通过WAR)Hazelcast 将尝试创建新实例,即使它是相同的过程