2010-08-21 2 views
0

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> 

를 지금은 그것이 내가 문제가없는 이클립스를 사용하여 실행할 때,하지만 난 제이 보스에 배포 할 때, 나는 아래의 오류가 발생합니다 :

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

그리고 여기에 내가

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

또한 javax.persistence.jar 대신 ejb3-persistence.jar를 사용하려고했습니다. – Vivek

답변

8

ClassCastException은 시스템에 javax.persistence 개의 API 사본 (JBoss에서 제공하는 공통 클래스 로더에 하나, 앱에 공통 클래스 로더 두 개)을 가지고 있기 때문에 발생합니다. JBoss에서 실행 중일 때, 애플리케이션에이 API를 제공하지 말고 패키징하지 마십시오.

그런데 JPA 2.0 persistence.xml을 사용하고있는 것 같지만 JPA 2.0 구현체 인 Hibernate를 사용하고 있다는 것을 확신하지 못합니다. (사실, 꽤 오래된 버전을 사용하고있는 것 같습니다. commons-logging.jar). 즉, persistence.xml의 1.0 버전을 사용하는 것이 좋습니다.

실제로 JBoss (JTA 엔터티 관리자와 jta-data-source 사용)에서 실행할 때 다른 persistence.xml을 사용해야합니다. 그리고 데이터 소스 사용과 Hibernate 빌트인 커넥션 풀을 섞는 것이 이상하게 보입니다.