Infinispan缓存的初始化失败

时间:2016-09-22 22:55:27

标签: java caching jboss jboss6.x infinispan

我使用JBoss 6.4 EAP和Infinispan 6.

  <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&#39;缓存实例,缓存实例为空。

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吗?

1 个答案:

答案 0 :(得分:1)

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