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

BCB 環境下 CORBA 伺服器開發完整指南:從 IDL 定義到物件實作

     編輯:關於C++

CORBA 伺服器開發流程概覽

Borland C++ Builder (BCB) 提供多種精靈簡化 CORBA 伺服器開發。完整流程包含六大步驟:定義物件介面、使用伺服器精靈建立專案、編譯 IDL 產生框架/存根、使用物件實作精靈定義實作類別、完成類別實作、必要時修改介面並同步更新。此外可選擇將 IDL 註冊至介面倉庫與物件啟動守護程式 (OAD)。

步驟 1:定義物件介面

使用 CORBA IDL (Interface Definition Language) 定義介面,參考概觀文件。IDL 檔案描述客戶端與伺服器通訊的契約,獨立於程式語言與平台。

步驟 2:使用 CORBA Server Wizard 建立專案

操作路徑:File | New → Multitier 頁面選取 "CORBA Server" 圖示。

  • 應用程式類型:可選 Console Application 或 Windows Application。Console 模式可選擇是否使用 VCL,不使用 VCL 的程式碼可移植至其他平台。
  • IDL 檔案處理:可加入現有 IDL 或建立空白 IDL。專案必須包含一或多個 IDL 定義介面。
  • 自動生成程式碼:精靈建立專案、加入 CORBA 函式庫、產生 ORB 與 BOA 初始化碼:
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
CORBA::BOA_var boa = orb->BOA_init(argc, argv);
// Console 模式額外生成:
boa->impl_is_ready();  // 進入訊息迴圈接收 BOA 訊息

Windows 應用程式則使用 Windows 訊息迴圈處理 CORBA 訊息。ORB 與 BOA 細節請參考 VisiBroker 文件。

步驟 3:編譯 IDL 產生框架與存根

將 IDL 加入專案後,在程式碼編輯器或專案管理器中右鍵選擇 Compile,或選單 Project | Compile Unit。IDL 編譯器產生兩個檔案:

  • xxx_s.cpp/h:伺服器端框架類別 (Skeleton) 實作。
  • xxx_c.cpp/h:客戶端存根類別 (Stub) 實作。

專案選項控制:Options 對話框 CORBA 頁可設定:僅產生伺服器單元、是否包含 Tie 類別(委派模式)。委派模式適用於:已有 VCL 類別不可多重繼承、需與非 CORBA 應用共享實作類別。啟用時框架類別不直接實作介面,而是將呼叫委派給獨立實作類別。

步驟 4:使用 CORBA Object Wizard 定義實作類別

操作路徑:File | New → Multitier 頁面選取 "CORBA Object Implementation"。

  • 列出專案中所有 IDL 定義的介面,選擇欲實作者。
  • 指定實作類別名稱、.h/.cpp 單元名稱。
  • 選擇繼承模式:直接繼承框架類別,或使用 Tie 類別(委派模式)。委派模式且啟用 VCL 時,可將實作類別設為資料模組 (Data Module) 以加入元件。
  • 可選擇啟動時自動具現化物件並命名,供客戶端定位綁定。
  • 精靈產生類別定義與空白方法本體,可勾選 "Show Updates" 預覽修改後再套用。

步驟 5:完成類別實作 CORBA 物件

以 account.idl 為例:

interface Account {
    float balance();
};

編譯 IDL (不含 Tie) 產生框架類別 _sk_Account,包含對應介面方法的純虛擬函式。Object Wizard 產生繼承框架類別的實作類別:

class AccountImpl : public _sk_Account {
protected:
    CORBA::Float _bal;  // 內部資料成員,不導出給客戶端
public:
    void Initialize(CORBA::Float startbal);  // 內部初始化方法
    AccountImpl(const char *object_name = NULL);
    CORBA::Float balance();
};

實作檔填寫方法本體:

AccountImpl::AccountImpl(const char *object_name) : _sk_Account(object_name) {}
CORBA::Float AccountImpl::balance() { return _bal; }
void AccountImpl::Initialize(CORBA::Float startbal) { _bal = startbal; }

執行緒安全與同步處理

CORBA 應用程式預設為多執行緒,實作方法必須防護執行緒衝突。VisiBroker 提供可移植同步類別 (vthread.h):VISMutex (互斥鎖)、VISCondition (條件變數)、VISRWLock (讀寫鎖)。

class A {
    VISMutex _mtx;
    // ...
    void AccessSharedMemory(...) {
        VISMutex_var lock(_mtx);  // RAII 鎖定,離開作用域自動釋放
        // 存取共享資料...
    }
};

若使用 VCL,BCB 亦提供多執行緒支援類別,參考線上說明 "Writing multi-threaded applications"。BOA 預設使用執行緒池,可改為逐會話執行緒策略 (thread-per-session) 以維持執行緒親和性。

步驟 6:修改介面並同步更新實作

修改 IDL 後,選擇 Edit | CORBA Refresh。系統重新編譯 IDL,彈出 Project Updates 對話框預覽變更。新增方法會自動加入實作類別,修改的方法簽章會更新。注意:刪除方法/屬性不會移除既有程式碼(保留但不導出);重新命名視為刪除+新增,舊程式碼保留並產生新方法骨架。

IDL 註冊:介面倉庫與 OAD

  • 介面倉庫 (Interface Repository):支援動態調用介面 (DII) 程式設計,方便其他開發者查看介面定義。
  • 物件啟動守護程式 (OAD):實現按需啟動,客戶端請求時才載入伺服器/具現化物件,節省伺服器資源。

註冊非強制,但建議採用以增強互通性與資源管理彈性。

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