2013-12-19 12 views
1

我正在嘗試使用Infinispan DefaultCacheManager創建一個可以保存參數的應用程序。我的目標是兩個進程將能夠看到彼此的緩存參數。Infinispan DefaultCacheManager不帶xml

我能夠通過使用​​3210文件來做到這一點,但是我找不到沒有xml文件的方法。

當我從DefaultCacheManager構造函數中刪除xml文件時,緩存的參數僅適用於正在運行的進程,而不適用於它們之間的運行進程。

是否有可能沒有XML文件呢?

回答

1

我不確定你在做什麼錯,但是是的,這絕對有可能。 這應該工作:

public static void main(String[] args) { 
    Cache cacheA = startSomeNode("A").getCache("someCache"); 
    Cache cacheB = startSomeNode("B").getCache("someCache"); 
    cacheA.put("key", "Hello World!"); 
    Object val = cacheB.get("key"); 
    System.out.println("Retrieved value is: " +val); 
} 

static DefaultCacheManager startSomeNode(String nodeName) { 
    GlobalConfiguration glb = new GlobalConfigurationBuilder() 
     .transport() 
     .nodeName(nodeName) 
     .defaultTransport() 
     .globalJmxStatistics() 
     .jmxDomain(nodeName) 
     .build(); 
    ConfigurationBuilder builder = new ConfigurationBuilder(); 
    builder 
     .clustering() 
     .cacheMode(CacheMode.REPL_SYNC); 
    Configuration cacheConfiguration = builder.build(); 
    return new DefaultCacheManager(glb, cacheConfiguration); 
} 

確保將其綁定到環回接口,以便在同一臺機器上運行,或者在相同的工藝上面的例子中,當你的兩個進程實際上可以達到互相連:

-Djgroups.bind_addr=127.0.0.1 

如果你在Linux上運行,請確保您還可以避免IPv6的,因爲它是否則該平臺上的默認:

-Djava.net.preferIPv4Stack=true 

的Infinispan JGroups也支持IPv6,但遺憾的是,人們沒有在其主機上正確配置IPv6,這似乎很常見,所以我建議從簡單的IPv4設置開始。

請注意,我過分簡化了代碼;當你與打做你可能會想,以確保

  • 你不要在同一個JVM啓動兩個實例的CacheManager
  • 你要確保你停止CacheManager的情況下
+0

謝謝你真是太棒了!它有幫助。 – user3119626