java - 如何清除 Infinispan 缓存

标签 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();

我将此代码添加到我的网络项目中。

但我在第一行遇到异常,说无法在模块“deployment.RuleEngineWS-ear.ear.RuleEditor-1.2.0-SNAPSHOT.war:main”中定义类 org.infinispan.io.ExposeByteArrayOutputStream来自服务模块加载器:java.lang.LinkageError:无法链接 org/infinispan/io/ExposedByteArrayOutputStream(来自服务模块加载器的模块“deployment.RuleEngineWS-ear.ear.RuleEditor-1.2.0-SNAPSHOT.war:main”)
java.lang.NoClassDefFoundError: org/jboss/marshalling/ByteOutput
引起 由 java.lang.ClassNotFoundException: org.jboss.marshalling.ByteOutput

引起

缓存本身工作正常,只是在显式访问它时遇到问题。我认为如果我调用 new DefaulCacheManager() ,我将获得唯一的 CacheManager ,但随后也不推荐使用此接口(interface)。

那么如果我完全走错了路,我该如何删除我的缓存呢?

Infinispan 5.2.6

编辑: 我还尝试通过多次尝试注入(inject) CM,尤其是 @Resource(lookup="java:jboss/infinispan/RuleEngineCache") 注释。但无论我使用快速入门示例中的 EmbeddedCacheManager 还是已弃用的 CacheManager,它都不会被注入(inject)。

最佳答案

如果你想清除Hibernate的二级缓存,不管缓存提供者是什么,你应该直接调用Hibernate。调用 SessionFactory.getCache().evictAllRegions 应该可以做到这一点,而不必亲自使用 Infinispan。

关于java - 如何清除 Infinispan 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998507/

相关文章:

hibernate - 如何在 Hibernate 中存储日期集合

java - JPA 和业务逻辑 - 在两个地方重用相同的条件

php - 如何在 Memcache 或 Redis 中通过标签清除缓存?

javascript - 如何在 firefox 中找到特定的缓存条目并将它们转换为 File 或 Blob 对象?

css - 从 .sass-cache 中的 scssc 文件生成 CSS

java - 使用 JDBC 以外的其他方式跨防火墙

java - 我可以更改以及如何更改 Hibernate Envers 中的 REVTYPE 值吗?

java - Android Phonegap 2.1 > 2.2 升级错误

java - ClassNotFoundException : con. mysql.jdbc.Driver

java - 如何根据 JCheckBox 的状态启用/禁用我的 JTextField?