Hibernate Search 从 Wildfly 9 开始,但不是 Wildfly 10
Hibernate Search starts with Wildfly 9 but not Wildfly 10
这是一个带有 Hibernate Search 的 Maven 项目。 Servlet 在 Wildfly 9.
上完美运行
我一在 Wildfly 10 上启动它,当 Spring 自动装配 bean 时我就崩溃了:
ERROR [ContextLoader]:351 - Context initialization failed
nested exception is java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.search.hcore.impl.HibernateSearchIntegrator not a subtype
[...]
Caused by: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.search.hcore.impl.HibernateSearchIntegrator not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access0(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader.next(ServiceLoader.java:480)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:341)
at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:57)
at org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:247)
at org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:73)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1915)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
我尝试了不同版本的已声明库,但没有成功。
<spring.version>4.2.6.RELEASE</spring.version>
<spring.boot.version>1.3.5.RELEASE</spring.boot.version>
<lucene.version>4.10.4</lucene.version>
<hibernate-search-orm.version>5.3.0.Final</hibernate-search-orm.version>
<solr-core.version>4.10.4</solr-core.version>
有人知道发生了什么事吗?
Hibernate ORM 和 Hibernate Search 都包含在 WildFly 自第 8 版以来。
与 WildFly 9 相比,WildFly 10 的一个显着区别是,如果检测到 Hibernate Search 的使用,它会自动添加到您的类路径中。这将使您的 WAR 文件更小并使用最新的稳定版本,所以这是我推荐的方法(虽然我不是 Spring 用户 - 很想知道它是否使 [= =41=] 用户,请在 Hibernate 论坛上告诉我。)
如果满足以下条件,则会触发检测规则:
- 您正在使用 Hibernate 作为持久性提供程序实现
- 您的任何实体都带有
@Indexed
注释
所以我怀疑您最好的解决方案是确保您在部署中既不包括 Hibernate ORM 也不包括 Hibernate Search 以避免冲突。
如果您更喜欢使用您自己的框架版本,您可以设置以下 属性 以不注入这些依赖项(以便使用您在应用程序中捆绑的库),或者您可以还可以选择将这些自定义版本打包到 WildFly 模块中并使用替代版本(您可以使用具有不同 "slot" 标识符的替代版本)。
wildfly.jpa.hibernate.search.module = none
这个属性需要在你的persistence.xml
中定义。
另请参阅 WildFly 10 JPA Reference Guide 以获得此属性和类似属性的完整描述。
这是一个带有 Hibernate Search 的 Maven 项目。 Servlet 在 Wildfly 9.
上完美运行我一在 Wildfly 10 上启动它,当 Spring 自动装配 bean 时我就崩溃了:
ERROR [ContextLoader]:351 - Context initialization failed
nested exception is java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.search.hcore.impl.HibernateSearchIntegrator not a subtype
[...]
Caused by: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.search.hcore.impl.HibernateSearchIntegrator not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access0(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader.next(ServiceLoader.java:480)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:341)
at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:57)
at org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:247)
at org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:73)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1915)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
我尝试了不同版本的已声明库,但没有成功。
<spring.version>4.2.6.RELEASE</spring.version>
<spring.boot.version>1.3.5.RELEASE</spring.boot.version>
<lucene.version>4.10.4</lucene.version>
<hibernate-search-orm.version>5.3.0.Final</hibernate-search-orm.version>
<solr-core.version>4.10.4</solr-core.version>
有人知道发生了什么事吗?
Hibernate ORM 和 Hibernate Search 都包含在 WildFly 自第 8 版以来。
与 WildFly 9 相比,WildFly 10 的一个显着区别是,如果检测到 Hibernate Search 的使用,它会自动添加到您的类路径中。这将使您的 WAR 文件更小并使用最新的稳定版本,所以这是我推荐的方法(虽然我不是 Spring 用户 - 很想知道它是否使 [= =41=] 用户,请在 Hibernate 论坛上告诉我。)
如果满足以下条件,则会触发检测规则:
- 您正在使用 Hibernate 作为持久性提供程序实现
- 您的任何实体都带有
@Indexed
注释
所以我怀疑您最好的解决方案是确保您在部署中既不包括 Hibernate ORM 也不包括 Hibernate Search 以避免冲突。
如果您更喜欢使用您自己的框架版本,您可以设置以下 属性 以不注入这些依赖项(以便使用您在应用程序中捆绑的库),或者您可以还可以选择将这些自定义版本打包到 WildFly 模块中并使用替代版本(您可以使用具有不同 "slot" 标识符的替代版本)。
wildfly.jpa.hibernate.search.module = none
这个属性需要在你的persistence.xml
中定义。
另请参阅 WildFly 10 JPA Reference Guide 以获得此属性和类似属性的完整描述。