Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド

[目次][索引][前へ][次へ]

18.6 AccountManagerオブジェクトのインプリメント

Accountオブジェクトと同様に,AccountManagerインタフェースもメソッドを一つしか宣言しません。しかし,AccountManagerImplオブジェクトのopenメソッドにはアカウント名パラメタを指定できるので,invokeメソッドが実行する処理は少しだけ複雑になります。コードサンプル18-3(C++)および18-4(Java)に,AccountManagerImplオブジェクトのinvokeメソッドのインプリメンテーションを示しています。

このメソッドは最初に,リクエストされたオペレーションの名前が「open」であるかどうかを調べます。この名前が一致しない場合は,BAD_OPERATION例外が発生します。AccountManagerオブジェクトが複数のメソッドを提供する場合には,invokeメソッドは可能なすべてのオペレーション名について検査し,適切な内部メソッドを使用してオペレーション要求を処理する必要があります。

<この節の構成>
(1) 入力パラメタを処理する
(2) リターン値を設定する

(1) 入力パラメタを処理する

AccountManagerImplオブジェクトのinvokeメソッドがオペレーション要求の入力パラメタを処理するために使用する手順は,次のとおりです。

  1. オペレーション用のパラメタリストを保持するNVListを生成します。
  2. 予期されるパラメタごとにAnyオブジェクトを生成し,TypeCodeとパラメタ型(ARG_IN,ARG_OUT,ARG_INOUTのどれか)を設定してNVListに追加します。
  3. ServerRequestオブジェクトのargumentsメソッドを起動してNVListを引き渡し,リスト内のすべてのパラメタの値を更新します。

openメソッドはアカウント名パラメタを予期しているので,ServerRequest内のパラメタを入れるNVListオブジェクトが生成されます。NVListクラスは,一つ以上のNamedValueオブジェクトが入っているパラメタリストをインプリメントします。NVListクラスとNamedValueクラスについては,「17. 動的起動インタフェースの使用」を参照してください。

アカウント名を入れるAnyオブジェクトが生成されます。このAnyは,引数名を「name」,パラメタ型をARG_INに設定してNVListに追加されます。

NVListが初期化されたあと,リスト内のすべてのパラメタ値を取得するために,ServerRequestオブジェクトのargumentsメソッドが呼び出されます。

argumentsメソッドを呼び出したあと,NVListはVisiBroker ORBに所有されます。したがって,オブジェクトインプリメンテーションがNVList内のARG_INOUTパラメタを変更すると,その変更はVisiBroker ORBにも自動的に認識されます。このNVListを呼び出し側で解放してはなりません。

入力引数用にNVListを構築する代わりに,VisiBroker ORBオブジェクトのcreate_operation_listメソッドを使用することもできます。このメソッドはOperationDefオブジェクトを受け取り,必要なすべてのAnyオブジェクトを使用して完全に初期化されたNVListオブジェクトを返します。適切なOperationDefオブジェクトは,「16. インタフェースリポジトリの使用」で説明したIRから取得できます。

(2) リターン値を設定する

ServerRequestオブジェクトのargumentsメソッドを起動したあと,nameパラメタの値を抽出して新しいAccountオブジェクトの生成に使用できます。新規に生成されたAccountオブジェクトを入れるためのAnyオブジェクトが生成され,ServerRequestオブジェクトのset_resultメソッドを起動することによってそのAnyオブジェクトが呼び出し側へ返されます。