2012-02-16 37 views
1

我必須在我的企業應用程序中使用Hibernate 4.0.1版本。 EAR被部署到一個JBoss 6.0容器中。在JBoss 6.0中使用Hibernate 4.0.1

EAR文件包含以下休眠罐子:

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 

根據Upgrade Hibernate version in JBOSS我試圖配置使用follwing的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] 

在異常堆棧跟蹤中提到了hibernate的3.6.0.Final版本。看起來好像Container仍然嘗試使用JBoss附帶的hibernate版本創建JPA持久性單元。

任何人都可以給我提示我做錯了什麼,以及如何配置自定義類加載,以便JBoss使用打包在EAR文件中的Hibernate版本。

+0

嗨,你找到任何解決方案嗎?我在這裏看到同樣的問題,任何提示都將不勝感激。 – Petter 2012-03-12 08:12:17

+0

Hi Petter,直到現在我們還沒有找到任何解決方案 – woelfle 2012-03-14 18:08:11

回答

0

我做了一個辦法解決這個問題,它的工作原理...

我的耳朵結構是這樣的--->

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-app.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"/> 
相關問題