2014-06-02 4 views
0

В моем проекте, мы используем infinispan в качестве кэш-памяти 2-го уровня в сочетании с Hibernate 4. Это запись из persistence.xmlКак очистить кэш Infinispan

<jta-data-source>java:jboss/datasources/RuleEngine</jta-data-source>   
    <shared-cache-mode>ALL</shared-cache-mode> 
    <properties> 
    <property name="hibernate.show_sql" value="false" /> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.DB2390Dialect"/> 
    <property name="hibernate.cache.use_second_level_cache" value="true" /> 
    <property name="hibernate.cache.use_query_cache" value="true"/> 
    <property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/RuleEngineCache"/> 
    <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.JndiInfinispanRegionFactory"/> 
    </properties> 

То, что я хотел сделать, - очистить кеш, нажав кнопку в графическом интерфейсе. Код java:

CacheManager cm = new DefaultCacheManager(); 
Cache<Object, Object> c = cm.getCache(); 
c.clear(); 

Я добавил этот код в свой веб-проект.

Но я получаю исключение на первой линии, говоря Failed to define class org.infinispan.io.ExposedByteArrayOutputStream in Module "deployment.RuleEngineWS-ear.ear.RuleEditor-1.2.0-SNAPSHOT.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link org/infinispan/io/ExposedByteArrayOutputStream (Module "deployment.RuleEngineWS-ear.ear.RuleEditor-1.2.0-SNAPSHOT.war:main" from Service Module Loader)
причиненный java.lang.NoClassDefFoundError: org/jboss/marshalling/ByteOutput
причиненном java.lang.ClassNotFoundException: org.jboss.marshalling.ByteOutput

Кэш сам работает нормально, я просто проблемы явно к нему доступ. Я думал, что я получу один и только CacheManager, если я вызову new DefaulCacheManager(), но затем также используя этот интерфейс устарел.

Итак, если я полностью ошибаюсь, как я могу удалить свой кеш?

Infinispan 5.2.6

EDIT: Также я попробовал инъекции СМ, ​​используя несколько попыток и особенно @Resource(lookup="java:jboss/infinispan/RuleEngineCache") аннотацию. Но он не вводится, я использую EmbeddedCacheManager, как в примере quickstart, так и в устаревшем CacheManager.

ответ

2

Если вы хотите очистить кеш второго уровня Hibernate, независимо от поставщика кэширования, вы должны вызвать непосредственно в Hibernate. Вызов SessionFactory.getCache().evictAllRegions должен сделать это, не заставляя руки паковаться с Infinispan.

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