2010-08-21 7 views
0

J'ai un projet d'hibernation qui utilise JPA.Problème de déploiement de persistance

mon contenu persistence.xml est la suivante:

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

Maintenant, quand je le lance en utilisant Eclipse Je n'ai pas de problème, mais quand je déploie dans Jboss, je reçois l'erreur suivante:

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

Et voici la liste des Jar que j'ai

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 

Comment puis-je résoudre ce problème?

+0

J'ai également essayé d'utiliser ejb3-persistence.jar au lieu de javax.persistence.jar – Vivek

Répondre

8

Le ClassCastException est dû à l'existence de deux copies des API javax.persistence dans votre système (une dans le classloader commun fourni par JBoss et celui de votre application). Lorsque vous utilisez JBoss, vous n'êtes pas censé fournir cette API dans votre application, ne l'empaquetez pas. A propos, il semblerait que vous utilisiez une JPA 2.0 persistence.xml mais je ne suis pas convaincu que vous utilisiez l'implémentation JPA 2.0 d'Hibernate (en fait, vous semblez utiliser une version assez ancienne puisque je peux voir commons-logging.jar). Vous devez probablement corriger cela, c'est-à-dire utiliser la version 1.0 de persistence.xml.

En fait, vous devriez très probablement utiliser un persistence.xml différent lors de l'exécution sur JBoss (en utilisant un gestionnaire d'entités JTA et un jta-data-source). Et il semble bizarre de mélanger l'utilisation de la source de données et le pool de connexions intégré Hibernate.

Questions connexes