2011-09-01 20 views
5

Tengo dificultades para enviar dentro de mi EAR mi propia versión de Hibernate (y no la que trae JBoss de forma predeterminada).Actualización de la versión de Hibernate en JBOSS

Entonces hice mi despliegue "de ámbito" al incluir en el EAR un archivo jboss-app.xml que contiene lo siguiente:

<jboss-app> 
    <loader-repository> 
    com.example:archive=unique-archive-name 
    <loader-repository-config> 
    java2ParentDelegation=false 
    </loader-repository-config> 
    </loader-repository> 
</jboss-app> 

Y, como de costumbre, declaro el profesional de la persistencia en la unidad de persistencia de ser Hibernate, de la siguiente manera:

<persistence> 
    <persistence-unit name="myapp"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    ... 

Pero luego, sucede lo peor. En la implementación, el servidor lanza una ClassCastException cuando intenta enviar desde org.hibernate.ejb.HibernatePersistence a la interfaz JPA javax.persistence.spi.PersistenceProvider (que está implícito en HibernatePersistence).

Esto es un poco raro, porque envío la API JPA también en mi EAR, así que, dado que las clases de EAR tienen prioridad a las de JBoss, no debería haber ningún problema cuando se transfiere de HibernatePersistence a PersistenceProvider, ya que "deberían estar" en el mismo cargador de clases.

Si no envío mi propia API JPA, la implementación falla con una excepción ClassNotFoundException cuando JBoss intenta encontrar alguna clase JPA.

¿Alguna idea de por qué falla esta fundición?

Estoy usando JBoss 5.1.0 y estoy intentando usar Hibernate 3.5.6.Final. La versión API de JPA es la que se importa transitoriamente mediante la versión mencionada de Hibernate.

Respuesta

1

¿Ha incluido hibernate-entitymanager.jar también?

De lo contrario, puede intentar reemplazar el tarro de hibernación en el common/lib con la versión 3.5.6.

+0

Gracias. Sí, se envían tanto el hibernate-core como hibernate-entitymanager. Para colocar el contenedor de hibernación en common/lib no es una opción, el Hibernate debe enviarse (y debería ser posible ...). – edutesoy

2

Puede intentar activar el alcance de clase a través del adaptador de oreja. Para JBoss 5.x edit:

jboss/server/[configuración] /deployers/ear-deployer-jboss-beans.xml

y cambio:

<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer"> 
     <property name="isolated">false</property> 
    </bean> 

configuración aislados a verdadero.

1

Para resolver los problemas de carga de clase con hibernación en el servidor jboss necesita agregar jboss-classloading.xml dentro de la carpeta WEB-INF de su aplicación web. Más información sobre estos ajustes de configuración here.

<classloading xmlns="urn:jboss:classloading:1.0" 
domain="pentaho.ear" 
export-all="NON_EMPTY" 
import-all="true" 
parent-first="false"> 
</classloading> 
Cuestiones relacionadas