我来自繁重的.NET / IIS背景,虽然我过去曾使用过Java,但我对大型Java Web应用程序还是比较陌生的,所以请耐心等待。由于我的背景有限,我将从一开始就尝试部署这个应用程序(如果我的另一个问题的“修复”可能会破坏别的东西)。
我无法将Spring / Hibernate应用程序部署到WildFly应用程序服务器。应用程序本身肯定有效,因为它是开源电子商务框架(Broadleaf Commerce)中的示例项目。我也成功地让它在Jetty本地运行。
该应用程序使用我在WildFly / JBoss中配置的三个JNDI数据源;我已经确认应用程序看到它们是因为我在配置DS之前尝试运行它并且它给出了一个明确的错误,在我配置它之后它就不再这样了。
之后,应用程序将抛出三个不同的错误(每个PU一个),说由于类加载异常而无法启动持久性单元。这个错误我能够通过将以下内容添加到WEB-INF中来修复jboss-deployment-structure.xml文件(根据我的理解,需要此文件,因为此应用程序在其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。
如果我能提供其他任何有用的信息,请告诉我。
非常感谢任何见解或提示。
答案 0 :(得分:2)
Wildfly服务器有一个Hibernate 4.3版本。要使用Hibernate 4.1,您必须排除默认的Hibernate并打包正确的Hibernate。
示例:
<?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>
答案 1 :(得分:0)
我从来没有弄清问题的原因(但我认为这是与JBoss提供的JAR冲突)。
万一有人遇到同样的问题 - 我最终使用Tomcat,一切顺利。我知道这不是一个完全解决方案,但它会在临时工作。这也可能加强了我最初怀疑JBoss提供的JAR与项目中捆绑的Hibernate JAR冲突。