我正在将jboss 4.3升级到jboss 6.1 EAP。在4.3中,应用程序使用hibernate3.jar加载hibernate类。6.1EAP由不同的应用程序共享,hibernate4.jar在JBOSS的全局模块中可用(因为它被其他应用程序使用)。我尝试将hibernate3.jar作为应用程序的依赖项添加到jboss中,并在jboss-deployment-structure.xml中添加了org.hibernate作为依赖项。但是对于我的应用程序,我仍然看到加载了hibernate4类,而不是3个。我怎样才能让它只加载hibernate3?
日志如下:
Caused by: java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
at com.arbitron.sms.common.dao.JobDAOImpl.logToAuditProcess(JobDAOImpl.java:388) [mr.jar:]
at com.arbitron.sms.sample.job.DemoValuesAverageReportJob.execute(DemoValuesAverageReportJob.java:47) [mr.jar:]
at com.arbitron.sms.common.processing.ReportMessageBean.onMessage(ReportMessageBean.java:41) [mr.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_11]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_11]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_11]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_11]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:58) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:58) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]发布于 2017-05-02 01:13:04
仅推荐EAP发行版附带的Hibernate版本。
下面可能有助于在您的应用程序中使用Hibernate 3 JPA。
创建Hibernate 3 module.xml
<module xmlns="urn:jboss:module:1.1" name="org.hibernate" slot="3">
<resources>
<resource-root path="hibernate-annotations.jar"/>
<resource-root path="hibernate-commons-annotations.jar"/>
<resource-root path="hibernate-core.jar"/>
<resource-root path="hibernate-entitymanager.jar"/>
<resource-root path="hibernate-validator.jar"/>
</resources>
<dependencies>
<module name="asm.asm"/>
<module name="javax.api"/>
<module name="javax.annotation.api"/>
<module name="javax.enterprise.api"/>
<module name="javax.persistence.api"/>
<module name="javax.transaction.api"/>
<module name="javax.validation.api"/>
<module name="javax.xml.bind.api"/>
<module name="org.antlr"/>
<module name="org.apache.commons.collections"/>
<module name="org.dom4j"/>
<module name="org.javassist"/>
<module name="org.jboss.as.jpa.hibernate" slot="3"/>
<module name="org.jboss.as.jpa.spi"/>
<module name="org.jboss.as.jpa.util"/>
<module name="org.jboss.jandex"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.vfs"/>
<module name="org.slf4j"/>
</dependencies>
</module注从Hibernate 3.6开始,不应该包含hibernate-annotations.jar,因为所需的类存在于hibernate-core.jar中。
将module.xml和指定为资源根路径条目的jars复制到/org/hibernate/3 3目录路径中与插槽对应
在persistence.xml中,指定jboss.as.jpa.providerModule属性
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="example_pu" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>...</jta-data-source>
<properties>
<property name="jboss.as.jpa.providerModule" value="org.hibernate:3"/> <!-- module:slot -->
</properties>
</persistence-unit>
</persistence>您可能需要在persistence.xml中指定较旧的类(HibernatePersistence),如上所示
如果您的应用程序依赖于Hibernate特定的类,则可能需要添加对Hibernate 3模块()的依赖。
https://stackoverflow.com/questions/43679270
复制相似问题