Hazelcast实例由服务器而不是战争

时间:2016-08-06 12:48:35

标签: tomcat hazelcast weblogic-10.x

我的本​​地计算机上有两个tomcat服务器," n"每个服务器上的战争。

我希望只有服务器的一个Hazelcast实例,但我只获得一个WAR实例,同样使用Singleton Wrappe r因为这个单例是"附加"到WAR Classloader ....

这么简单吗?

  1. Tomcat Server的一个Hazelcast实例(希望在Oracle Weblogic中使用相同的方法),以及在同一服务器上的所有战争中的共享hazelcast实例。 JVM只有一个节点

  2. 那些Hazelcast实例加入了一个群集,只有一个群集。

  3. 有一件事我不明白,如果我在一个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将尝试创建新实例,即使它是相同的过程

2 个答案:

答案 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   将尝试创建新实例,即使它是相同的过程