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

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

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

Сначала я начал это занятие, потому что пропустил аннотации Spring @Cacheable (в настоящее время мы не используем конфигурацию Spring/CDI, а только несколько библиотек, таких как Spring Data JPA Repositories). Итак, я скачал модуль Infinispan Wilfly/EAP, распаковал его в папку модулей Wilfly и добавил это в jboss-deployment-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>

Теперь аннотации обрабатываются, и некоторый контейнер кеша по умолчанию используется для создания кеша «словарь». Теперь я хочу настроить этот контейнер кеша. Каков общий способ внедрения конфигурации infinispan? Можно ли подключить настройки модуля в основной конфигурационный файл 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>

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


person dfche    schedule 06.12.2017    source источник


Ответы (1)


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

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

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

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

person Sebastian Łaskawiec    schedule 07.12.2017
comment
Большое спасибо. Наконец-то я получил то, что хотел с Ehcache, но я оставлю вопрос для справки. - person dfche; 07.12.2017
comment
Извините, мы не смогли вам помочь. Если вы могли бы поделиться своим решением на основе Ehcache на Github или аналогичном, мы можем проверить его и посмотреть, как мы можем улучшить ситуацию в будущем. Как это звучит? - person Galder Zamarreño; 07.12.2017
comment
@GalderZamarreño спасибо за ответ, я сделаю общий пример использования ehcache и опубликую его для справки как можно скорее. - person dfche; 09.12.2017