本文繼承上期「為何使用 CORBA 與 Java」主題,通過一個簡易計算器服務實例,完整演示從 IDL 接口定義、IDL-to-Java 編譯、存根/骨架生成、到客戶端/服務端實現的分布式應用構建全流程。
CORBA 以接口定義語言(IDL)為起點,定義客戶端與服務端通訊契約。如同汽車標準化的油門、剎車、方向盤接口讓駕駛員無縫切換車型,IDL 屏蔽實現細節,定義「做什麼」而非「怎麼做」。
示例接口 calculator 僅含一個 add(in long x, in long y) 方法,返回兩長整數之和。IDL 關鍵字映射:
module → Java package(命名空間)interface → Java interface(抽象類型)long → Java int(至少 4 字節)in → 參數傳遞方向:客戶端 → 服務端(影響 ORB 封裝/解封裝策略)
手動編寫 CORBA 網絡管道代碼枯燥且易錯。IDL 編譯器(如 Orbacus 的 jidl、Visibroker)依 CORBA 2.3 規範自動生成:
IDLEntity,提供類型標記narrow() 靜態方法,將 org.omg.CORBA.Object 窄化為具體類型引用
文中推薦兩款符合 CORBA 2.3 規範的產品:
編譯命令示例:jidl --output-dir c:\_work\corbasem calculator.idl,生成文件置於 CLASSPATH 指定目錄。
圖 1 展示完整請求鏈路:客戶端 → Stub → ORB(封裝/網絡傳輸)→ Skeleton → 服務端實現。ORB 為核心中介,處理封裝、網絡傳輸、解封裝、線程調度等複雜性,實現位置透明與語言無關性。
本例雖簡單,但完整呈現 CORBA 開發核心循環:定義契約 → 生成管道 → 實現業務邏輯 → 部署運行。IDL 編譯器強制封裝規範,生成代碼處理底層網絡細節,開發者專注業務實現。後續章節將深入服務端實現模式(繼承 vs 委託)、異常處理、命名服務綁定等進階主題。