Чтобы установить сцену - я запускаю веб-приложение на wildfly 10, которое запускается в автономном режиме. Конфигурация кеш-контейнера в автономном режиме. xml:
<cache-container name="web" default-cache="passivation" module="org.wildfly.clustering.web.infinispan">
<local-cache name="passivation">
<locking isolation="REPEATABLE_READ"/>
<transaction locking="OPTIMISTIC" mode="BATCH"/>
<file-store passivation="true" purge="false"/>
</local-cache>
<local-cache name="persistent">
<locking isolation="REPEATABLE_READ"/>
<transaction locking="OPTIMISTIC" mode="BATCH"/>
<file-store passivation="false" purge="false"/>
</local-cache>
</cache-container>
Вот мои изменения шаг за шагом:
- Зависимость от бесконечности
Я добавил
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
<version>9.2.4.Final</version>
<scope>provided</scope>
</dependency>
web. xml
Добавить ресурс (в моем случае я пытаюсь получить ресурс для веб-контейнера кэша)
<resource-ref>
<res-ref-name>infinispan/cacheContainer</res-ref-name>
<lookup-name>java:jboss/infinispan/container/web</lookup-name>
</resource-ref>
Я также добавил прослушиватель контекста сервлета, потому что хочу добавить прослушиватель кэша для contextInitialized
<listener>
<listener-class>some.package.ContextListenerCacheAddListener</listener-class>
</listener>
jboss-deploy-structure. xml
Я добавил это в мой каталог WEB-INF войны
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.infinispan" />
</dependencies>
</deployment>
</jboss-deployment-structure>
Оказывается, что если вы пропустите это - классы infinispan будут загружаться различными загрузчиками классов (насколько я понимаю)
Java код
Внедрение ресурса и использование его для добавления слушателей в кеши
public class ContextListenerCacheAddListener implements ServletContextListener {
@Resource(name = "infinispan/cacheContainer")
CacheContainer cacheContainer;
static Logger logger = Logger.getLogger(ContextListenerCacheAddListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
cacheContainer.getCache("myapp.war").addListener(new MyListener("myapp.war"));
cacheContainer.getCache("passivation").addListener(new MyListener("passivation"));
cacheContainer.getCache("persistent").addListener(new MyListener("persistent"));
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
@Listener
public static class MyListener{
private String name;
public MyListener(String name) {
this.name = name;
}
@CacheEntryCreated
public void onCreate(CacheEntryEvent event){
logger.warn(name +" created entry "+event.getKey() );
}
@CacheEntryModified
public void onModify(CacheEntryEvent event){
logger.warn(name +" modified entry "+event.getKey());
}
@CacheEntryVisited
public void onVisited(CacheEntryEvent event){
logger.warn(name +" visited entry "+event.getKey());
}
@TransactionRegistered
public void onTransactionRegistered(TransactionRegisteredEvent event){
logger.warn(name +" registered transaction entry ");
}
@TransactionCompleted
public void onTransactionCompleted(TransactionCompletedEvent event){
logger.warn(name +" completed transaction entry ");
}
}
}
Мои изменения предназначены только для тестирования и отладки, чтобы решить проблему, отличную от вашей.