Web 早期 CGI/HTTP 無狀態模型導致每次請求需重複驗證,無法維持會話狀態。CORBA 提供:
| 元件 | 職責 |
|---|---|
| ORB (Object Request Broker) | 物件通訊軟體總線,唯一必備元件 |
| CORBA Services | 系統級服務:安全、命名、交易 |
| CORBA Facilities | 應用級服務:複合文件等 |
| Business Objects | 領域物件:飛機、銀行帳戶等 |
module ORBQuery {
interface ORBInfo {
string GetName(in long index);
string GetVendor(in long index);
string GetOS(in long index);
string GetLanguages(in long index);
string GetURL(in long index);
};
};
idl2java ORBInfo.idl
產生 8 個檔案:ORBInfo.java (介面)、_st_ORBInfo.java (Client Stub)、_sk_ORBInfo.java (Server Skeleton)、Helper/Holder/Operations/Tie/Example 輔助類別。
// ORBQuery.java - 實作介面,內含 ORB 廠商資料陣列
class ORBQuery extends _sk_ORBInfo {
String[][] ORBVendors = { ... }; // 5 家廠商 x 5 屬性
// 實作 5 個 GetXxx 方法回傳陣列資料
}
// Server.java - 向 ORB 註冊
public class Server {
public static void main(String[] args) {
ORB orb = ORB.init();
BOA boa = orb.BOA_init();
ORBQuery serverQuery = new ORBQuery("ORBInfo");
boa.obj_is_ready(serverQuery);
boa.impl_is_ready(); // 等待請求
}
}
// 初始化 ORB (Applet 環境)
ORB orb = ORB.init(this);
// 繫結遠端物件
ORBInfo query = ORBInfoHelper.bind(orb, "ORBInfo");
// 呼叫遠端方法
String name = query.GetName(0);
| 維度 | CORBA | DCOM | RMI |
|---|---|---|---|
| 語言中立 | ✓ 全支援 | ✓ (ODL) | ✗ 僅 Java |
| 平台中立 | ✓ 所有主流 OS | ✗ 僅 Win95/NT (擴展中) | ✓ JVM 平台 |
| 廠商中立 | ✓ OMG 標準 | ✗ Microsoft 單一控制 | ✗ Sun 單一控制 |
| 互操作性 | ✓ IIOP 跨 ORB | ✗ | ✗ |
| 瀏覽器部署 | ✓ Java ORB 動態下載 | ✗ 需 IE + Win | ✓ |
| 效能 | 優 (C++ 伺服器) | 良 | 較差 (JVM 開銷) |
| 成熟度 | 高 (1994 年 2.0 版) | 低 | 中 |
| 成本 | 商業 ORB 收費 | Win 用戶免費 | 免費 (JDK 內建) |