質問

定義された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) メソッドは、適切なアカウントオブジェクトを返します。 Corbaと私はただ友人を助けているだけなので、そのような状況に対処するためのシンプルでありながら労働者のクラスのレイアウトをハッキングするのに役立つかもしれない、ある種のソリューション /例 /チュートリアルをお願いしたいと思います。

前もって感謝します。

役に立ちましたか?

解決

POA(ポータブルオブジェクトアダプター)に使用しているポリシーに本当に依存します。サーバーでrootpoaを使用していると仮定すると、次のことが必要です。

  1. アカウントオブジェクトの実装オブジェクトを作成します。これは通常呼ばれます 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のオプションのセットは非常に多く、それらをすべて説明するために本を必要とする非常に多くあるため:)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top