Infinispan的缓存初始化失败

问题描述:

我使用JBoss EAP 6.4 Infinispan的和6Infinispan的缓存初始化失败

<dependency> 
    <groupId>org.infinispan</groupId> 
    <artifactId>infinispan-core</artifactId> 
    <version>6.0.2.G1.Final</version> 
    </dependency> 

我有一个初始化Infinispan的缓存管理代码。

public class CacheManager { 
    ... 

    private synchronized DefaultCacheManager getManager() { 
     if (this.manager != null) { 
      return this.manager; 
     } 

     if (externalConfigFile != null) { 
      FileInputStream configurationStream = null; 
      try { 
       configurationStream = new FileInputStream(externalConfigFile); 
       ConfigurationBuilderHolder holder = new ParserRegistry().parse(configurationStream); 
       initJmx(holder.getGlobalConfigurationBuilder()); 
       manager = new DefaultCacheManager(holder, true); 
      } catch (IOException e) { 
       String msg = "Error creating Infinispan cache manager from file " + externalConfigFile; 
       throw new SomeException(msg, e); 
      } finally { 
       if (configurationStream != null) { 
        try { 
         configurationStream.close(); 
        } catch (IOException e) { 
         throw new CacheInitException(e); 
        } 
       } 
      } 
     } else { 
      GlobalConfigurationBuilder globalConfigurationBuilder = new GlobalConfigurationBuilder(); 
      initJmx(globalConfigurationBuilder); 
      manager = new DefaultCacheManager(globalConfigurationBuilder.build()); 
     } 

     started = true; 
     return manager; 
    } 

    private void initJmx(GlobalConfigurationBuilder globalConfigurationBuilder) { 
     globalConfigurationBuilder.globalJmxStatistics().cacheManagerName("aaaa"); 
     globalConfigurationBuilder.globalJmxStatistics().allowDuplicateDomains(true); 
    } 

    ... 
} 

这工作没有任何问题,当我不XML文件的形式提供额外的配置。 但是当我提供以下附加配置

<infinispan> 
    <namedCache name="my_cache" > 
     <eviction strategy="LIRS" maxEntries="65535" /> 
     <clustering mode="dist"> 
      <async /> 
     </clustering> 
    </namedCache> 
</infinispan> 

,当我的应用程序试图获得“my_cache”缓存实例,缓存实例为null。

package org.infinispan.manager; 

public class DefaultCacheManager implements EmbeddedCacheManager, CacheManager { 
    ... 

    @Override 
    public <K, V> Cache<K, V> getCache(String cacheName) { 
     assertIsNotTerminated(); 
     if (cacheName == null) 
     throw new NullPointerException("Null arguments not allowed"); 

     CacheWrapper cw = caches.get(cacheName); 
     if (cw != null) { 
     return cw.getCache(); 
     } 

     return createCache(cacheName); 
    } 

    ... 
} 

在这种情况下方法cw.getCache()返回NULL(高速缓存的名称可用到高速缓存和配置的列表也可以)。

我需要分布式的my_cache缓存实例,我可以定义成XML文件。

有人可以解释为什么Infinispan在这种情况下返回null吗?

您是否尝试过使用DefaultCacheManagher#defineConfiguration(cacheName, configuration)?它应该完全符合你的需求(但可能你需要将你的XML迁移到ConfigurationBuilder和朋友)。