将项目从JBOSS 6 迁移到 JBOSS 7所遇到的问题
admin
2023-05-06 18:02:06
0

以下内容只是以笔记形式记录,以防再次折腾,同时提供一个借鉴:

 

1、项目中的数据源使用的是JBOSSJNDI,在67两个版本中,配置差别较大,具体配置方法,资料配置较多,我这里不重复说(可参考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),

因为使用JBOSSJNDI获取的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.classjar)直接使用a模块的Test.classjar),

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



   

其中注释的org.jboss.ironjacamar.jdbcadapters是如果要转型成org.jboss.jca.adapters.jdbc.WrappedConnectionJDK6的配置,而com.oracledatabase.oracle是我本地的JNDIoracle module.xml中的名字:



 


   
 
 
   
  
  
  

 

这样配置后,代码中的使用的类就会加载成在被依赖模块中的类。这样配置后conn.isWrapperFor(OracleConnection.class)又变成可以使用的了。

 

 

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

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

 

 

3jboss 7中,jsp使用的本地标签tld文件必须放到WEB-INF中,放到类目录下的META-INF目录会报FileNotFound错。

 

以上内容只做参考,本人也是刚接触JBOSS


相关内容

热门资讯

Google在港推出AI代理G... 观点网讯:7月29日,Google在香港推出AI代理Gemini Spark,该代理可全天候在后台运...
5G+165Hz!联想新品官宣... 近两年来,小屏平板一直是比较有趣的一个品类。 不同于大平板注重效率、手机追求万能的特点,拯救者Y70...
原创 马... 马斯克又出来了。这次说2036年钱就没用了。 理由是人工智能加机器人,东西多到你用不完,还拿钱干嘛...
美的集团:我国智能家居互联互通... IT之家 7 月 30 日消息,美的集团今日发布公告,7 月 21 日至 23 日,智能家居互联互通...
华为新款MatePad Pro... 【CNMO科技消息】7月30日,@华为终端 官宣全新旗舰平板华为MatePad Pro。 新款华为...
从实验室到实景验证:6G光子太... 全息通信是第六代移动通信(6G)的典型应用场景之一,旨在通过融合无线传输与全息三维成像技术,实现超大...
从“能对话”到“能干活”——人... 【经济界面】 光明日报记者 刘坤 李晓东 周洪双 人工智能(AI)眼镜化身为个人“助理”,实时进行...
【全新发布】UminiP Pr... (来源:洲明科技)
日本通过“H3火箭8号”发射失... △H3火箭(资料图) 日本文部科学省30日召开关于去年“H3火箭8号”发射失败的会议。会议通过的最终...
互联网巨头抢滩健康硬件,上游芯... 封面新闻记者 付文超 当下,互联网巨头对健康硬件的押注,正在成为产业现实,加速拉动整个产业链步入新一...