2011-09-01 13 views
5

Sto attraversando un periodo difficile quando provo a spedire all'interno del mio EAR la mia versione di Hibernate (e non quella che JBoss fornisce di default).Aggiornamento versione di Hibernate in JBOSS

Poi ho fatto il mio schieramento "ambito", includendo nel EAR un file jboss-app.xml contenente le seguenti:

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

E, come al solito, dichiaro il mio provider di persistenza nel gruppo la persistenza di essere Hibernate, come segue:

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

Ma poi, il peggio accade. Durante la distribuzione, il server genera una ClassCastException quando tenta di trasmettere da org.hibernate.ejb.HibernatePersistence all'interfaccia JPA javax.persistence.spi.PersistenceProvider (che è impiantato da HibernatePersistence).

Questo è un po 'strano, perché io sono il trasporto l'API APP anche nel mio orecchio, così, dato che le classi della EAR hanno la priorità a quelle di JBoss, dovrebbe avere nessun problema durante la trasmissione da HibernatePersistence a PersistenceProvider, poiché "dovrebbero essere" sullo stesso caricatore di classe.

Se non viene spedita la mia API JPA, la distribuzione non riesce con ClassNotFoundException quando JBoss tenta di trovare una classe JPA.

Qualche idea sul perché questo casting fallisce?

Sto utilizzando JBoss 5.1.0 e sto tentando di utilizzare Hibernate 3.5.6.Final. La versione API JPA è quella importata in transito dalla versione di Hibernate con menction.

risposta

1

Hai incluso anche hibernate-entitymanager.jar?

Altrimenti puoi provare a sostituire il barattolo di nucleo di ibernazione nel common/lib con la versione 3.5.6.

+0

Grazie. Sì, vengono spediti sia il core di ibernazione sia il gestore di entità di ibernazione. Per posizionare il jar di ibernazione nel common/lib non è un'opzione, l'Hibernate deve essere spedito (e dovrebbe essere possibile ...). – edutesoy

2

Si potrebbe provare ad attivare la scoping della classe tramite il deployer dell'orecchio. Per JBoss 5.x edit:

jboss/server/[configurazione] /deployers/ear-deployer-jboss-beans.xml

e il cambiamento:

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

impostazione isolato su true.

1

per risolvere i problemi di classe di carico con Hibernate server JBoss è necessario aggiungere il jboss-classloading.xml all'interno della cartella WEB-INF dell'applicazione web. Maggiori informazioni su queste impostazioni di configurazione here.

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