尝试使用Wildfly infinispan中支持的现有工作Hibernate搜索实现从wildly 10升级到17,每当第二个节点尝试加入集群时(如果启动没有完全超时),我会得到如下堆栈:
org.infinispan.commons.marshall.NotSerializableException: org.infinispan.lucene.FileCacheKey
Suppressed: org.infinispan.util.logging.TraceException
at org.infinispan.interceptors.impl.SimpleAsyncInvocationStage.get(SimpleAsyncInvocationStage.java:41)
at org.infinispan.interceptors.impl.AsyncInterceptorChainImpl.invoke(AsyncInterceptorChainImpl.java:250)
at org.infinispan.cache.impl.CacheImpl.executeCommandWithInjectedTx(CacheImpl.java:1939)
at org.infinispan.cache.impl.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:1917)
at org.infinispan.cache.impl.CacheImpl.putIfAbsent(CacheImpl.java:1474)
仔细研究这个问题,FileCacheKey实际上是不可序列化的
1条答案
按热度按时间7gyucuyw1#
环顾网络,我的问题似乎是你不“应该”在你的应用程序中直接使用infinispan的包含版本。你应该包含一个完整的其他infinispan实现来直接使用。现在,这似乎很愚蠢,因为你正在重新安装相同的版本,所以它应该只与内部提供的版本一起工作。(请注意,如果您按照此处的说明进行操作,这样做将修复此问题。https://infinispan.org/docs/9.1.x/user_guide/user_guide.html#infinispan_modules_for_wildfly)
然而,在开始沿着这条路走下去,并对不得不在一个版本的wildfly中设置infinispan两次感到恼火后,我发现了这条评论,它给了我希望:https://developer.jboss.org/message/977137#977137
经过大量的挖掘,我找到了这个类,它是解决所有问题的关键。
因此,如果 LifecycleCallbacks 位于缓存管理器的类路径中,则它将注册所有外部化器(它序列化了不可序列化的类),在infinispan的支持下,lucene需要工作,并且一切都可以工作。但是,较新版本的wildfly,以及他们提供的hib搜索,并不包括这个文件。它存在于 infinispan-lucene-directory 中。因此,解决这个问题的方法是,是创建您自己的模块,其中包含提供者jar,并确保该高速缓存容器模块指向该模块。所需的关键部分包括:
standalone/domain.xml中的缓存容器
模块XML:
在创建了这个模块,将其添加到Wildfly并更新缓存容器之后,一切都应该正常工作了。最后,关键问题是infinispan内部被“剥离”成了Wildfly所需要的,而实际上,它缺少了