首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EJB 遠端呼叫核心機制深度解析:完整調用鏈路與代碼級追蹤(二)

     編輯:Java 相關知識

WebLogic 動態生成類別補充清單

  • Home 容器實作 Stub:HelloBean_HomeImpl_WLStub
  • Home 容器實作 Skeleton:HelloBean_HomeImpl_WLSkeleton
  • Remote 容器實作:HelloBean_EOImpl
  • Remote 容器實作 Stub:HelloBean_EOImpl_WLStub
  • Remote 容器實作 Skeleton:HelloBean_EOImpl_WLSkeleton

客戶端僅需 Hello.class、HelloHome.class。

實戰代碼級追蹤:JNDI 查找與 create()

HelloHome home = (HelloHome) PortableRemoteObject.narrow(
    ctx.lookup("Hello"), HelloHome.class);

home.toString() 輸出:HelloBean_HomeImpl_WLStub@18c458
→ 證實 JNDI 回傳的是 Home Stub 實例。

Hello h = home.create();

h.toString() 輸出:HelloBean_EOImpl_WLStub@8fa0d1
→ 證實獲得的是 Remote Stub 實例。

完整調用鏈路重構

第一個 RMI 循環(Home.create)

  1. 客戶端 JNDI 查詢 → 伺服器 JNDI 綁定 HelloBean_HomeImpl_WLStub
  2. 伺服器建立 Stub 實例,序列化回傳
  3. 客戶端獲 home(實為 Home Stub),呼叫 create()
  4. Stub 發送訊息 → 伺服器 HelloBean_HomeImpl_WLSkeleton 接收
  5. Skeleton 呼叫 HelloBean_HomeImpl.create()
  6. 第一個 RMI 循環完成。遠端物件:HelloBean_HomeImpl,介面:HelloHome,Stub/Skeleton 如上。

伺服器端內部遞移(無 RMI)

  1. HelloBean_HomeImpl.create() 呼叫 HelloBean_Impl.ejbCreate()
  2. 建立/分配 Bean 實例,建立 HelloBean_EOImpl_WLStub 實例
  3. 關鍵洞察:上一循環中 HelloBean_HomeImpl 是遠端物件,此處它轉身充當 HelloBean_Impl 的本地代理(同在伺服器 JVM,無 RMI 開銷)。

第二個 RMI 循環(Remote Stub 回傳與商業呼叫)

  1. HelloBean_EOImpl_WLStub 序列化回傳客戶端(主角從 Home 切換為 Remote)
  2. 客戶端:Hello h = home.create(); h.helloWorld();
  3. 實際呼叫 HelloBean_EOImpl_WLStub.helloWorld()
  4. Stub 發送訊息 → 伺服器 HelloBean_EOImpl_WLSkeleton 接收
  5. Skeleton 呼叫 HelloBean_EOImpl.helloWorld()
  6. 第二個 RMI 循環完成。遠端物件:HelloBean_EOImpl。

最終商業邏輯觸達

  1. HelloBean_EOImpl 轉身充當 HelloBean_Impl 的本地代理
  2. 呼叫 HelloBean_Impl.helloWorld()
  3. HelloBean_Impl 繼承 HelloBean(用戶編寫類)
  4. 終於調用到開發者編寫的商業邏輯代碼!

核心類別分工總覽

伺服器端主要調用類:HelloBean_Impl、HelloBean_HomeImpl、HelloBean_HomeImpl_WLSkeleton、HelloBean_EOImpl、HelloBean_EOImpl_WLSkeleton
客戶端主要調用類:HelloBean_HomeImpl_WLStub、HelloBean_EOImpl_WLStub(代碼中不直接出現,透過介面操作,Stub 由伺服器下發)

設計精華

EJB 以雙重 RMI 循環分離「尋找/建立」與「商業呼叫」關注點,容器實作類雙重身份(遠端物件與本地代理)消除分散式開銷,動態 Stub 下發簡化客戶端部署。這是分散式元件架構的經典範式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved