我正在配置Hibernate Search 5.5.5以在Wildfly 10上使用Infinispan 8.2.2。 我在Wildfly中只配置了Infinispan模块,而不是Hibernate Search模块。
在persistence.xml中我放置了这个配置:
<property name="hibernate.search.infinispan.cachemanager_jndiname" value="java:jboss/infinispan/container/hibernateSearch" />
<property name="wildfly.jpa.hibernate.search.module" value="none" />
这是因为似乎使用了Infinispan,但不会保留索引。
所有缓存都在domain.xml中配置如下:
<cache-container name="hibernateSearch" default-cache="LuceneIndexesData" jndi-name="java:jboss/infinispan/hibernateSearch" statistics-enabled="false">
<replicated-cache name="LuceneIndexesMetadata" mode="ASYNC">
<file-store fetch-state="false" passivation="false" preload="false" purge="false" shared="false" singleton="false"/>
</replicated-cache>
<replicated-cache name="LuceneIndexesLocking" mode="SYNC">
<file-store fetch-state="false" passivation="false" preload="false" purge="false" shared="false" singleton="false"/>
</replicated-cache>
<replicated-cache name="LuceneIndexesData" mode="ASYNC">
<file-store fetch-state="false" passivation="false" preload="false" purge="false" shared="false" singleton="false"/>
</replicated-cache>
</cache-container>
在jboss-deployment-structure.xml中:
<module name="org.infinispan" slot="ispn-8.2"/>
<module name="org.hibernate.search.orm" services="export" />
当我尝试索引所有内容时,我收到此错误:
UNHANDLED_EXCEPTION: java.lang.IllegalArgumentException: java.lang.Object is not an indexed entity or a subclass of an indexed entity
但如果我删除这一行:
<property name="wildfly.jpa.hibernate.search.module" value="none" />
我得到了
org.hibernate.search.exception.SearchException: Wrong configuration of directory provider: class org.infinispan.hibernate.search.spi.InfinispanDirectoryProvider does not implement interface org.hibernate.search.store.DirectoryProvider
问题似乎与此处描述的相同:
https://developer.jboss.org/thread/271789
但我找不到任何可行的解决方案,而且我确信我的类路径中没有一个或多个Infinispan或Hibernate版本。
有什么问题? :(
答案 0 :(得分:2)
TLDR;您的类路径中有2个Infinispan版本:一个位于
jboss-deployment-structure.xml
,一个位于org.jboss.as.clustering
子系统。
<property name="wildfly.jpa.hibernate.search.module" value="none" />
只是意味着不会自动使用和导出应用服务器&#34;搜索&#34;我的应用程序的模块。
因此,<module name="org.hibernate.search.orm" services="export" />
是多余的,只要您为wildfly.jpa.hibernate.search.module
而不是none
输入正确的模块ID,它就会自动完成,或者只是删除属性以使用默认搜索模块。
当您不想使用默认或自定义搜索模块但将其捆绑到您的应用中时,none
选项适用于这种情况。
更多详情WildFly 10 Docs - Using Hibernate Search
<module name="org.infinispan" slot="ispn-8.2"/>
无法升级WildFly Infinispan子系统。它只允许您的应用程序直接使用Infinispan作为库。正确的方法之一是:
org.jboss.as.clustering.infinispan
模块以使用自定义Infinispan版本