0

我来自沉重的 .NET/IIS 背景,虽然我过去曾使用过 Java,但我对大型 Java Web 应用程序还是很陌生,所以请多多包涵。由于我的背景有限,我将介绍我从一开始就尝试部署此应用程序所采取的步骤(以防我对另一个问题的“修复”可能会破坏其他问题)。

我在将 Spring/Hibernate 应用程序部署到 WildFly 应用程序服务器时遇到问题。该应用程序本身肯定有效,因为它是开源电子商务框架(Broadleaf Commerce)中的一个示例项目。我也成功地让它在本地的 Jetty 上运行。

该应用程序使用了我在 WildFly/JBoss 中配置的三个 JNDI 数据源;我已经确认应用程序可以看到它们,因为我在配置 DS 之前尝试运行它并且它给出了一个明显的错误,在我配置它们之后它不再这样做。

之后,应用程序会抛出三个不同的错误(每个 PU 一个),表示由于类加载异常而无法启动持久性单元。我可以通过将 jboss-deployment-structure.xml 文件添加到具有以下内容的 WEB-INF 中来修复此错误(根据我的理解,需要此文件,因为此应用程序在其 WAR 文件中包含所有 Hibernate JAR已经,因此下面的文件告诉 JBoss 不要提供自己的 Hibernate 实现):

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
           <module name="org.hibernate"/>
           <module name="org.javassist"/>
           <module name="org.apache.log4j" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.ironjacamar.jdbcadapters" slot="main"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

添加上述文件后,我现在得到这组三个(每个 PU 一个)错误:

23:15:16,791 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.persistenceunit."admin.war#blPU".__FIRST_PHASE__: org.jboss.msc.service.StartException in service jboss.persistenceunit."admin.war#blPU".__FIRST_PHASE__: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.event.EnversIntegrator not a subtype
      service jboss.persistenceunit."admin.war#blSecurePU".__FIRST_PHASE__: org.jboss.msc.service.StartException in service jboss.persistenceunit."admin.war#blSecurePU".__FIRST_PHASE__: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.event.EnversIntegrator not a subtype
      service jboss.persistenceunit."admin.war#blCMSStorage".__FIRST_PHASE__: org.jboss.msc.service.StartException in service jboss.persistenceunit."admin.war#blCMSStorage".__FIRST_PHASE__: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.envers.event.EnversIntegrator not a subtype

WAR 存档中有一个名为 hibernate-envers-4.1.11.Final.jar 的文件。还要记住,这是在 Jetty 上成功运行的同一个 WAR(jboss-deployment-structure.xml 文件除外)。

我试着四处寻找,但根本不知道在哪里看......我尝试在 WildFly 中更改 DS 以使用基于 JDBC4 的驱动程序以及 JDBC41(可能与它无关),但没有运气。我知道这可能是非常简单的事情,并且与配置(WildFly 或应用程序本身)有关,但我不知道在哪里闲逛。

我完全出乎意料的是,WildFly 仍在以某种方式尝试加载旧版本的 Hibernate,捆绑的 4.1.11 Envers JAR 中的类试图覆盖但不能(反之亦然)。

如果它有任何用处 - 该应用程序正在尝试连接到 PostgreSQL 9.3 数据库,并且 WildFly 中定义的 DS 工作只要单击“测试连接”即可。

如果我可以提供任何其他有用的信息,请告诉我。

任何见解或提示将不胜感激。

4

2 回答 2

2

Wildfly 服务器有一个 Hibernate 4.3 版本。要使用 Hibernate 4.1,您必须排除默认的 Hibernate 并打包正确的 Hibernate。

WildFly 中的类加载

例子:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
    <exclusions>
        <module name="org.hibernate" />
        <module name="org.hibernate.envers" />
        <module name="org.hibernate.validator" />
        <module name="org.hibernate.commons-annotations" />
    </exclusions>
</deployment>
</jboss-deployment-structure>
于 2014-05-19T13:29:54.123 回答
0

我从未弄清楚问题的原因(但我认为这是与 JBoss 提供的 JAR 冲突)。

以防万一有人遇到同样的问题 - 我最终使用了 Tomcat,一切都顺利进行。我知道这并不完全是一个解决方案,但它会在此期间起作用。这也可能加强了我最初对 JBoss 提供的 JAR 与项目中捆绑的 Hibernate JAR 冲突的怀疑。

于 2014-03-24T21:35:06.253 回答