使用Infinispan和Wildfly配置Hibernate搜索

Dav*_*rbo 8 java hibernate hibernate-search infinispan wildfly

我正在配置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" />
Run Code Online (Sandbox Code Playgroud)

这是因为似乎使用了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>
Run Code Online (Sandbox Code Playgroud)

在jboss-deployment-structure.xml中:

<module name="org.infinispan" slot="ispn-8.2"/>
<module name="org.hibernate.search.orm" services="export" />
Run Code Online (Sandbox Code Playgroud)

当我尝试索引所有我收到此错误:

UNHANDLED_EXCEPTION: java.lang.IllegalArgumentException: java.lang.Object is not an indexed entity or a subclass of an indexed entity
Run Code Online (Sandbox Code Playgroud)

但如果我删除此行:

<property name="wildfly.jpa.hibernate.search.module" value="none" />
Run Code Online (Sandbox Code Playgroud)

我有

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
Run Code Online (Sandbox Code Playgroud)

问题似乎与此处描述的相同:

https://developer.jboss.org/thread/271789

但我找不到任何有效的解决方案,而且我确信我的classpath中没有一个或多个Infinispan或Hibernate版本.

怎么了?:(

Tai*_*air 2

太长了;您的类路径中有 2 个 Infinispan 版本:一个在您的版本中jboss-deployment-structure.xml,另一个org.jboss.as.clustering随子系统一起提供。

自定义 Hibernate 搜索

<property name="wildfly.jpa.hibernate.search.module" value="none" />只是意味着不要自动为我的应用程序使用并导出应用程序服务器“搜索”模块

因此,<module name="org.hibernate.search.orm" services="export" />这是多余的,只要您输入正确的模块 ID,wildfly.jpa.hibernate.search.module而不是none删除该属性以使用默认搜索模块,它就会自动完成。

none当您不想使用默认或自定义搜索模块但将其捆绑在应用程序中时,可以使用该选项。

更多详细信息WildFly 10 文档 - 使用 Hibernate 搜索

定制 WildFly Infinispan 子系统

<module name="org.infinispan" slot="ispn-8.2"/>不升级 WildFly Infinispan 子系统。它只允许您的应用程序直接使用 Infinispan 作为库。正确的方法是以下之一:

  • 简单:升级到 Wildfly 10.1(默认附带 Infinispan 8.2 和 Hibernate Search 5.5)
  • 硬:升级或修改org.jboss.as.clustering.infinispan模块以使用自定义 Infinispan 版本
  • 荒谬:转储 WildFly 提供的缓存基础设施并使用您自己的应用程序中的捆绑和配置