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

Apusic 應用伺服器與 CORBA 互操作實戰:RMI-IIOP 橋接、IDL 生成、CORBA 客戶端訪問 EJB 全流程

     編輯:Java 相關知識

互操作架構基礎

Apusic 基於 RMI-IIOP 協議實現分散式物件遠程訪問,天然支援與 CORBA 物件互調。完整實現 CORBA-EJB 映射規範,涵蓋四大核心映射:

  1. EJB 介面 → CORBA IDL 介面
  2. JNDI 名稱 → CORBA 命名服務
  3. EJB ↔ CORBA 事務傳播
  4. EJB ↔ CORBA 安全上下文傳播

開發運行環境

層面伺服器端客戶端
作業系統Windows 2000 ServerWindows 2000 Professional
JDK1.4.21.4.2
應用伺服器Apusic 3.0—

核心流程:CORBA 客戶端訪問部署於 Apusic 的 EJB

步驟 1:開發並部署 EJB (Stateless Session Bean)

// 遠程介面
public interface Hello extends javax.ejb.EJBObject {
    String sayHello(String name) throws java.rmi.RemoteException;
}

// Home 介面
public interface HelloHome extends javax.ejb.EJBHome {
    Hello create() throws java.rmi.RemoteException, javax.ejb.CreateException;
}

// Bean 實作
public class HelloBean implements javax.ejb.SessionBean {
    public String sayHello(String name) {
        String result = "hello, " + name;
        System.out.println("invoke sayHello(): " + result);
        return result;
    }
    // ejbCreate/Activate/Passivate/Remove/setSessionContext 空實作
}

部署至 Apusic,JNDI 名稱綁定為 ejb/CORBAClientSample。

步驟 2:使用 RMI 編譯器 rmic -idl 生成 IDL

rmic -idl -noValueMethods \
  -classpath %APUSIC_HOME%/lib/apusic.jar;../ejb/build \
  -d idl \
  samples.ejb.Hello samples.ejb.HelloHome
  • -noValueMethods:不生成值型別方法 (簡化 IDL)
  • -d idl:輸出目錄
  • 產生 Hello.idl、HelloHome.idl

步驟 3:使用 idlj 為 Java CORBA 客戶端生成存根

idlj -emitAll -i ./idl -i %JAVA_HOME%/lib \
  -fclient \
  -pkgPrefix java apusic \
  -pkgPrefix javax apusic \
  -pkgPrefix samples apusic \
  -td src \
  ./idl/samples/ejb/Hello.idl

idlj -emitAll -i ./idl -i %JAVA_HOME%/lib \
  -fclient \
  -pkgPrefix java apusic \
  -pkgPrefix javax apusic \
  -pkgPrefix samples apusic \
  -td src \
  ./idl/samples/ejb/HelloHome.idl

關鍵參數:-pkgPrefix 為 java/javax/samples 套件加前綴 apusic,避免與核心 API 衝突。

步驟 4:修復 JDK 1.4.2 idlj 已知 Bug

生成的 _Exception.java、CreateException.java、RemoveException.java 中的 _read、_write 方法有缺陷,必須手工註釋或刪除 這兩個方法。

步驟 5:編譯客戶端程式碼

javac -d ../build -sourcepath ./ apusic.samples.ejb*.java
javac -d ../build -sourcepath ./ CorbaClient.java

僅需編譯 apusic.samples.ejb 套件與主程式,javac 會自動編譯依賴類別。

步驟 6:客戶端主程式實作

import org.omg.CORBA.*;
import org.omg.CosNaming.*;
import apusic.samples.ejb.*;

public class CorbaClient {
    public static void main(String[] args) {
        // 1. 初始化 ORB,傳入 Apusic 位址埠
        ORB orb = ORB.init(args, null);

        // 2. 解析命名服務
        NamingContextExt nc = NamingContextExtHelper.narrow(
            orb.resolve_initial_references("NameService")
        );

        // 3. 查找 EJB Home (JNDI 名稱映射至 CORBA 命名)
        HelloHome home = HelloHomeHelper.narrow(
            nc.resolve_str("ejb/CORBAClientSample")
        );

        // 4. 建立 EJB 並呼叫業務方法
        Hello hello = home.create();
        String str = hello.sayHello("apusic,corba client");
        System.out.println(str);  // 輸出: hello, apusic,corba client

        System.exit(0);
    }
}

步驟 7:啟動客戶端驗證

java CorbaClient -ORBInitialHost localhost -ORBInitialPort 6888
# 6888 為 Apusic IIOP 監聽埠 (預設)
# 輸出: hello, apusic,corba client

關鍵技術細節與避坑指南

挑戰說明解決方案
Value Type 映射Java 序列化物件 ↔ CORBA 值型別實作 CustomValueFactory、使用 rmic -idl 正確生成值型別 IDL
集合類型映射Java Collection ↔ CORBA SequenceIDL 中定義 sequence<Type>,確保雙向轉換正確
事務傳播JTA 事務 ↔ OTS (Object Transaction Service)Apusic 實現事務上下文傳播,需配置 TransactionFactory
安全傳播JAAS Subject ↔ CSIv2 (Common Secure Interop)配置 Principal 權杖傳播、SSL 互信
異常映射EJB Exception ↔ CORBA System/User Exception定義 IDL 例外對應、ExceptionHelper 正確 narrow
idlj BugJDK 1.4.2 生成代碼缺陷手工修復 _read/_write,或升級 JDK/使用第三方 IDL 編譯器

Apusic 預設配置優勢

  • 預設使用 CORBA 命名服務 作為 JNDI 提供者,無額外配置即可讓 CORBA 客戶端查找 EJB
  • 完整實現 CORBA-EJB 映射規範,事務/安全上下文在多伺服器實例與 CORBA 客戶端間自動傳播
  • RMI-IIOP 協議棧 經生產驗證,效能與穩定性優於早期版本

適用場景與架構定位

  1. 整合既有 CORBA 系統:主機端 CORBA 服務、C++/CORBA 客戶端需訪問新建 Java EE 業務
  2. 異構環境分散式應用:Java EE、CORBA、.NET (透過 IIOP.NET) 混合部署
  3. 漸進式遷移:CORBA 系統逐步遷移至 Java EE,過渡期雙棧共存
  4. 跨語言服務調用:Python (omniORB)、C++ (TAO/ORBacus) 客戶端調用 EJB

總結

Apusic 與 CORBA 互操作展示了「標準協議 (RMI-IIOP/IIOP) + 標準映射 (CORBA-EJB) + 成熟產品實現」的威力。雖開發者需具備 CORBA 規範、IDL 編譯、異常映射、事務/安全傳播等深度技能,但對於「保護既有 CORBA 資產投資、構建異構企業級服務總線」的戰略需求,此方案提供了可靠、標準、生產就緒的技術路徑。核心成功要素:IDL 正確生成、存根正確編譯、命名服務正確映射、上下文傳播正確配置 四大支柱缺一不可。

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