为什么Infinispan的白名单中包含的类仍会引发错误“未注册编组”?

问题描述 投票:0回答:1

我正在使用Infinispan 10和Wildfly17。我有一个infinispan.xml文件,其中包含我在其中指定编组器的类的白名单:

<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns="urn:infinispan:config:10.0">
    <cache-container>
        <serialization marshaller="org.infinispan.commons.marshall.JavaSerializationMarshaller">
            <white-list>
              <class>org.jsr107.ri.annotations.DefaultGeneratedCacheKey</class>              
              <regex>java.sql.*</regex>  
              <regex>java.util.*</regex>
            </white-list>            
        </serialization>
    </cache-container>
</infinispan>

[我遵循this documentation,第9.1.2章Java序列化编组器

但是对于特定的类org.jsr107.ri.annotations.DefaultGeneratedCacheKey似乎不起作用。错误消息是:

Cannot marshall 'class org.jsr107.ri.annotations.DefaultGeneratedCacheKey': java.lang.IllegalArgumentException: No marshaller registered for Java type org.jsr107.ri.annotations.DefaultGeneratedCacheKey

如何将此类添加到Infinispan的白名单中?

更多信息:

我在启动时加载CacheManager,如下所示:

ClassLoader classLoader = CacheSetup.class.getClassLoader()
URI uri = URI.create("infinispan.xml");
final CacheManager jCacheManager = Caching.getCachingProvider().getCacheManager(uri, classLoader);

我的pom.xml中的Infinispan依赖项:

    <dependency>
        <groupId>org.jsr107.ri</groupId>
        <artifactId>cache-annotations-ri-cdi</artifactId>
        <version>1.1.1</version>
    </dependency>

<dependency>
    <groupId>org.infinispan</groupId>
    <artifactId>infinispan-jcache</artifactId>
    <version>10.0.1.Final</version>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.infinispan</groupId>
    <artifactId>infinispan-cdi-embedded</artifactId>
    <version>10.0.1.Final</version>
    <scope>runtime</scope>
</dependency>

在standalone.xml中,这是我发现的与Infinspan相关的全部。

<subsystem xmlns="urn:jboss:domain:distributable-web:1.0" default-session-management="default" default-single-sign-on-management="default">
    <infinispan-session-management name="default" granularity="SESSION" cache-container="web">
        <primary-owner-affinity/>
    </infinispan-session-management>
    <infinispan-single-sign-on-management name="default" cache-container="web" cache="sso"/>
    <infinispan-routing cache-container="web" cache="routing"/>
</subsystem>

    <caches>
        <cache name="simple"/>
        <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>
    </caches>

    <passivation-stores>
        <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>
    </passivation-stores>

<subsystem xmlns="urn:jboss:domain:infinispan:8.0">
    <cache-container name="web" default-cache="passivation" module="org.wildfly.clustering.web.infinispan">
        <local-cache name="passivation">
            <locking isolation="REPEATABLE_READ"/>
            <transaction mode="BATCH"/>
            <file-store passivation="true" purge="false"/>
        </local-cache>
        <local-cache name="sso">
            <locking isolation="REPEATABLE_READ"/>
            <transaction mode="BATCH"/>
        </local-cache>
        <local-cache name="routing"/>
    </cache-container>
    <cache-container name="server" default-cache="default" module="org.wildfly.clustering.server">
        <local-cache name="default">
            <transaction mode="BATCH"/>
        </local-cache>
    </cache-container>
    <cache-container name="ejb" aliases="sfsb" default-cache="passivation" module="org.wildfly.clustering.ejb.infinispan">
        <local-cache name="passivation">
            <locking isolation="REPEATABLE_READ"/>
            <transaction mode="BATCH"/>
            <file-store passivation="true" purge="false"/>
        </local-cache>
    </cache-container>
    <cache-container name="hibernate" module="org.infinispan.hibernate-cache">
        <local-cache name="entity">
            <object-memory size="10000"/>
            <expiration max-idle="100000"/>
        </local-cache>
        <local-cache name="local-query">
            <object-memory size="10000"/>
            <expiration max-idle="100000"/>
        </local-cache>
        <local-cache name="timestamps"/>
    </cache-container>
</subsystem>
wildfly marshalling infinispan jcache jsr107
1个回答
0
投票

我的应用程序中的错误是由通过以下注释读取缓存引起的:

@Interceptors(org.jsr107.ri.annotations.cdi.CacheResultInterceptor.class)
@CacheResult(cacheName = "measurementCount")

读取我的应用程序中的其他缓存时,没有这些注释,并且可以使用:

Caching.getCachingProvider().getCacheManager(...).getCache().containsKey(...)
© www.soinside.com 2019 - 2024. All rights reserved.