我们希望运行我们的EAR,它使用hibernate搜索,在HA群集中使用wildfly 10.1和jgroups,使用infinispan作为hibernate和hibernate搜索的缓存。当我们使用:
时,基于standalone-full-ha.xml(下面的其他详细信息)的基本群集配置正在运行<property name="hibernate.search.default.directory_provider" value="ram"/>
用于Hibernate Search的目录提供程序。但是当我们将其改为:
<property name="hibernate.search.default.directory_provider" value="infinispan"/>
我们收到错误:
01:48:21,857 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 80) MSC000001: Failed to start service jboss.persistenceunit."mc.ear/web.war#mc": org.jboss.msc.service.StartException in service jboss.persistenceunit."mc.ear/web.war#mc": javax.persistence.PersistenceException: [PersistenceUnit: mc] Unable to build Hibernate SessionFactory
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:179)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:121)
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:193)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: mc] Unable to build Hibernate SessionFactory
/* SNIP */
Caused by: org.hibernate.search.exception.SearchException: Unable to find directory provider implementation class: org.infinispan.hibernate.search.spi.InfinispanDirectoryProvider
我知道infinispan目录提供程序不再与WildFly一起发布(目前使用10.1.0-Final),但我无法弄清楚如何将其添加为模块并在我的jboss-deployment-structure.xml中引用它。看起来应该不那么难。
我在这里尝试禁用版本检测,但我不认为这是问题所在:https://developer.jboss.org/thread/267716
事实上,我在WildFly 10.0上尝试了一段时间,但也遇到了同样的问题:https://developer.jboss.org/thread/271789
我想我不知道如何将infinispan目录提供程序包含为自定义模块 - 我是否需要完全替换infinispan?这不会对WildFly中的其他缓存产生影响吗?我想尽量减少标准的变化,但我确实遇到了麻烦。有没有人成功地将InfinispanDirectoryProvider与Wildfly 10.1集成在一起,可以在这里提供一个简短的描述?其他详细信息如下:
我的persistence.xml
<persistence
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="mc">
<jta-data-source>java:/mcDS</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.id.new_generator_mappings" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="jboss.entity.manager.jndi.name" value="java:jboss/EntityManagers/mc"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/EntityManagerFactories/mc"/>
<property name="wildfly.jpa.hibernate.search.module" value="none" />
</properties>
</persistence-unit>
</persistence>
我一直在standalone.xml中配置其他相关设置:
<system-properties>
<property name="hibernate.search.default.worker.backend" value="jgroups"/>
<property name="hibernate.search.default.directory_provider" value="infinispan"/>
<property name="hibernate.search.default.exclusive_index_use" value="false"/>
<property name="hibernate.search.infinispan.chunk_size" value="300000000"/>
<property name="hibernate.search.reader.strategy" value="shared"/>
<property name="hibernate.search.lucene_version" value="LUCENE_CURRENT"/>
<property name="hibernate.search.worker.execution" value="async"/>
<property name="hibernate.search.infinispan.cachemanager_jndiname" value="java:jboss/infinispan/container/hibernateSearch"/>
</system-properties>
答案 0 :(得分:3)
简短的回答是:
详细说明:
要在WildFly中使用Infinispan Lucene目录,您需要为WildFly下载其自定义模块的Infinispan发行版;你可以在Infinispan downloads page上找到它们,它是名为“WildFly / EAP Modules”的邮政编码。
在WildFly / modules 目录中解压缩此zip文件。看看这会增加什么可能会有所帮助:你会发现它包含一个名为“org.infinispan.hibernate-search.directory-provider”的模块,并且有一个插槽“for-hibernatesearch-5.5”。
它还将包含Infinispan的新副本,但由于它使用与WildFly中包含的模块不同的“插槽”模块,因此您不会覆盖它。现有的应用程序和WidlFly自己对Infinispan的使用仍然可以使用现有的模块,因为类加载器隔离实际上是有效的。
在WildFly中,Hibernate Search模块“org.hibernate.search.engine”对你刚添加的这个模块有一个可选的依赖,所以如果你使用WildFly中包含的Hibernate Search版本,你就完成了!
您的配置不使用Wildfly模块;删除行“wildfly.jpa.hibernate.search.module”并从部署中删除Hibernate Search jars(如果有的话)。
请记住,您无法使用WildFly的“standalone.xml”配置此Infinispan实例的缓存:您正在添加 Infinispan的其他不同模块。例如,如果您愿意,这可能是Infinispan的最新版本,而不是Wildfly附带的版本。因此,请确保这些JNDI名称不引用与WildFly捆绑在一起的Infinispan实例。最简单的解决方案可能是不使用JNDI配置策略,而是简单地在应用程序部署中包含Infinispan配置文件,并让Hibernate Search引用该资源来启动新的数据网格。
由于没有人喜欢手动下载和解压缩档案,您可以从坐标下载Maven的模块zip文件:
<groupId>org.infinispan</groupId>
<artifactId>infinispan-as-embedded-modules</artifactId>
<version>${infinispan.version}</version>
<type>zip</type>
例如,在这里您可以找到Infinispan testsuite如何自动运行此模块本身的集成测试: https://github.com/infinispan/infinispan/blob/8.2.5.Final/integrationtests/as-lucene-directory/pom.xml#L157-L204