首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jboss 6.1 EAP中未加载Hibernate3.jar (从JBOSS 4.3迁移到6.1 EAP)

Jboss 6.1 EAP中未加载Hibernate3.jar (从JBOSS 4.3迁移到6.1 EAP)
EN

Stack Overflow用户
提问于 2017-04-28 19:36:14
回答 1查看 388关注 0票数 1

我正在将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?

日志如下:

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

发布于 2017-05-02 01:13:04

仅推荐EAP发行版附带的Hibernate版本。

下面可能有助于在您的应用程序中使用Hibernate 3 JPA。

创建Hibernate 3 module.xml

代码语言:javascript
复制
<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属性

代码语言:javascript
复制
<?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://docs.jboss.org/author/display/AS71/JPA+Reference+Guide#JPAReferenceGuide-PackagingtheHibernate3.5orgreater3.xJPApersistenceproviderwithyourapplication

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43679270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档