Использование Hibernate 4.0.1 в JBoss 6.0

Я должен использовать Hibernate версии 4.0.1 в своем корпоративном приложении. EAR развертывается в контейнере JBoss 6.0.

Файл уха содержит следующие файлы гибернации:

hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.0.1.Final.jar
hibernate-entitymanager-4.0.1.Final.jar
hibernate-envers-4.0.1.Final.jar
hibernate-envers-4.0.1.Final.jar
hibernate-envers-4.0.1.Final.jar
hibernate-search-analyzers-4.0.0.Final.jar
hibernate-search-engine-4.0.0.Final.jar
hibernate-search-engine-4.0.0.Final.jar
hibernate-validator-4.2.0.Final.jar

Согласно Обновить версию Hibernate в JBOSS, я попытался настроить пользовательскую загрузку классов, используя следующие jboss-app.xml и jboss-classloading.xml

<!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD J2EE Application 1.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-app_5_0.dtd">
<jboss-app>
  <loader-repository>
    com.acme.sample:archive=Sample
    <loader-repository-config>java2ParentDelegation=false</loader-repository-config> 
  </loader-repository>
</jboss-app>


<?xml version="1.0" encoding="UTF-8"?>
<classloading xmlns="urn:jboss:classloading:1.0"
  domain="sample.ear"
  export-all="NON_EMPTY"
  import-all="true"
  parent-first="false">
</classloading>

При запуске контейнера JBoss 6 в файле журнала появляются следующие строки:

09:49:55,238 INFO  [org.hibernate.annotations.common.Version] HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
09:49:55,265 INFO  [org.hibernate.Version] HHH000412: Hibernate Core {4.0.1.Final}

Похоже, Hibernate 4.0.1 обнаружен. Но тогда возникает следующее исключение:

09:49:55,388 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=sample-SNAPSHOT.ear/lib/persistence_impl-0.0.21-SNAPSHOT.jar#sample state=Create: java.lang.ClassCastException: org.jboss.as.jpa.scanner.HackTLScanner cannot be cast to org.hibernate.ejb.packaging.Scanner
at org.hibernate.ejb.Ejb3Configuration.buildScanner(Ejb3Configuration.java:415) [:3.6.0.Final]
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:582) [:3.6.0.Final]
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:72) [:3.6.0.Final]
at org.jboss.jpa.builder.DefaultCEMFBuilder.build(DefaultCEMFBuilder.java:47) [:1.0.2-alpha-3]
at org.jboss.as.jpa.scanner.HackCEMFBuilder.build(HackCEMFBuilder.java:49) [:6.0.0.Final]
at org.jboss.jpa.deployment.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:275) [:1.0.2-alpha-3]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_26]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_26]
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_26]
at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:60) [jboss-reflect.jar:2.2.0.GA]
at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:168) [jboss-reflect.jar:2.2.0.GA]
at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) [jboss-reflect.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:257) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:125) [jboss-kernel.jar:2.2.0.GA]
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72) [jboss-kernel.jar:2.2.0.GA]

В трассировке стека исключений указана версия 3.6.0.Final спящего режима. Похоже, что Контейнер все еще пытается создать JPA Persistence Unit, используя версию спящего режима, которая поставляется с JBoss.

Может ли кто-нибудь подсказать, что я делаю неправильно и как настроить пользовательскую загрузку классов, чтобы JBoss использовал версию Hibernate, упакованную в файл EAR.


person woelfle    schedule 16.02.2012    source источник
comment
Привет, ты нашел какое-нибудь решение этой проблемы? Я вижу ту же проблему здесь, и любые подсказки будут очень признательны.   -  person Petter    schedule 12.03.2012
comment
Привет, Петтер, до сих пор мы не нашли решения этой проблемы.   -  person woelfle    schedule 14.03.2012


Ответы (1)


Я сделал обходной путь для этой проблемы, и он работает...

структура моего уха такая--->

accountEAR.ear
|
|--lib
    |<all jars for hibernate 4.0.1 and mysql jdbc jar>
|
|--META-INF
    | application.xml
    | jboss-app.xml
    | jboss-classloading.xml
    | mysql-ds.xml
|
|-- account_persistence.jar

версия jboss 6.1 и версия mysql 5.1

jboss-приложение.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD Java EE Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-app_5_0.dtd" >
<jboss-app>
    <loader-repository>
        com.accountEAR:loader=accountEAR
        <loader-repository-config>
            java2ParentDelegation=false
        </loader-repository-config>
    </loader-repository>
    <library-directory>lib</library-directory>
</jboss-app>

jboss-classloading.xml:

<?xml version="1.0" encoding="UTF-8"?>
<classloading 
    xmlns="urn:jboss:classloading:1.0"
    export-all="NON_EMPTY"
    import-all="true"
    parent-first="false"/>
person DEBA    schedule 29.05.2012