настройка ehCache: кэш равен нулю - PullRequest
2 голосов
/ 12 октября 2011

Я новичок в использовании любого инструмента кэширования, я пытался использовать ehcache ... создал свой ehcache.xml в classpath, который содержит запись <cache name="xyz" .../>.

Но когда я пытаюсь получить доступ к своему кешу "xyz" из метода init одного моего сервлета, я получаю null:

cacheManger.getCache("xyz") // <= is "null"

хотя

cacheManager.getCacheNames() 

дает мне [xyz]

Я использую следующий код:

EhCacheManager.create();
ehcManager = EhCacheManager.getInstance();

System.out.println("getCacheNames::---" +  Arrays.toString(ehcManager.getCacheNames())); //here I get "xyz"

cache = ehcManager.getCache("xyz"); // here cache is null
cache.getCacheEventNotificationService().registerListener(new EhCacheFlushEventListener());

Есть идеи ... Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 26 сентября 2012

Убедитесь, что ваш ehcache.xml находится в вашем classpath (корневой элемент, а не в подпакете) если вы используете структуру проекта maven, поместите ее в / src / main / resources dir.

Что код, который работает для меня:

CacheManager cm = CacheManager.getInstance();
if (cm != null)
{
  Set<String> cacheNames = new HashSet<String>(Arrays.asList(cm.getCacheNames()));
  LOG.debug("cacheNames: " + cacheNames);
  for(String cName: cacheNames)
  {
    LOG.debug("Cache: "+cm.getEhcache(cName));
  }
}

ПРИМЕЧАНИЕ: я использую метод "getEhcache" вместо "getCache"

Также проверьте вашу конфигурацию ehcache.xml, возможно, вам не хватает элемента defaultCache, вот пример:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache maxBytesLocalHeap="1024m">
 <sizeOfPolicy maxDepth="2000" />
 <defaultCache eternal="false" timeToLiveSeconds="600"/>
 <cache name="myCacheablePOJO" eternal="true" statistics="true">
  <searchable>
   <searchAttribute name="field1" />
   <searchAttribute name="field2" />
   <searchAttribute name="field3" />
  </searchable>
 </cache>
</ehcache>
1 голос
/ 13 октября 2011

EhCache имеет CacheManager , который можно использовать для получения кэша:

CacheManager manager = new CacheManager( "src/config/ehcache.xml" );
Cache cache = manager.getCache( "xyz" );
Element element = cache.get( "key1" );

Вот больше примеров от ehcache.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...