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

EJB 遠端呼叫核心機制深度解析:從 RMI 到 WebLogic 實戰(一)

     編輯:Java 相關知識

類別檔案結構對比:RMI vs EJB

普通 RMI:至少 4 個 class——遠端物件、遠端介面、Stub、Skeleton。
EJB:至少 10 個 class——Bean 類、容器實作 Bean 類、Remote/Home 介面、容器實作介面類、Stub/Skeleton 各二。
關鍵差異:開發者僅需編寫 3 個類(Bean 類、Remote、Home),其餘 7 個由容器工具生成/動態產生,具體表現因 App Server 而異。

WebLogic 具體生成機制

  • ejbc 編譯期生成:Bean 容器實作類、Home/Remote 容器實作類(共 3 個,可見於 JAR)
  • 部署期動態生成位元碼:Home/Remote 容器實作類的 Stub/Skeleton(共 4 個,不可見)

一次完整遠端 EJB 呼叫的雙重 RMI 循環

第一階段:JNDI 查找 Home → 取得 Home Stub

  1. 客戶端 JNDI 查找
  2. 伺服器端 JNDI 綁定的是 Home 容器實作類的 Stub
  3. 伺服器建立 Stub 實例,序列化傳送給客戶端(無需客戶端預存 Stub 類,區別於傳統 RMI)
  4. 客戶端獲得 Home Stub 實例

第二階段:Home.create() → 建立 EJB 實例 → 取得 Remote Stub

  1. 客戶端呼叫 home.create()(實為 Stub.create())
  2. 第二次 RMI:伺服器端 Home Skeleton 接收,轉呼叫 Home 容器實作類的 create()
  3. Home 實作類呼叫 Bean 容器實作類的 ejbCreate(),建立/分配 EJB 實例
  4. 將 Remote 容器實作類的 Stub 實例序列化回傳客戶端

第三階段:商業方法呼叫

  1. 客戶端對 Remote Stub 呼叫商業方法
  2. 第三次 RMI:伺服器端 Remote Skeleton 接收,轉呼叫 Remote 容器實作類
  3. Remote 實作類轉呼叫 Bean 容器實作類,完成商業邏輯執行

透過 Hello World 實例重構理解

傳統 RMI 客戶端代碼:操作介面 Hello,實質操作 Hello_Stub,需 Hello.class + Hello_Stub.class。
EJB 客戶端代碼:同樣操作 Hello 介面,但 Stub 由伺服器動態下發,客戶端僅需 Hello.class + HelloHome.class。

WebLogic 10 大類別實例清單

角色類別名稱來源
Bean 類HelloBean用戶編寫
Bean 容器實作HelloBean_Implejbc 生成
Home 介面HelloHome用戶編寫
Home 容器實作HelloBean_HomeImplejbc 生成
Home StubHelloBean_HomeImpl_WLStub部署期動態生成
Home SkeletonHelloBean_HomeImpl_WLSkeleton部署期動態生成
Remote 介面Hello用戶編寫
Remote 容器實作HelloBean_EOImplejbc 生成
Remote StubHelloBean_EOImpl_WLStub部署期動態生成
Remote SkeletonHelloBean_EOImpl_WLSkeleton部署期動態生成

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

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