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

Java CORBA 入門:從 IDL 到 Client/Server 完整範例

     編輯:Java 程式設計入門

前言

CORBA (Common Object Request Broker Architecture) 透過 IDL (Interface Definition Language) 定義跨語言介面,Java IDL 提供標準 API 實現分散式物件呼叫。本文以最簡單的 "Hello World" 為例,示範 IDL 定義、Stub/Skeleton 產生、Server/Client 實作完整流程。

步驟 1:定義 IDL 檔案

// hello.idl
module HelloApp {
    interface Hello {
        string sayHello();
    };
};
  • module 對應 Java 套件
  • interface 定義遠端方法

步驟 2:產生 Stub/Skeleton

# JDK 內建 idlj 工具(舊版為 idltojava)
idlj -fall hello.idl

產生檔案結構:

  • HelloApp/Hello.java:客戶端介面
  • HelloApp/HelloHelper.java:窄化輔助類
  • HelloApp/_HelloImplBase.java:伺服端繼承基類
  • HelloApp/HelloHolder.java:out/inout 參數持有者

步驟 3:實作伺服端

// HelloServant.java
import HelloApp.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;

public class HelloServant extends _HelloImplBase {
    public String sayHello() {
        return "Hello CORBA World!!";
    }
}

// HelloServer.java
public class HelloServer {
    public static void main(String[] args) {
        try {
            // 1. 初始化 ORB
            ORB orb = ORB.init(args, null);

            // 2. 建立 Servant 並註冊至 ORB
            HelloServant helloRef = new HelloServant();
            orb.connect(helloRef);

            // 3. 取得命名服務根上下文
            org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
            NamingContext ncRef = NamingContextHelper.narrow(objRef);

            // 4. 綁定物件參考
            NameComponent nc = new NameComponent("Hello", "");
            NameComponent[] path = {nc};
            ncRef.rebind(path, helloRef);

            System.out.println("HelloServer ready...");
            // 5. 等待客戶端呼叫
            java.lang.Object sync = new java.lang.Object();
            synchronized (sync) { sync.wait(); }
        } catch (Exception e) { e.printStackTrace(); }
    }
}

步驟 4:實作客戶端

// HelloClient.java
import HelloApp.*;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;

public class HelloClient {
    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("Hello", "");
            NameComponent[] path = {nc};
            Hello helloRef = HelloHelper.narrow(ncRef.resolve(path));

            System.out.println(helloRef.sayHello());
        } catch (Exception e) { e.printStackTrace(); }
    }
}

步驟 5:編譯與執行

# 1. 編譯所有 Java 檔
javac *.java HelloApp/*.java

# 2. 啟動命名服務(JDK 內建 tnameserv 或 orbd)
tnameserv -ORBInitialPort 1050 &

# 3. 啟動 Server
java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost

# 4. 執行 Client
java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

輸出:Hello CORBA World!!

關鍵概念補充

  • ORB (Object Request Broker):通訊中介,負責尋址、封裝/解封裝參數
  • Naming Service:類似 DNS,將邏輯名稱對應至物件參考
  • _ImplBase vs POA:早期繼承 _HelloImplBase,現代應用建議使用 PortableServer.POA 獲得更好可攜性
  • IDL 對應規則:string→String、sequence→陣列、exception→Java Exception

總結

Java CORBA 透過標準 IDL 實現語言中立的分散式呼叫,雖然現代微服務多採用 REST/gRPC,但在異構舊系統整合、電信/金融核心系統中仍有應用。掌握 IDL→Java 映射、ORB 初始化、命名服務綁定/查找四大步驟,即可快速建立 CORBA 應用原型。

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