【问题标题】:Hibernate Search starts with Wildfly 9 but not Wildfly 10Hibernate Search 从 Wildfly 9 开始,但不是 Wildfly 10
【发布时间】:2016-06-20 08:51:28
【问题描述】:

这是一个带有 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.access$300(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$1.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>

有人知道发生了什么吗?

【问题讨论】:

  • 您是如何解决这个问题的?

标签: spring exception hibernate-search wildfly-10


【解决方案1】:

Hibernate ORMHibernate Search 从版本 8 开始都包含在 WildFly 中。

WildFly 10 与 WildFly 9 相比的一个显着区别是,如果检测到 Hibernate Search 的使用,它会自动添加到您的类路径中。这将使您的 WAR 文件更小并使用最新的稳定版本,所以这是我推荐的方法(虽然我不是 Spring 用户 - 很想知道它是否会让 Spring 用户变得更难,请让我知道休眠论坛。)

如果两者都触发检测规则:

  1. 您正在使用 Hibernate 作为持久性提供程序实现
  2. 您的任何实体都标有@Indexed

所以我怀疑你最好的解决方案是确保你的部署中既不包括 Hibernate ORM 也不包括 Hibernate Search 以避免冲突。

如果您更喜欢使用自己的框架版本,您可以设置以下属性以不注入这些依赖项(以便使用捆绑在应用程序中的库),或者您也可以选择打包自定义版本这些在 WildFly 模块中并使用替代版本(您可以使用具有不同“插槽”标识符的替代版本)。

wildfly.jpa.hibernate.search.module = none

此属性需要在您的persistence.xml 中定义。

另请参阅WildFly 10 JPA Reference Guide,了解有关此属性和类似属性的完整说明。

【讨论】:

  • 感谢您的回答,Sanne。我应该使用哪个 Maven 包来拥有 org.hibernate.search.annotations 而不是整个 ORM?另外我没有persistence.xml,因为一切都是通过 Spring bean 配置的,我尝试在那里添加属性,但没有运气。
  • 我尝试将 Hibernate-search 的范围限定为提供,尝试使用该属性创建一个 persistence.xml,尝试了各种 Maven 配置……与它斗争了整整一个小时,仍然没有运气。异常不断出现。
  • org.hibernate.search.annotations 是 Maven 工件 org.hibernate:hibernate-search-engine 的一部分(虽然不确定这有什么关系)。
  • WildFly 确实不知道程序化 persistence.xml 配置,但在这种情况下,我也不希望它注入 Hibernate Search。因此,您可能正在使用 WildFly 注入的 Hibernate ORM,而您使用自己提供的 jar 进行搜索。确保您捆绑的 Search 版本(不要排除它)是与 ORM 版本兼容的版本。 (WildFly 包括 ORM 5.0.x,因此您需要最新的 Search 5.5.x - BTW 需要 Apache Lucene 5.3.x 或 5.4.x 或 5.5.x)。如果这还不够,请随时分享一个示例项目供我在我们的论坛上调试!
  • 我面临同样的问题。当我可以在 Windfly 10 中为整个容器禁用休眠搜索时,是否有任何全局位置?
猜你喜欢
  • 2018-06-04
  • 2016-05-31
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 2018-05-25
  • 2018-06-08
  • 2016-04-22
  • 1970-01-01
相关资源
最近更新 更多