溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

將項目從JBOSS 6 遷移到 JBOSS 7所遇到的問題

發(fā)布時間:2020-07-05 14:58:22 來源:網(wǎng)絡(luò) 閱讀:1066 作者:chenlesheng 欄目:關(guān)系型數(shù)據(jù)庫

以下內(nèi)容只是以筆記形式記錄,以防再次折騰,同時提供一個借鑒:

 

1、項目中的數(shù)據(jù)源使用的是JBOSSJNDI,在6、7兩個版本中,配置差別較大,具體配置方法,資料配置較多,我這里不重復(fù)說(可參考http://www.tuicool.com/articles/aqI7V3)。在升級到JBOSS 7后,因項目中使用了Oracle的表,需要用到ARRAY,創(chuàng)建這個對象時需要使用OracleConnection,在JBOSS6中是這樣轉(zhuǎn)換的   

if(conn.isWrapperFor(OracleConnection.class)){
  oraConn= conn.unwrap(OracleConnection.class);
}

,

但升級到7會發(fā)現(xiàn)這個段代碼不起作用,本以為要換一種方法,如:

if(conn instanceof WrappedConnection){
  oraConn= (OracleConnection) ((WrappedConnectionJDK6)conn).getUnderlyingConnection();
  }


(或者通過conn.getMetaData().getConnection()獲取T4CConnection轉(zhuǎn)型成OracleConnection),

因為使用JBOSSJNDI獲取的Connection實例實際是WrappedConnectionJDK6對象,所以你需要將jboss自帶的ironjacamar-jdbc-1.0.9.Final.jar添加到classpath中,但最終你會發(fā)現(xiàn)這段代碼也是不起作用的,conn instanceof org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6不會成立,如果強(qiáng)制轉(zhuǎn)換會報轉(zhuǎn)型錯誤:

java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6cannot be cast
 to org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6

,自己不能轉(zhuǎn)自己,很奇怪的東西。根據(jù)查找的資料分析,猜測是跟JBOSS 7模塊加載有關(guān):假使模塊a加載了Test.class這個類(或jar),模塊b也加載了一次Test.class(或jar)(這里兩個模塊的Test.class其實是同一個類文件),但如果你在b模塊中獲取了a模塊里的Test.class實例,你在代碼中強(qiáng)制轉(zhuǎn)型成b模塊的Test.class,這時就會報出轉(zhuǎn)型錯誤。

解決的方法是在告知jboss b模塊要用到的Test.classjar)直接使用a模塊的Test.classjar),

具體配置方法是在WEB-INF/jboss-deployment-structure.xml配置文件里添加以下配置:

<dependencies>
<!-- <modulename="org.jboss.ironjacamar.jdbcadapters" slot="main"/>-->
   <module name="com.oracledatabase.oracle"slot="main"/>
</dependencies>

其中注釋的org.jboss.ironjacamar.jdbcadapters是如果要轉(zhuǎn)型成org.jboss.jca.adapters.jdbc.WrappedConnectionJDK6的配置,而com.oracledatabase.oracle是我本地的JNDIoracle module.xml中的名字:

<?xml version="1.0"encoding="UTF-8"?>
<modulexmlns="urn:jboss:module:1.0"name="com.oracledatabase.oracle">
 <resources>
<resource-rootpath="ojdbc6.jar"/>
<!—沒有的話會亂碼-->
   <resource-root path="orai18n.jar"/>
 </resources>
 <dependencies>
   <module name="javax.api"/>
  <module name="javax.transaction.api"/>
  <module name="javax.servlet.api"optional="true"/>
  </dependencies>
</module>

 

這樣配置后,代碼中的使用的類就會加載成在被依賴模塊中的類。這樣配置后conn.isWrapperFor(OracleConnection.class)又變成可以使用的了。

 

 

2、在jboss 7中的jboss-web.xml不在使用class-loading配置,不然報解析不了的錯。參考:

http://www.cnblogs.com/davidwang456/p/3959561.html

 

 

3、jboss 7中,jsp使用的本地標(biāo)簽tld文件必須放到WEB-INF中,放到類目錄下的META-INF目錄會報FileNotFound錯。

 

以上內(nèi)容只做參考,本人也是剛接觸JBOSS


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI