1

我有一个 ear 文件,其中包含一个.war文件和许多.jar文件,包括Spring WSHibernate 3. 此应用程序将从另一个应用程序服务器移植到 Wildfly。

到目前为止,由于需要创建所有模块以及它们几乎无限的依赖关系,这一直是一种痛苦。

我创建了一个jboss-deployment-structure.xml文件,在其中声明了war依赖项:

<sub-deployment name="xxx.war"> 
    <dependencies>
       <module name="org.hibernate" slot="3"/>  
       <module name="org.spring.jdbc" />
       <module name="org.spring.beans" />
       <module name="org.spring.core" />
       <module name="org.slf4j" />
    </dependencies> 
</sub-deployment>

尝试部署应用程序时,我收到以下错误:

Caused by: java.lang.ClassNotFoundException: org.hibernate.event.PreUpdateEventListener from [Module "deployment.xxxEAR.ear.xxp_jar.jar:main" from Service Module Loader]

问题是,如何更新 deployment.xxxEAR.ear.xxp_jar.jar 以包含正确的模块依赖项,即<module name="org.hibernate" slot="3"/>

4

2 回答 2

0

如果您使用的是 Wildfly 9 或更低版本,您可以按照以下步骤将 hibernate 3.5.6 与您的应用程序捆绑在一起。将所有 jars 添加到 ear 的 lib 文件夹中。将 jboss-deployment-structure.xml 添加到 ear Meta-Inf 目录。

persistent.xml => 将 HibernatePersistence 提供程序和提供程序模块添加为 hibernate3-bundled 很重要。

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/
ns/persistence/persistence_1_0.xsd" version="1.0" >
   <persistence-unit name='pursem'>
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
   <jta-data-source>java:/com/env/jdbc/OracleDS</jta-data-source>
   <properties>
      <property name="jboss.entity.manager.jndi.name" value="java:EntityManager/rsem"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
      <property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
      <!-- property name="hibernate.hbm2ddl.auto" value="update"/ -->
  </persistence-unit>

</persistence>

jboss-deployment-structure.xml => 移除wildfly组装的hibernate

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment>  
    <exclusions>  
      <module name="org.hibernate"/>  
    </exclusions>  
  </deployment>
</jboss-deployment-structure>
于 2018-03-28T14:44:39.933 回答
0

如果您使用 Wildfy 10,则已删除hibernate 3 支持。

您使用的是哪个版本的 Wildfly?

如果您使用 Wildfly 10 版本,并且仍想使用 hibernate 3 版本,您可以检查您打包的 webapp 中是否具有所有 hibernate 3 maven 依赖项。

你也可以像这样在你的 jboss-deployment-structure.xml 文件中排除 hibernate jboss 模块,这样你的 webapp 将不再依赖 Wildfly hibernate jboss 模块:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.hibernate" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
于 2016-02-12T19:04:32.763 回答