bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo CORBA 要求レベルのインターセプタ

 Previous Next Contents Index View as PDF  

ClientRequestInterceptor::client_response

概要

RequestLevelInterceptor::ClientRequestInterceptor インターフェイスをサポートするインターセプタのインプリメンテーションに対して呼び出されます。

C++ バインディング

virtual Interceptors::ResponseReturnStatus 
client_response(
const ReplyContext & reply_context,
ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr arg_stream,
CORBA::Exception_ptr & excep_val ) = 0;

パラメータ

reply_context

応答が行われているコンテキストについての情報が含まれた ReplyContext へのリファレンスです。

service_context

ターゲット・オブジェクトによる要求処理の結果として受信される、サービス・コンテキスト情報が含まれた ServiceContextList へのポインタです。

注記 : BEA Tuxedo 8.0 では、このパラメータの値は常に nil オブジェクトとなります。

arg_stream

インターセプタのインプリメンテーションがオペレーションの応答パラメータ値の取得に使用できる、DataInputStream へのポインタです。

次の表は、ReplyContext オブジェクトに含まれるステータスに基づいて DataInputStream オブジェクトに client_response メソッドが返す値を特定したものです。


 

注記 : 例外には、文字列と、その後に続く任意の例外メンバが含まれます。文字列には、例外のリポジトリ ID が含まれます。例外メンバは、struct と同じように渡されます。システム例外には、2 つの unsigned long 型メンバ、マイナー・コード、および完了ステータスが含まれます。

excep_val

エラーを報告するためにインターセプタが例外を返すことのできる場所に対するリファレンスです。このパラメータの使用は、REPLY_EXCEPTION のステータスが返された場合のみ有効です。ORB が、excep_val パラメータのためのメモリ管理の役割を持つことに注意してください。

例外

特にありません。

説明

client_response オペレーションは、RequestLevelInterceptor::ClientRequestInterceptor インターフェイスをサポートするインターセプタのインプリメンテーションに対して呼び出されます。このオペレーションは、イニシエータがターゲット・オブジェクトと異なるアドレス領域にあるか、同じアドレス領域にあるかに関係なく、呼び出しへの応答が要求のイニシエータによって受信されると ORB によって呼び出されます。

戻り値

RESPONSE_NO_EXCEPTION

インターセプタが要求された処理をすべて正常に実行済みであり、ORB は要求に対する応答の処理を続行して、要求のイニシエータに送信すべきであることを示します。

RESPONSE_EXCEPTION

インターセプタがエラーに遭遇したことを示します。ORB に例外を報告するのに、パラメータ excep_val が使用されます。クライアントに戻る過程でまだ呼び出されていないインターセプタはすべて、exception_occurred オペレーションを ORB によって呼び出されて、要求の処理が失敗したことを通知されます。

 


RequestLevelInterceptor::
TargetRequestInterceptor インターフェイス

すべての要求レベルのインターセプタの基本インターフェイスです。これは RequestLevelInterceptor::RequestInterceptor インターフェイスから直接継承されます。このインターフェイスには、ターゲット側のすべての要求レベルのインターセプタでサポートされる、オペレーションおよび属性のセットが含まれます。

コード リスト 8-7 OMG IDL 定義

// ファイル: RequestLevelInterceptor.idl

#ifndef _REQUEST_LEVEL_INTERCEPTOR_IDL
#define _REQUEST_LEVEL_INTERCEPTOR_IDL

#include <orb.idl>
#include <Giop.idl>
#include <Interceptors.idl>

#pragma prefix “beasys.com”

module RequestLevelInterceptor
{
local TargetRequestInterceptor : RequestInterceptor
{
InvokeReturnStatus
target_invoke(
in RequestContext request_context,
in ServiceContextList service_context,
in CORBA::DataInputStream request_arg_stream,
in CORBA::DataOutputStream reply_arg_stream,
out ExceptionValue excep_val
);

ResponseReturnStatus
target_response(
in ReplyContext reply_context,
in ServiceContextList service_context,
in CORBA::DataInputStream arg_stream,
out ExceptionValue excep_val
);
};
};
#endif /* _REQUEST_LEVEL_INTERCEPTOR_IDL */

オペレーション _duplicate_narrow、および _nil のインプリメンテーションは、BEA Tuxedo 製品内の CORBA ORB によって提供される、 CORBA::LocalBase インターフェイスのインプリメンテーションから間接的に継承されます。

コード リスト 8-8 C++ 宣言

#ifndef _RequestLevelInterceptor_h
#define _RequestLevelInterceptor_h

#include <CORBA.h>
#include <IOP.h>
#include <GIOP.h>
#include <Interceptors.h>

class OBBEXPDLL RequestLevelInterceptor
{
public:
class TargetRequestInterceptor;
typedef TargetRequestInterceptor *
TargetRequestInterceptor_ptr;

class OBBEXPDLL TargetRequestInterceptor :
public virtual RequestInterceptor
{
public:
static TargetRequestInterceptor_ptr
_duplicate(TargetRequestInterceptor_ptr obj);
static TargetRequestInterceptor_ptr
_narrow(TargetRequestInterceptor_ptr obj);
inline static TargetRequestInterceptor_ptr
_nil() { return 0; }

virtual Interceptors::InvokeReturnStatus target_invoke(
const RequestContext & request_context,
ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr request_arg_stream,
CORBA::DataOutputStream_ptr reply_arg_stream,
CORBA::Exception_ptr & excep_val ) = 0;

virtual Interceptors::ResponseReturnStatus
target_response(
const ReplyContext & reply_context,
ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr arg_stream,
CORBA::Exception_ptr & excep_val ) = 0;

protected:
TargetRequestInterceptor(CORBA::LocalBase_ptr obj = 0) { }
virtual ~TargetRequestInterceptor(){ }

private:
TargetRequestInterceptor( const TargetRequestInterceptor&)
{ }
void operator=(const TargetRequestInterceptor&) { }
}; //クラス TargetRequestInterceptor
};
#endif /* _RequestLevelInterceptor_h */

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy