使用 Infinispan 和 Wildfly 配置 Hibernate Search
Posted
技术标签:
【中文标题】使用 Infinispan 和 Wildfly 配置 Hibernate Search【英文标题】:Configuring Hibernate Search with Infinispan and Wildfly 【发布时间】:2018-06-04 23:50:30 【问题描述】:我正在将 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 版本。
怎么了? :(
【问题讨论】:
【参考方案1】:TLDR;您的类路径中有 2 个 Infinispan 版本:一个在您的
jboss-deployment-structure.xml
中,一个在org.jboss.as.clustering
子系统中。
自定义休眠搜索
<property name="wildfly.jpa.hibernate.search.module" value="none" />
只是表示不要自动使用并导出应用服务器“搜索”模块为我的应用程序。
因此,<module name="org.hibernate.search.orm" services="export" />
是多余的,只要您为 wildfly.jpa.hibernate.search.module
而不是 none
输入正确的模块 ID 或删除属性以使用默认搜索模块,它就会自动完成。
none
选项适用于以下情况:您不想使用默认或自定义搜索模块,而是将其捆绑在您的应用中。
更多详情WildFly 10 Docs - Using Hibernate Search
自定义 WildFly Infinispan 子系统
<module name="org.infinispan" slot="ispn-8.2"/>
不会升级 WildFly Infinispan 子系统。它只允许您的应用程序直接使用 Infinispan 作为库。正确的方法是:
org.jboss.as.clustering.infinispan
模块以使用自定义 Infinispan 版本
荒谬:转储 WildFly 提供的缓存基础架构,并在应用程序中使用您自己的捆绑和配置
【讨论】:
以上是关于使用 Infinispan 和 Wildfly 配置 Hibernate Search的主要内容,如果未能解决你的问题,请参考以下文章
Spring 和 WildFly Infinispan 缓存查找
未使用 Wildfly 15+ 使用 invalidation-cache 和 jdbc-store 自动创建 Infinispan 缓存表
Infinispan/JDBC 作为 Wildfly/JBoss 上 Hibernate Search 的后端
J2EE之wildfly 实践9 -- 使用infinispan 过期缓存