如何清除Infinispan缓存

时间:2014-06-02 15:51:11

标签: java hibernate caching jboss infinispan

在我的项目中,我们将infinispan与Hibernate 4结合使用作为二级缓存。这是来自persistence.xml的条目

<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>

我想要做的是在点击GUI上的按钮时清除缓存。 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

引起

缓存本身工作正常,我只是有明确访问它的问题。如果我调用new DefaulCacheManager(),我认为我将获得唯一的CacheManager,但是也不推荐使用此接口。

所以,如果我完全走错了路,那我怎么能删除我的缓存?

Infinispan 5.2.6

编辑: 此外,我尝试使用多次尝试注入CM,尤其是@Resource(lookup="java:jboss/infinispan/RuleEngineCache")注释。但是它没有注入,无论我是在快速入门示例中使用EmbeddedCacheManager还是已弃用的CacheManager。

1 个答案:

答案 0 :(得分:2)

如果要清除Hibernate的二级缓存,无论缓存提供程序如何,都应该直接调用Hibernate。致电SessionFactory.getCache().evictAllRegions应该这样做,而不必亲自动手使用Infinispan。