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
Persistence deployment issue
提问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 内置连接池似乎很奇怪。

