2010-12-01 27 views
0

需要幫助,我有一個定義的IDL文件,它看起來像這樣:CORBA IDL + + Java的:寫作僕人

module Banking { 
    typedef string Transactions[5]; 
    typedef long AccountId; 

    interface Account { 
     exception InsufficientFunds {}; 

     readonly attribute double balance; 
     long lodge(in double amount); 
     long withdraw(in double amount) raises (InsufficientFunds); 
     readonly attribute Transactions transactions; 
    }; 

    interface Bank { 
     long accountCount(); 
     double totalMoney(); 
     Account account(in AccountId accNr); 
    }; 
}; 

我與IDLJ編譯。我定義了一個BankServant,客戶使用它來與服務器通信,並且我有一個工作程序,幾乎實現了所有的方法。我唯一的問題是,我不知道如何實現account(in AccountId accNr)方法,這反過來會返回適當的Account對象。由於我不知道CORBA,而且我只是在幫助一位朋友,所以我想問一些解決方案/示例/ tutorials,這些解決方案/示例/ tutorials可以幫助我破解一個簡單但工作的佈局來處理這種情況。

預先感謝您。

回答

1

這實際上取決於您用於POA(便攜式對象適配器)的策略。假設您在服務器中使用RootPOA,您必須:

  1. 爲Account對象創建一個實現對象。正如我在銀行僕人的名字中所看到的那樣,這通常被稱爲AccountImplAccountServant

    AccountServant as = new AccountServant(accNr);

  2. 您必須先註冊的POA的對象。這又一次與您爲POA選擇的政策有關。使用默認的根POA:

    org.omg.CORBA.Object o = rootPOA.servant_to_reference(as);

  3. 縮小它使用IDL編譯器生成AccountHelper正確Account類型:

    Account acc = AccountHelper.narrow(o);

  4. 返回它

    return acc;

此代碼假定您已經爲AccountServant java對象編寫了一個構造函數,該對象接受帳號作爲其第一個參數。您必須提供BankServant也參考您要在其中註冊新創建的Account對象的POA。

有很多教程。例如參見this one,因爲POA的選項集非常多,需要一本書來解釋它們全部:)。

+0

非常感謝 - 我不想全面瞭解CORBA,因爲這應該是一個15分鐘的幫助任務,但即使閱讀了一些教程,我也沒有幾個問題。 – zeroDivisible 2010-12-02 05:17:52