我来自沉重的 .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 工作只要单击“测试连接”即可。
如果我可以提供任何其他有用的信息,请告诉我。
任何见解或提示将不胜感激。