Joa*_*has 4 java caching infinispan jcache
从 9.4.16.Final --> 10.0.1.Final 升级 infinispan-jcache 后,由于编组器错误,我无法使用缓存。
我希望它与 javax.cache.* 一起使用,v9.4.16.Final 就是这种情况。没有使用与 infinispan 相关的类。
在 v10.0.1.Final 中,我可以从缓存中放入和检索 UUID。但是在设置 CacheLoaderFactory 时失败。
进口
import javax.cache.Cache;
import javax.cache.Caching;
import javax.cache.configuration.MutableConfiguration;
import javax.cache.expiry.Duration;
import javax.cache.expiry.ModifiedExpiryPolicy;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheLoaderException;
Run Code Online (Sandbox Code Playgroud)
代码:
final var cachingProvider = Caching.getCachingProvider();
final var cacheManager = cachingProvider.getCacheManager();
final var config = new MutableConfiguration<String,UUID>();
config.setTypes( String.class, UUID.class );
config.setStoreByValue( false );
config.setExpiryPolicyFactory( ModifiedExpiryPolicy.factoryOf( Duration.FIVE_MINUTES ) );
config.setReadThrough( true );
config.setCacheLoaderFactory( () -> new CacheLoader<>() {
@Override
public UUID load(String key) throws CacheLoaderException {
return UUID.randomUUID();
}
@Override
public Map<String,UUID> loadAll(Iterable<? extends String> keys) throws CacheLoaderException {
return null;
}
} );
cache = cacheManager.createCache( UUIDCacheTest.class.getName(), config );
cache.get( "Dummy" ); // Throws exception
Run Code Online (Sandbox Code Playgroud)
例外是:
Caused by: org.infinispan.persistence.spi.PersistenceException: org.infinispan.commons.marshall.MarshallingException: No marshaller registered for Java type java.util.UUID
at org.infinispan.marshall.persistence.impl.MarshallableEntryImpl.marshall(MarshallableEntryImpl.java:211)
at org.infinispan.marshall.persistence.impl.MarshallableEntryImpl.<init>(MarshallableEntryImpl.java:37)
at org.infinispan.marshall.persistence.impl.MarshalledEntryFactoryImpl.create(MarshalledEntryFactoryImpl.java:64)
at org.infinispan.jcache.embedded.JCacheLoaderAdapter.loadEntry(JCacheLoaderAdapter.java:51)
at org.infinispan.persistence.manager.PersistenceManagerImpl.loadFromAllStoresSync(PersistenceManagerImpl.java:830)
at org.infinispan.persistence.manager.PersistenceManagerImpl.lambda$loadFromAllStores$19(PersistenceManagerImpl.java:848)
at org.infinispan.persistence.manager.PersistenceManagerImpl.lambda$supplyOnPersistenceExAndContinue$9(PersistenceManagerImpl.java:559)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1771)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: org.infinispan.commons.marshall.MarshallingException: No marshaller registered for Java type java.util.UUID
at org.infinispan.marshall.persistence.impl.PersistenceMarshallerImpl.objectToBuffer(PersistenceMarshallerImpl.java:164)
at org.infinispan.marshall.persistence.impl.PersistenceMarshallerImpl.objectToBuffer(PersistenceMarshallerImpl.java:132)
at org.infinispan.mars
Run Code Online (Sandbox Code Playgroud)
小智 8
Infinispan 10.0.x 对其编组代码进行了重大重构,默认编组器不再基于序列化。有关可用的各种编组选项的深入说明,请参阅我们的编组用户指南。
对于这个用例,由于 UUID 是一个不受您控制的类,基于序列化的编组可能是最简单的开始方式。有必要显式配置JavaSerializationMarshaller所需的类 (UUID) 并将其列入白名单。
要使用 JCache CachingProvider 执行此操作,必须首先为 CacheManager 创建以下 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>java.util.UUID</class>
</white-list>
</serialization>
</cache-container>
</infinispan>
Run Code Online (Sandbox Code Playgroud)
然后使用此 xml 来创建 CacheManager,如下所示:
CachingProvider cachingProvider = Caching.getCachingProvider();
ClassLoader classLoader = SimpleCacheTest.class.getClassLoader();
CacheManager cacheManager = cachingProvider.getCacheManager(classLoader.getResource("example.xml").toURI(), classLoader);
Run Code Online (Sandbox Code Playgroud)
CacheManager 创建的所有后续缓存都将配置为使用 JavaSerializationMarshaller。
| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |