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

Java CORBA 入門:從 IDL 定義到 Client/Server 完整實作

     編輯:Java 相關知識

為什麼選擇 CORBA?

在分散式物件架構中,CORBA (Common Object Request Broker Architecture) 提供跨語言、跨平台的遠端物件呼叫能力。相較於微軟的 DCOM 侷限於 Windows,CORBA 適合異構環境。本文以 Inprise VisiBroker ORB 為例,示範如何用 Java 建立簡單的計數器服務,涵蓋 IDL 定義、Stub/Skeleton 生成、伺服端與客戶端實作、部署測試全流程。

環境建置

  1. 安裝 JDK 1.1(避免與 Java 2 內建 ORB 衝突)。
  2. 下載並安裝 VisiBroker ORB,包含 vbjorb.jar、vbjapp.jar、vbjtools.jar。
  3. 啟動 osagent 服務(預設埠 14000),作為物件目錄代理。

步驟 1:定義 IDL 介面

建立 Counter.idl,宣告模組 Counter 與介面 Count,包含 increment() 與 getCounter() 兩個操作。

// Counter.idl
module Counter {
    interface Count {
        void increment();
        long getCounter();
    };
};

步驟 2:編譯 IDL 生成 Java 類別

執行 idl2java Counter.idl,將產生:

  • 客戶端輔助類別:CountHelper.java、_st_Count.java (Stub)
  • 伺服端骨架類別:_CountImplBase.java、_sk_Count.java (Skeleton)

步驟 3:實作伺服端邏輯

繼承 _CountImplBase 實作業務邏輯,私有計數器 c。

// CountImpl.java
public class CountImpl extends Counter._CountImplBase {
    private int c = 0;
    public CountImpl(String name) { super(name); }
    public CountImpl() { super(); }
    public void increment() { c++; System.out.println(c); }
    public int getCounter() { return c; }
}

伺服端主程式初始化 ORB 與 BOA,註冊物件名稱為 "test"。

// Server.java
public class Server {
    public static void main(String[] args) {
        try {
            org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
            org.omg.CORBA.BOA boa = orb.BOA_init();
            Counter.Count count = new CountImpl("test");
            boa.obj_is_ready(count);
            System.out.println(count + " ready.");
            boa.impl_is_ready();
        } catch (Exception e) { e.printStackTrace(); System.exit(1); }
    }
}

步驟 4:撰寫客戶端程式

客戶端初始化 ORB,透過 CountHelper.bind() 取得遠端物件參考,呼叫方法並印出結果。建議加入完整的例外處理。

// Client.java
public class Client {
    public static void main(String[] args) {
        Counter.Count count = null;
        org.omg.CORBA.ORB orb = null;
        try {
            orb = org.omg.CORBA.ORB.init();
            count = Counter.CountHelper.bind(orb, "test");
            count.increment();
            System.out.println("Current Count = " + count.getCounter());
        } catch (Exception e) { e.printStackTrace(); System.exit(1); }
        finally {
            try { if (orb != null) orb.shutdown(); } catch (Exception ignored) {}
        }
    }
}

步驟 5:編譯與執行測試

# 編譯
vbjc Counter.idl
vbjc Server.java CountImpl.java
vbjc Client.java

# 啟動服務
osagent &
vbj Server

# 執行客戶端
osfind
vbj Client

重複執行 Client 可觀察計數器遞增,驗證狀態保持於伺服端。

進階:Applet 呼叫 CORBA 服務

同樣原理可應用於 Applet,於 init() 初始化 ORB 並綁定物件,按鈕事件觸發 increment(),paint() 顯示最新計數。編譯後以 appletviewer 執行 HTML 頁面即可。

核心機制總結

  • ORB (Object Request Broker) 處理網路通訊、參數封裝/解封裝、方法分派。
  • OSAGENT 充當命名服務,協助 Client 定位 Server 物件。
  • 同網段廣播尋址;跨網段需指定主機名或 IP 直連。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved