为什么无法获取在wildfly配置中添加的缓存?

时间:2019-05-20 12:42:19

标签: java wildfly infinispan

我在集群中有2个独立的wildfly 13,并且在两个节点上都部署了EE应用。

我有一个可缓存的实体(来自hibernate的@Cache和来自jpa的@Cacheable),它也有一个使用缓存的命名查询。

我希望命名查询缓存在实体更新时失效。

当我运行该应用程序时,提供的名为“实体”的缓存正在按预期方式工作:当实体更新时,它确实使整个群集无效(根据jmx,它的类型为invalidation_sync)。

问题出在我的自定义缓存上:它不在部署时启动,而在启动时它是本地缓存。实体更新时不会发生无效。

我试图使用@Startup ejb查找我的自定义缓存,但没有运气(找不到缓存),或者令人惊讶的是,我在org.infinispan.Cache上收到了NoClassDefFoundError。

来自https://developer.jboss.org/thread/276133https://developer.jboss.org/thread/277425?start=15&tstart=0的建议没有帮助。

我在wildfly配置中添加的自定义缓存未启动:我无法在jmx中看到它,也无法使用Paul Ferraro here按照jndi名称模式建议的jndi查找来获取它。 / p>

以下是实体的相关部分:

@Entity
@Table(name = "parameter", schema = "public")
@NamedQueries({
        @NamedQuery(name = "findByValue", query = "select p from Parameter p where p.valeur = :valeur", hints = {
                @QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"),
                @QueryHint(name = org.hibernate.annotations.QueryHints.CACHE_REGION, value = "invalidation-query"),
                @QueryHint(name = QueryHints.CACHE_MODE, value = "NORMAL"),
                @QueryHint(name = QueryHints.COMMENT, value = "Parameter.findByValue")
        })
})
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "entity")

这是我的standalone-full-ha.xml的休眠缓存容器部分:

<cache-container name="hibernate" module="org.infinispan.hibernate-cache">
    <transport channel="omega-ee" lock-timeout="60000"/>
    <local-cache name="local-query">
        <object-memory size="10000"/>
        <expiration max-idle="100000"/>
    </local-cache>
    <invalidation-cache name="entity">
        <transaction mode="NON_XA"/>
        <object-memory size="10000"/>
        <expiration max-idle="100000"/>
    </invalidation-cache>
    <invalidation-cache name="invalidation-query">
        <transaction mode="NON_XA"/>
        <object-memory size="10000"/>
        <expiration max-idle="100000"/>
    </invalidation-cache>
    <replicated-cache name="RPL-getParamGenTest" statistics-enabled="true">
        <transaction mode="BATCH"/>
    </replicated-cache>
    <replicated-cache name="replicated-entity" statistics-enabled="true">
        <transaction mode="NONE"/>
    </replicated-cache>
</cache-container>

persistence.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
          http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">

    <persistence-unit name="myPersistenceUnit">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:jboss/datasources/jdbc/myDatasource</jta-data-source>

        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL9Dialect"/>
            <property name="hibernate.cache.use_second_level_cache" value="true"/>
            <property name="hibernate.cache.use_query_cache" value="true"/>

            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>

</persistence>

用于尝试jndi查找的代码如下:

@Resource(name = "infinispan/replicated-query")
private Cache<?, ?> cache;

我想念什么?

我正在使用Wildfly 13,休眠5.1.14和infinispan 9.2.4。

1 个答案:

答案 0 :(得分:0)

更新到Infinispan 9.4并尝试以下操作:

 <cache-container module="org.infinispan.extension:ispn-9.4" name="infinispan_container" default-cache="default">
   <transport/>
   <global-state/>
   <distributed-cache name="default"/>
   <distributed-cache name="memcachedCache"/>
   <distributed-cache name="namedCache"/>
 </cache-container>
</subsystem>
public class ExampleApplication {
    @Resource(lookup = "java:jboss/datagrid-infinispan/container/infinispan_container")
    CacheContainer container;

    @Resource(lookup = "java:jboss/datagrid-infinispan/container/infinispan_container/cache/namedCache")
    Cache cache;
}

请参阅:http://infinispan.org/docs/stable/user_guide/user_guide.html#accessing_containers_and_caches