首页 文章

在Wildfly 8.1的war文件中使用自定义JPA / Hibernate提供程序

提问于
浏览
3

JPA / Hibernate提供程序捆绑在我的应用程序中,但是在将它部署到wildfly 8.1时遇到了麻烦 . 即我正在使用一个名为OpenXava的OSS项目,它与自己的Hibernate版本捆绑在一起 . 我以前在JBoss 5.1上取得了成功,但是当我部署它时,WildFly 8.1给了我一个错误 .

我已经问过OpenXava的首席开发人员,他说这很可能是配置WildFly使用war文件中捆绑的JPA提供程序的问题 . 我查看了WF的文档,找到了jboss.as.jpa.providerModule设置 . 我已经尝试将其设置为应用程序,并且hibernate3-bundled,并且都不起作用 . 我也试过通过jboss-deployment-structure.xml排除模块 . 这造成了一些不同的错误,但似乎没有成功 .

有没有人知道发生了什么?

我的jboss-deployment-structure.xml看起来像:

<deployment> 

     <exclusions> 

       <module name="org.dom4j" /> 

   <module name="org.hibernate"/>

   <module name="javax.persistence.api"/>



     </exclusions> 

  </deployment>

我的persistence.xml看起来像:

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">



<!-- Tomcat + Hypersonic -->

<persistence-unit name="default">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>



    <class>org.openxava.session.GalleryImage</class>

    <properties>

        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>

    <property name="jboss.as.jpa.providerModule" value="application" />

    </properties>

</persistence-unit>   





<!-- JUnit Hypersonic -->

<persistence-unit name="junit">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <properties>

        <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>

        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>

        <property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost:1666"/>

    </properties>

当我部署应用程序时,它返回以下错误(我正在使用OpenXava中提供的示例应用程序MySchool.war):

13:15:17,563 ERROR [org.jboss.msc.service.fail](MSC服务主题1-4)MSC000001:无法启动服务jboss.deployment.unit . “MySchool.war”.FIRST_MODULE_USE:org.jboss.msc服务jboss.deployment.unit中的.service.StartException . “MySchool.war”.FIRST_MODULE_USE:JBAS018733:无法处理部署FIRST_MODULE_USE部署“MySchool.war”

at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:166) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]

at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]

at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_05]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_05]

at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_05]

引起:org.jboss.as.server.deployment.DeploymentUnitProcessingException:JBAS011426:无法部署应用程序打包的持久性提供程序'org.hibernate.ejb.HibernatePersistence'

at org.jboss.as.jpa.processor.PersistenceProviderHandler.deploy(PersistenceProviderHandler.java:81)

at org.jboss.as.jpa.processor.PersistenceBeginInstallProcessor.deploy(PersistenceBeginInstallProcessor.java:49)

at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:159) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]

... 5 more

引起:java.lang.ClassCastException:class org.hibernate.ejb.HibernatePersistence

at java.lang.Class.asSubclass(Class.java:3293) [rt.jar:1.8.0_05]

at org.jboss.as.jpa.processor.PersistenceProviderHandler.deploy(PersistenceProviderHandler.java:74)

... 7 more

13:15:17,587 ERROR [org.jboss.as.controller.management-operation](控制器启动线程)JBAS014613:操作(“部署”)失败 - 地址:([(“deployment”=>“MySchool.war”) ]) - 失败描述:{“JBAS014671:Failed services”=> {“jboss.deployment.unit . \”MySchool.war \“ . FIRST_MODULE_USE”=>“org.jboss.msc.service.StartException in service jboss.deployment .unit . \“MySchool.war \” . FIRST_MODULE_USE:JBAS018733:无法处理部署FIRST_MODULE_USE部署\“MySchool.war \”

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011426: Could not deploy application packaged persistence provider 'org.hibernate.ejb.HibernatePersistence'

Caused by: java.lang.ClassCastException: class org.hibernate.ejb.HibernatePersistence"}}

2 回答

  • 1

    根据Winldfly 8 documentation,您需要更改持久性提供程序:

    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    

    至:

    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    
  • 1

    我相信问题的原因是你错过了这种依赖

    <dependency>
     <groupId>org.jipijapa</groupId>
     <artifactId>jipijapa-hibernate4-3</artifactId>
     <version>1.0.1.Final</version>
    </dependency>
    

    添加依赖后,我设法在Wildfly8.2.Final中使用Hibernate 4.3.5.Final .

相关问题