2016-09-22 3 views
0

Я использую JBoss 6.4 EAP и Infinispan 6.Инициализация кэш Infinispan не удается

<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», экземпляр кэша является недействительным.

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() возвращает нуль (имя кэша доступно в список кэшей и конфигурации также доступен).

Мне нужен дистрибутив my_cache экземпляр кеша, который я могу определить в файле XML.

Может ли кто-нибудь объяснить, почему Infinispan возвращает null в этом случае?

ответ

1

Вы пытались использовать DefaultCacheManagher#defineConfiguration(cacheName, configuration)? Он должен делать именно то, что вам нужно (но, вероятно, вам нужно будет перенести ваш XML на ConfigurationBuilder и друзей).

Смежные вопросы