2010-08-21 131 views
0

我有一個hibernate項目,它使用JPA。持久性部署問題

我的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> 

現在,當我運行使用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

這裏是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 

我怎樣才能解決這個問題?

+0

另外我試過用ejb3-persistence.jar代替javax.persistence.jar – Vivek 2010-08-21 10:45:35

回答

8

ClassCastException是由系統中的javax.persistence API的兩個副本引起的(一個在JBoss提供的通用類加載器中,另一個在您的應用中)。在JBoss上運行時,你只是不應該在你的應用程序中提供這個API,不要打包它。

順便說一句,它似乎你使用的是JPA 2.0 persistence.xml,但我不相信你正在使用Hibernate的JPA 2.0實現(實際上,因爲我可以看到你使用了一個很老的版本commons-logging.jar)。您應該修復該問題,即使用1.0版本的persistence.xml

實際上,在JBoss上運行時(使用JTA實體管理器和jta-data-source),您應該使用不同的persistence.xml。混合數據源使用和Hibernate內置連接池似乎很奇怪。