溫馨提示×

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

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

在JBoss下如何通過(guò)本地接口訪問(wèn)EJB

發(fā)布時(shí)間:2021-11-22 15:08:04 來(lái)源:億速云 閱讀:137 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)在JBoss下如何通過(guò)本地接口訪問(wèn)EJB的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

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

如果你的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載入的類。

感謝各位的閱讀!關(guān)于“在JBoss下如何通過(guò)本地接口訪問(wèn)EJB”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

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

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

AI