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

CORBA 與 Java IDL 應用程式設計:從核心架構到「中國,早上好!」實戰範例

     編輯:J2EE

CORBA 發展歷程與核心

  • OMG 1989 年由 8 家大廠創立,現 800+ 會員
  • 核心:ORB (Object Request Broker) —— 開放軟體總線,提供網路、OS、語言三重無關性
  • CORBA 是中介軟體規範,非實體軟體;開發者使用第三方 ORB 或 IDL 實作

CORBA 應用模型:請求流轉全過程

  1. 客戶持有物件參考,呼叫物件方法
  2. 遠端物件:參考指向 Stub(Java 中為類)
  3. Stub 透過 ORB 定位伺服器機器,請求該機 ORB 連線
  4. Stub 傳送參考與參數給伺服器端 Skeleton
  5. Skeleton 轉換格式,呼叫物件實作
  6. 結果沿原路返回客戶端

全程客戶不知物件位置、實作細節、ORB 種類。ORB 間透過 IIOP (Internet Inter-ORB Protocol) 通訊。

IDL (Interface Definition Language) 角色

  • 定義物件介面:型別、方法、參數、例外
  • IDL 編譯器轉換為特定語言(Java、C++ 等)
  • 自動產生 Stub/Skeleton 檔案

Java IDL (idltojava) 簡介

  • JDK 1.2 內建 CORBA 支援
  • Java IDL = idltojava 編譯器 + 類庫 ORB
  • 支援暫態 CORBA 物件(伺服器處理期間有效)
  • 非完整平台軟體,但提供良好底層通訊支援,實作 OMG 基礎 ORB 功能

實戰範例:「中國,早上好!」客戶/伺服器應用

1. 定義 IDL 介面


// Greeting.idl
module GreetingApp {
    interface Greeting {
        string sayHello();
    };
};

2. 編譯產生 Java 程式碼


prompt> idltojava Greeting.idl

產生:Greeting.java (介面)、GreetingHelper.java、GreetingHolder.java、_GreetingImplBase.java (Skeleton 基底)、_GreetingStub.java (Client Stub)

3. 實作伺服器端物件


// GreetingImpl.java
import GreetingApp.*;
import org.omg.CORBA.*;
public class GreetingImpl extends _GreetingImplBase {
    public String sayHello() {
        return "中國,早上好!";
    }
}

4. 開發伺服器主程式


// GreetingServer.java
import GreetingApp.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class GreetingServer {
    public static void main(String[] args) {
        try {
            ORB orb = ORB.init(args, null);
            GreetingImpl greetingRef = new GreetingImpl();
            orb.connect(greetingRef);

            org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
            NamingContext ncRef = NamingContextHelper.narrow(objRef);

            NameComponent nc = new NameComponent("Greeting", "");
            NameComponent[] path = {nc};
            ncRef.rebind(path, greetingRef);

            System.out.println("Greeting Server ready...");
            java.lang.Object sync = new java.lang.Object();
            synchronized(sync) { sync.wait(); }
        } catch (Exception e) { e.printStackTrace(); }
    }
}

5. 開發客戶端程式


// GreetingClient.java
import GreetingApp.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class GreetingClient {
    public static void main(String[] args) {
        try {
            ORB orb = ORB.init(args, null);
            org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
            NamingContext ncRef = NamingContextHelper.narrow(objRef);

            NameComponent nc = new NameComponent("Greeting", "");
            NameComponent[] path = {nc};
            Greeting greetingRef = GreetingHelper.narrow(ncRef.resolve(path));

            String message = greetingRef.sayHello();
            System.out.println("Server response: " + message);
        } catch (Exception e) { e.printStackTrace(); }
    }
}

6. 執行步驟

  1. 啟動命名服務:tnameserv (預設埠 900)
  2. 啟動伺服器:java GreetingServer
  3. 啟動客戶端:java GreetingClient

總結

Java IDL 讓 Java 開發者以原生方式實作 CORBA 分散式應用,透過 IDL 定義介面、idltojava 產生骨架、命名服務發現物件,完整展示跨平台、跨語言的分散式物件互操作基礎流程。

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