27.19.2 RequestInfoのメソッド
-
virtual CORBA::ULong request_id() = 0;
このメソッドは,アクティブなリクエストまたは応答シーケンスを一意に識別するIDを返します。リクエストまたは応答シーケンスが解決された場合は,IDが再使用されることもあります。
- 注
-
このIDはGIOPのrequest_idとは異なります。GIOPがトランスポート機能として使用されている場合,このIDとGIOPのrequest_idは必ずしも一致するとは限りません。また,これらが一致している必要はありません。
-
virtual char* operation() = 0;
このメソッドは,呼び出されているオペレーションの名前を返します。
-
virtual Dynamic::ParameterList* arguments() = 0;
このメソッドは,呼び出されているオペレーションの引数を格納する,Dynamic::ParameterListを返します。引数がない場合,この属性は長さが0のシーケンスとなります。
-
virtual Dynamic::ExceptionList* exceptions() = 0;
このメソッドは,オペレーション呼び出しで発生するユーザ例外のTypeCodeを定義するDynamic::ExceptionListを返します。ユーザ例外がない場合,この属性は長さが0のシーケンスとなります。
-
virtual CORBA::StringSequence* contexts() = 0;
このメソッドは,オペレーション呼び出しで渡される可能性のあるコンテキストを定義するCORBA::StringSequenceを返します。コンテキストがない場合,この属性は長さが0のシーケンスとなります。
-
virtual CORBA::StringSequence* operation_context() = 0;
このメソッドは,リクエストで送信されるコンテキストを定義するCORBA::StringSequenceを返します。
-
virtual CORBA::Any* result() = 0;
このメソッドは,オペレーション呼び出しの結果をCORBA::Any形式で返します。オペレーションのリターン型がvoidの場合,この属性は,TCKind値がtk_voidまたは値なしのタイプコードを格納するCORBA::Anyとなります。
-
virtual CORBA::Boolean response_expected() = 0;
このメソッドは,応答が期待されているかどうかを示すブール値を返します。
クライアントでは,response_expectedがfalseの場合,応答が返らないため,receive_reply()を呼び出せません。例外が発生した場合以外は,receive_other()を呼び出します。例外が発生した場合は,receive_exception()を呼び出します。
-
virtual CORBA::Short sync_scope() = 0;
このメソッドは,Messaging仕様で定義されている属性を返します。この属性は,response_expectedがfalseのときだけ有効です。response_expectedがtrueの場合,sync_scope()の値は不定です。この属性は,クライアントに制御が戻る前のリクエストの進捗状況を表します。この属性の値を次に示します。
-
Messaging::SYNC_NONE
-
Messaging::SYNC_WITH_TRANSPORT
-
Messaging::SYNC_WITH_SERVER
-
Messaging::SYNC_WITH_TARGET
サーバでは,すべてのスコープで,ターゲットオペレーション呼び出しの戻り値から応答が生成されますが,その応答はクライアントには返されません。クライアントに返されなくても応答は生成されているので,通常のサーバ側インタセプトポイント,つまり,receive_request_service_contexts(),receive_request(),send_reply(),またはsend_exception()に従います。
SYNC_WITH_SERVERとSYNC_WITH_TARGETに関しては,ターゲットオペレーションが呼び出される前に,サーバは空の応答をクライアントに返却します。サーバ側インタセプタはこの応答を受け取りません。
-
-
virtual CORBA::Short reply_status() = 0;
このメソッドは,オペレーションの呼び出し結果の状態を表す属性を返します。この属性の値を次に示します。
-
PortableInterceptor::SUCCESSFUL = 0
-
PortableInterceptor::SYSTEM_EXCEPTION = 1
-
PortableInterceptor::USER_EXCEPTION = 2
-
PortableInterceptor::LOCATION_FORWARD = 3
-
PortableInterceptor::TRANSPORT_RETRY = 4
クライアント側では,この属性の値は次のようになります。
-
インタセプトポイントreceive_replyの中では,この属性の値はSUCCESSFULだけです。
-
インタセプトポイントreceive_exceptionの中では,この属性の値はSYSTEM_EXCEPTIONまたはUSER_EXCEPTIONです。
-
インタセプトポイントreceive_otherの中では,この属性の値はSUCCESSFUL,LOCATION_FORWARD,またはTRANSPORT_RETRYのどれかです。SUCCESSFULは,非同期リクエストが正常にリターンしたことを意味します。LOCATION_FORWARDは,LOCATION_FORWARD状態が応答で返却されたことを意味します。TRANSPORT_RETRYは,トランスポート機能がリトライを指示したことを意味します。例えば,NEEDS_ADDRESSING_MODE状態のGIOP応答が該当します。
サーバ側では,この属性の値は次のようになります。
-
インタセプトポイントsend_replyの中では,この属性の値はSUCCESSFULだけです。
-
インタセプトポイントsend_exceptionの中では,この属性の値はSYSTEM_EXCEPTIONまたはUSER_EXCEPTIONです。
-
インタセプトポイントsend_otherの中では,この属性の値はSUCCESSFULまたはLOCATION_FORWARDです。SUCCESSFULは,非同期リクエストが正常にリターンしたことを意味します。LOCATION_FORWARDは,LOCATION_FORWARD状態が応答で返却されたことを意味します。
-
-
virtual CORBA::Object_ptr forward_reference() = 0;
reply_status()がLOCATION_FORWARDを返す場合,このメソッドは,リクエストフォワード先オブジェクトを返します。フォワードされるリクエストが実際に発生するかどうかはわかりません。
-
CORBA::ULong _id) = 0;
このメソッドは,リクエストのスコープにあるCurrentの指定スロットからデータをCORBA::Any形式で返します。
指定したスロットが設定されていない場合,TCKind値がtk_nullのタイプコードを格納するCORBA::Anyが返されます。
IDが割り当てられていないスロットを表す場合は,InvalidSlot例外が発生します。
スロットとPortableInterceptor::Currentの詳細については,「27.6 Current」を参照してください。
-
_id
取得するスロットのSlotId
-
-
virtual IOP::ServiceContext* get_request_service_context(
CORBA::ULong _id) = 0;
このメソッドは,リクエストに対応づけられたサービスコンテキストのうち,指定したIDのサービスコンテキストのコピーを返します。
リクエストのサービスコンテキストに,指定したIDのエントリが含まれていない場合は,標準マイナーコード26のBAD_PARAM例外が発生します。
-
_id
取得するスロットのIOP::ServiceContext
-
-
virtual IOP::ServiceContext* get_reply_service_context(
CORBA::ULong _id) = 0;
このメソッドは,応答に対応づけられたサービスコンテキストのうち,指定したIDのサービスコンテキストのコピーを返します。
応答のサービスコンテキストに,指定したIDのエントリが含まれていない場合は,標準マイナーコード26のBAD_PARAM例外が発生します。
-
_id
取得するスロットのIOP::ServiceContext
-