Декларативная настройка контейнера кеша - возможно ли это?

Я использую Wildfly 10.1.0 + Infinispan 8.2.4.Final + cache API 1.0.0, пытаясь включить перехватчики Infinispan Jcache в моем приложении с минимальными усилиями, без программной настройки, если это возможно. Я хотел, чтобы такая аннотация работала для хранения некоторых словарей:

@CacheResult(cacheName = "dictionary", cacheKeyGenerator = MyCacheKeyGeneratorImpl.class)  
public List getDictionary() {  
   ...  
}  

Я изначально начал эту деятельность, потому что я скучал по весне @Cacheable аннотации (в настоящее время мы не используем Spring config/CDI, только несколько библиотек, таких как Spring Data JPA Repositories). Поэтому я скачал модуль Infinispan Wilfly/EAP, распаковал его в папку модулей Wilfly и добавил его в jboss-deploy-structure.xml:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
  <dependencies>
  <module name="org.infinispan" slot="ispn-8.2" services="export"/>
  <module name="org.infinispan.cdi" slot="ispn-8.2" services="export"/>
  <module name="org.infinispan.jcache" slot="ispn-8.2" services="export"/>
  </dependencies>
  </deployment>
</jboss-deployment-structure>

Теперь аннотации обрабатываются, и для создания "словарного" кэша используется некоторый контейнер кеша по умолчанию. Теперь я хочу настроить этот контейнер кеша. Какой обычный способ ввести бесконечную конфигурацию? Можно ли вставить параметры модуля в основной файл конфигурации Wilfly (standalone.xml), чтобы определить этот контейнер кэша, или указать их в отдельном файле?

<cache-container name="JCacheContainer" default-cache="default" module="org.infinispan.jcache">
  <local-cache name="default">
   <transaction mode="NONE"/>
   <eviction strategy="LRU" max-entries="1000"/>
   <expiration max-idle="3600000"/>
  </local-cache>
  <local-cache name="dictionary">
   <locking acquire-timeout="15000" isolation="REPEATABLE_READ"/>
   <transaction locking="PESSIMISTIC" mode="NONE"/>
   <eviction strategy="LRU" max-entries="100000"/>
   <expiration lifespan="15000" max-idle="15000"/>
  </local-cache>
</cache-container>

Любая помощь очень ценится.

1 ответ

Решение

Рабочий пример такой конфигурации можно найти в тестах интеграции Infinispan. Единственное отличие состоит в том, что Infinispan развертывается внутри файла WAR, а не помещается в модули.

Все, что вам нужно сделать, это положить infinispan.xml внутри каталога WEB-INF и используйте правильно beans.xml,

Другой пример использования модулей и CDI может быть найден в JBoss Data Grid Quickstarts. Единственный пропущенный бит из примера - JCache.

Наконец, вас может заинтересовать параграф документации JCache из Руководства пользователя Infinispan.

Другие вопросы по тегам