新聞中心
在JBoss訪問(wèn)EJB,如果包含EJB的jar,JBoss訪問(wèn)EJB和要通過(guò)local接口訪問(wèn)EJB的war不被打包成一個(gè)ear來(lái)部署,會(huì)遇到問(wèn)題。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),蕪湖企業(yè)網(wǎng)站建設(shè),蕪湖品牌網(wǎng)站建設(shè),網(wǎng)站定制,蕪湖網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,蕪湖網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
如果你的war中包含了EJB的local接口的class,那么war在通過(guò)jndi取得EJB的引用試圖將其轉(zhuǎn)化成接口類型時(shí)會(huì)拋 ClassCastException。而如果war中不包含local接口的class,則會(huì)拋class not found的異常。這都是由討厭的classloader問(wèn)題導(dǎo)致的。每個(gè)放到JBoss的deploy目錄里的部署單元都有自己的獨(dú)立的 classloader樹(shù),這兩棵樹(shù)在jvm的classloader里是平級(jí)的。
如果war和EJB jar里都包含了某個(gè)EJB的local接口的class時(shí),那么同一個(gè)類就分別存在于兩棵classloader樹(shù)中。通過(guò)jndi取得的引用的類型是 EJB jar中的local接口的類型,將其轉(zhuǎn)化成war里的那個(gè)local接口類型時(shí)就出錯(cuò)了,因?yàn)樗鼈儾皇峭粋€(gè)類。
而classloader是不能訪問(wèn)同級(jí)的其他的classloader下的類的,所以如果war里不包含接口的class,有會(huì)因找不到class而出錯(cuò)。
JBoss訪問(wèn)EJB這種時(shí)候就是使用ear的時(shí)候,位于同一個(gè)ear里EJB jar的classloader是war的classloader的父classloader。
這樣,只需要部署一份接口類,war也能訪問(wèn)到它,因?yàn)樽?classloader能訪問(wèn)父classloader載入的類。
文章題目:在JBoss下通過(guò)本地接口訪問(wèn)EJB
轉(zhuǎn)載來(lái)于:http://fisionsoft.com.cn/article/dhhgcdi.html


咨詢
建站咨詢
