0

次のような定義済みのidlファイルがあります。

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 を知らず、友人を助けているだけなので、そのような状況に対処するためのシンプルでありながら実用的なクラス レイアウトをハックするのに役立つ、何らかの解決策/例/チュートリアルを求めたいと思います。

前もって感謝します。

4

1 に答える 1

1

これは、POA (Portable Object Adapter) に使用しているポリシーに大きく依存します。サーバーで RootPOA を使用していると仮定すると、次のことを行う必要があります。

  1. Account オブジェクトの実装オブジェクトを作成します。これは通常、AccountImplまたはAccountServant銀行の従業員の名前で見られるように呼ばれます。

    AccountServant as = new AccountServant(accNr);

  2. オブジェクトを POA に登録する必要があります。これもまた、POA 用に選択したポリシーに関係しています。デフォルトのルート POA を使用:

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

  3. Account生成された IDL コンパイラを使用して正しい型に絞り込みAccountHelperます。

    Account acc = AccountHelper.narrow(o);

  4. 返却する

    return acc;

AccountServantこのコードは、口座番号を最初の引数として受け入れる Java オブジェクトのコンストラクターを作成済みであることを前提としています。BankServant新しく作成したオブジェクトを登録する POA への参照も提供する必要がありAccountます。

チュートリアルがたくさんあります。たとえば、POA の一連のオプションは非常に多く、すべてを説明するには本が必要なので、これを参照してください :)。

于 2010-12-01T23:13:57.900 に答える