Enterprise JavaBeans (EJB) 作為 J2EE 平台的核心組件模型,其強大的分布式通訊能力並非憑空而來,而是建立在 CORBA (Common Object Request Broker Architecture) 與 RMI-IIOP (Remote Method Invocation over Internet Inter-ORB Protocol) 這兩大支柱之上。理解它們之間的關係,是掌握 EJB 進階應用與異構系統整合的關鍵。
CORBA 由 OMG (Object Management Group) 制定,是一個與語言、平台無關的分布式對象標準。許多 J2EE 的核心概念——如對象請求代理 (ORB)、接口定義語言 (IDL)、命名服務、事務服務等——均源自 CORBA。EJB 容器在底層實現時,多數商業產品(如 WebLogic, WebSphere)均基於 CORBA 協議構建,利用其成熟的 ORB 實現對象的跨進程、跨機器透明調用。
為何我們仍需關注 CORBA?
然而,CORBA 也有短板:OMG 標準化流程緩慢,導致新特性支持滯後;學習曲線陡峭,API 複雜;不同廠商的 ORB 產品間可能存在互操作性差異。
Java RMI (Remote Method Invocation) 是 JDK 1.1 引入的純 Java 分布式對象模型,語法簡潔,完美支持 Java 對象序列化與垃圾回收。但傳統 RMI 使用專有協議 JRMP (Java Remote Method Protocol),無法與非 Java 系統互通。
RMI-IIOP 的誕生解決了這一痛點:它保留了 RMI 簡潔的編程模型(接口繼承 java.rmi.Remote,拋出 RemoteException),卻在傳輸層採用標準的 IIOP 協議。這意味著:
當 RMI 客戶端調用基於 IIOP 的遠程對象時,流程如下:
此過程對開發者完全透明,實現了「本地/遠程透明性」。
儘管 RMI-IIOP 統一了協議,但語義差異仍存:
| 差異點 | RMI | CORBA | 解決方案 |
|---|---|---|---|
| 參數傳遞 | 基本類型按值,遠程對象按引用 | 統一按值 (Value Types) 或按引用 | OMG Objects-by-Value 規範:實現 Serializable 按值,實現 Remote 按引用 |
| 分布式 GC | 基於租約 (Lease) 的 DGC | 無標準化分布式 GC | 應用層自行管理生命週期 |
| 類型轉換 | Java 強制轉型 | 需 narrow() 安全縮窄 | Java-to-IDL Mapping 規範:生成 Helper 類提供 narrow() |
| IDL 依賴 | 無需 IDL | 核心依賴 IDL | Java-to-IDL 映射工具自動生成 IDL |
EJB 規範強制要求容器支持 RMI-IIOP 作為遠程調用協議。早期 EJB 容器多為「基於 CORBA 的 EJB 服務端」,即底層 ORB 直接管理 EJB 對象;後期出現「純粹的 EJB 服務端」,僅實現 RMI-IIOP 協議棧,不暴露 CORBA API。無論哪種架構,標準的 javax.rmi.PortableRemoteObject 與 javax.rmi.CORBA 包均為開發者提供了跨協議編程的統一入口。
CORBA 提供了堅實的異構分布式基礎設施,RMI-IIOP 則為 Java 開發者穿上了輕裝上陣的戰袍。掌握二者的協同原理,不僅能應對複雜的系統整合場景,更能深入理解 EJB 容器的底層運作機制,在性能調優與故障診斷中游刃有餘。