java 持久化部署问题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3537306/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 02:17:36  来源:igfitidea点击:

Persistence deployment issue

javahibernatejpapersistence.xml

提问by Vivek

I have a hibernate project, which uses JPA.

我有一个使用 JPA 的休眠项目。

my persistence.xml contents is as follows:

我的persistence.xml 内容如下:

<persistence version="2.0" 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_2_0.xsd">
  <persistence-unit name="Demo-PU" transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>java:/DemoDS</non-jta-data-source> 
    <class>com.demo.framework.entity.ReportDefinitionEntity</class> 
    <properties>

<!--  Database connection -->
  <property name="hibernate.connection.url" value="jdbc:mysql://192.168.9.110:3306/demoDB" />
  <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
  <property name="hibernate.connection.username" value="root" />
  <property name="hibernate.connection.password" value="root" />

 <!--  Hibernate dialect  -->
  <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<!--  Output goodies
  -->
  <property name="hibernate.query.jpaql_strict_compliance" value="true" />
  <property name="hibernate.format_sql" value="true" />
  <property name="hibernate.use_sql_comments" value="false" />
   <!--  Cache
  -->
  <property name="hibernate.jdbc.batch_versioned_data" value="true" />
  <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />

    </properties>
  </persistence-unit>
</persistence>

Now when I run it using eclipse I don't have a problem, but when I deploy it in Jboss, I get the below error:

现在,当我使用 eclipse 运行它时,我没有问题,但是当我在 Jboss 中部署它时,出现以下错误:

ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=#Demo-PU state=Create java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence cannot be cast to javax.persistence.spi.PersistenceProvider

错误 [AbstractKernelController] 安装到开始时出错:name=persistence.unit:unitName=#Demo-PU state=Create java.lang.ClassCastException:org.hibernate.ejb.HibernatePersistence 无法转换为 javax.persistence.spi.PersistenceProvider

And here is the list of Jar that I have

这是我拥有的 Jar 列表

activation.jar
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate-tools.jar
hibernate3.jar
javassist.jar
javax.persistence.jar
jdbc2_0-stdext.jar
jta.jar
mysql-connector-java-5.0.5-bin.jar
xml-writer.jar

How can I resolve this issue?

我该如何解决这个问题?

回答by Pascal Thivent

The ClassCastExceptionis caused by having two copies of the javax.persistenceAPIs in your system (one in the common classloader provided by JBoss and the one in your app). When running on JBoss, you are just not supposed to provide this API in your application, don't package it.

ClassCastException是由于javax.persistence您的系统中有两个API副本(一个在 JBoss 提供的通用类加载器中,另一个在您的应用程序中)引起的。在 JBoss 上运行时,您不应该在应用程序中提供此 API,不要打包它。

By the way, it seems you're using a JPA 2.0 persistence.xmlbut I'm not convinced you're using the JPA 2.0 implemenation of Hibernate (actually, you seem to be using a pretty old version since I can see commons-logging.jar). You should probably fix that i.e. use the 1.0 version of persistence.xml.

顺便说一句,您似乎使用的是 JPA 2.0,persistence.xml但我不相信您使用的是 Hibernate 的 JPA 2.0 实现(实际上,我看到您似乎使用的是相当旧的版本commons-logging.jar)。您可能应该修复该问题,即使用persistence.xml.

Actually, you should very likely use a different persistence.xmlwhen running on JBoss (using a JTA entity manager and a jta-data-source). And it seems weird to mix data source usage and Hibernate built-in connection pool.

实际上,persistence.xml在 JBoss 上运行时您很可能应该使用不同的(使用 JTA 实体管理器和jta-data-source)。混合使用数据源和 Hibernate 内置连接池似乎很奇怪。