2014-11-04 62 views
0

DemoApp是部署在JBoss中7.1.1.FinalClassCastException異常:不能在JBoss中7.1.1.Final投oracle.sql.ARRAY到oracle.sql.ARRAY

Spring集成項目,結果從存儲返回過程包含oracle.sql.ARRAY的對象(對象的JBoss參考模塊的ojdbc罐)

,我試圖轉換爲oracle.sql.ARRAY其拋出異常

代碼:

URL resultJarLocation= resultMap.get("returnObj").getClass().getProtectionDomain().getCodeSource().getLocation(); 
URL appJarLocation = oracle.sql.ARRAY.class.getProtectionDomain().getCodeSource().getLocation(); 
System.out.println("resultJarLocation : " + resultJarLocation); 
System.out.println("appJarLocation : " + appJarLocation); 

oracle.sql.ARRAY returnObj=(oracle.sql.ARRAY)resultMap.get("returnObj"); 

例外:

org.springframework.messaging.MessageHandlingException: java.lang.ClassCastException: oracle.sql.ARRAY cannot be cast to oracle.sql.ARRAY 

應用ARRAY類指在部署的應用程序ojdbc罐子。 其中作爲結果集數組類referreing ojdbc罐子的JBoss模塊 Sys系統輸出:

resultJarLocation : jar:file:/<JBOSS_HOME>/modules/com/oracle/ojdbc6/main/ojdbc6.jar 
appJarLocation : vfs:/<JBOSS_HOME>/bin/content/DemoApp.war/WEB-INF/lib/ojdbc6.jar 

回答

0

您正在嘗試通過不同的類加載器加載的類之間施放。 JVM不僅通過名稱和包來區分類,還通過所使用的類加載器來區分類。換句話說,從JVM的角度來看就像試圖從String轉換爲Long;你不能。 唯一能想到的就是配置。爲了使用相同的類加載器或者將類加載器設置在相同的層次結構中而設置,以利用委派。我對JBoss(尤其是當前版本)並不是很熟悉,但我知道它已經(或曾經有過)與其他應用程序服務器有一些非常不同的類加載策略。檢查其課程文件是我的第一選擇。

0

我通過將ojdbc jar的作用域更改爲'provided'來解決問題,因爲這不會將jar包括在WEB-INF/lib中。

然後在pom中添加jboss 7模塊'com.oracle.ojdbc6'的Dependencic,它將在META-INF/MANIFEST.MF文件中添加Dependencies屬性,作爲部署jboss 7的ojdbc jar的結果將用於jboss和應用程序的對象創建,而classloader將成爲jboss的類加載器。

波紋管是pom中的代碼。

1)Manifest條目:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifestEntries> 
       <Dependencies>com.oracle.ojdbc6</Dependencies> 
      </manifestEntries> 
     </archive> 
    </configuration> 
</plugin> 

2)相關性作爲本發明提供:

<dependency> 
    <scope>provided</scope> 
    <groupId>com.oracle</groupId> 
    <artifactId>ojdbc6</artifactId> 
    <version>11.2.0.2.0</version> 
</dependency> 

META-INF/MANIFEST.MF文件將與條目相關性來產生

Manifest-Version: 1.0 
Dependencies: com.oracle.ojdbc6 
Built-By: Mrinmoy 
Build-Jdk: 1.7.0_65 
Created-By: Apache Maven 3.2.2 
Archiver-Version: Plexus Archiver 
相關問題