您好,登錄后才能下訂單哦!
以下內容只是以筆記形式記錄,以防再次折騰,同時提供一個借鑒:
1、項目中的數據源使用的是JBOSS的JNDI,在6、7兩個版本中,配置差別較大,具體配置方法,資料配置較多,我這里不重復說(可參考http://www.tuicool.com/articles/aqI7V3)。在升級到JBOSS 7后,因項目中使用了Oracle的表,需要用到ARRAY,創建這個對象時需要使用OracleConnection,在JBOSS6中是這樣轉換的
if(conn.isWrapperFor(OracleConnection.class)){ oraConn= conn.unwrap(OracleConnection.class); }
,
但升級到7會發現這個段代碼不起作用,本以為要換一種方法,如:
if(conn instanceof WrappedConnection){ oraConn= (OracleConnection) ((WrappedConnectionJDK6)conn).getUnderlyingConnection(); }
,
(或者通過conn.getMetaData().getConnection()獲取T4CConnection轉型成OracleConnection),
因為使用JBOSS的JNDI獲取的Connection實例實際是WrappedConnectionJDK6對象,所以你需要將jboss自帶的ironjacamar-jdbc-1.0.9.Final.jar添加到classpath中,但最終你會發現這段代碼也是不起作用的,conn instanceof org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6不會成立,如果強制轉換會報轉型錯誤:
java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6cannot be cast to org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6
,自己不能轉自己,很奇怪的東西。根據查找的資料分析,猜測是跟JBOSS 7模塊加載有關:假使模塊a加載了Test.class這個類(或jar),模塊b也加載了一次Test.class(或jar)(這里兩個模塊的Test.class其實是同一個類文件),但如果你在b模塊中獲取了a模塊里的Test.class實例,你在代碼中強制轉型成b模塊的Test.class,這時就會報出轉型錯誤。
解決的方法是在告知jboss b模塊要用到的Test.class(jar)直接使用a模塊的Test.class(jar),
具體配置方法是在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是如果要轉型成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使用的本地標簽tld文件必須放到WEB-INF中,放到類目錄下的META-INF目錄會報FileNotFound錯。
以上內容只做參考,本人也是剛接觸JBOSS
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。