2011-09-01 15 views
5

Mam trudny czas, próbując wysyłać wewnątrz mojego EAR moją własną wersję Hibernate (a nie tą, którą JBoss domyślnie przynosi).Uaktualnienie wersji Hibernate w JBOSS

Potem zrobiłem mój rozmieszczenia „scoped” poprzez włączenie do EAR plik JBoss-app.xml zawierającą następujące:

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

i, jak zwykle, oświadczam mój provider wytrwałość w urządzeniu do utrwalania być w stanie hibernacji, jak następuje:

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

Ale wtedy dzieje się najgorsze. Podczas wdrażania serwer generuje wyjątek ClassCastException, gdy próbuje rzutować z org.hibernate.ejb.HibernatePersistence na interfejs JPA javax.persistence.spi.PersistenceProvider (który jest implikowany przez HibernatePersistence).

To jest trochę WIRTUALNY, ponieważ wysyłam API JPA również w moim pliku EAR, więc, biorąc pod uwagę, że klasy EAR mają pierwszeństwo dla klas JBoss, nie powinien mieć problemu z przesyłaniem z HibernatePersistence do PersistenceProvider, ponieważ powinny "należeć" do tego samego programu ładującego klasy.

Jeśli nie wysyłam własnego interfejsu API JPA, wdrożenie nie powiedzie się z wyjątkiem ClassNotFoundException, gdy JBoss próbuje znaleźć trochę klasy JPA.

Każdy pomysł na to, dlaczego ten casting zawodzi?

Używam JBoss 5.1.0 i próbuję użyć Hibernate 3.5.6.Final. Wersja interfejsu API JPA jest tą, która została zaimportowana przechodnio przez menstruowaną wersję Hibernate.

Odpowiedz

1

Czy umieściłeś również plik hibernacji-membersmanager.jar?

W przeciwnym razie możesz spróbować wymienić słoik główny hibernacji w pliku common/lib na wersję 3.5.6.

+0

Dzięki. Tak, wysyłane są zarówno sterowniki hibernacji-core, jak i hibernacji. Aby umieścić słoik hibernacji w common/lib nie jest opcją, Hibernate powinien zostać dostarczony (i powinno być możliwe ...). – edutesoy

2

Możesz spróbować włączyć klasyfikację klas za pośrednictwem narzędzia do wdrażania uszu. Dla JBoss 5.x EDIT:

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

i zmienić:

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

ustawienie odizolowane na true.

1

Aby rozwiązać problemy z ładowaniem klasy ze stanem hibernacji na serwerze jboss, musisz dodać jboss-classloading.xml do folderu aplikacji internetowej. Przeczytaj więcej na temat tych ustawień konfiguracyjnych here.

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