Borland C++ Builder (BCB) 提供多種精靈簡化 CORBA 伺服器開發。完整流程包含六大步驟:定義物件介面、使用伺服器精靈建立專案、編譯 IDL 產生框架/存根、使用物件實作精靈定義實作類別、完成類別實作、必要時修改介面並同步更新。此外可選擇將 IDL 註冊至介面倉庫與物件啟動守護程式 (OAD)。
使用 CORBA IDL (Interface Definition Language) 定義介面,參考概觀文件。IDL 檔案描述客戶端與伺服器通訊的契約,獨立於程式語言與平台。
操作路徑:File | New → Multitier 頁面選取 "CORBA Server" 圖示。
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 文件。
將 IDL 加入專案後,在程式碼編輯器或專案管理器中右鍵選擇 Compile,或選單 Project | Compile Unit。IDL 編譯器產生兩個檔案:
xxx_s.cpp/h:伺服器端框架類別 (Skeleton) 實作。xxx_c.cpp/h:客戶端存根類別 (Stub) 實作。專案選項控制:Options 對話框 CORBA 頁可設定:僅產生伺服器單元、是否包含 Tie 類別(委派模式)。委派模式適用於:已有 VCL 類別不可多重繼承、需與非 CORBA 應用共享實作類別。啟用時框架類別不直接實作介面,而是將呼叫委派給獨立實作類別。
操作路徑:File | New → Multitier 頁面選取 "CORBA Object Implementation"。
以 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) 以維持執行緒親和性。
修改 IDL 後,選擇 Edit | CORBA Refresh。系統重新編譯 IDL,彈出 Project Updates 對話框預覽變更。新增方法會自動加入實作類別,修改的方法簽章會更新。注意:刪除方法/屬性不會移除既有程式碼(保留但不導出);重新命名視為刪除+新增,舊程式碼保留並產生新方法骨架。
註冊非強制,但建議採用以增強互通性與資源管理彈性。