bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo CORBA 要求レベルのインターセプタ > 要求レベルのインターセプタのスタータ・ファイル |
Tuxedo CORBA 要求レベルのインターセプタ
|
要求レベルのインターセプタのスタータ・ファイル
この付録では、インターセプタのインプリメントを開始する際に使用できる次のコードを示します。
このコードを使用する場合は、YourInterceptor をインプリメントしているインターセプタの名前に置き換えてください。
スタータ・インプリメンテーション・コード
#if defined(WIN32)
#include <windows.h>
#endif
#include <ctype.h>
#include "YourInterceptor.h"
// クラスのクリーンアップ -- 推奨
class Cleanup
{
public:
Cleanup() {}
~Cleanup()
{
// <<<ここにコードを記入する>>>
}
};
static Cleanup CleanupOnImageExit;
#define SECURITY_BUFFSIZE 100
#if defined(WIN32)
// 標準 DLL 処理の提案
BOOL WINAPI DllMain( HANDLE hDLL,
DWORD dwReason,
LPVOID lpReserved )
{
switch( dwReason )
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
// オペレーションが正常に実行されたという情報を返す
return( TRUE );
}
#endif /* WIN32 */
/*************************************************************
関数名 YourInterceptorInit
機能説明
初期化中に ORB によって呼び出される初期化ルーチンです。
このルーチンは、サポートしている RequestLevelInterceptor
クラスのインスタンスを作成して返します。
注記 インターセプタ・ライブラリは、複数の初期化エントリ・ポイントを
指定することによって、複数セットのインターセプタをサポートできます。
この場合、各初期化エントリを個別に ORB に登録する必要があります。
また、1 種類のインターセプタのみを指定することもできます。つまり、
クライアントのみ、またはターゲットのみを指定できます。
***************************************************************/
#ifdef WIN32
extern "C" __declspec(dllexport) void __cdecl
#else
extern "C" void
#endif
YourInterceptorInit(
CORBA::ORB_ptr TheORB,
RequestLevelInterceptor::ClientRequestInterceptor ** ClientPtr,
RequestLevelInterceptor::TargetRequestInterceptor ** TargetPtr,
CORBA::Boolean * RetStatus)
{
// <<<ここにコードを記入する>>>
}
/*************************************************************
関数名 YourInterceptorClient constructor
機能説明
***************************************************************/
YourInterceptorClient::YourInterceptorClient(CORBA::ORB_ptr TheOrb)
{
// この次の行は有用だが、絶対に必要なものではない
m_orb = TheOrb;
//<<<ここにコードを記入する>>>
}
/*************************************************************
関数名 YourInterceptorClient::shutdown
機能説明
shutdown オペレーションは、インターセプタの
インプリメンテーションに、インターセプタがシャットダウンされている
ことを通知するために、ORB によって使用されます。
ORB は、オペレーションから ORB に制御が返されると、
インターセプタのインスタンスを破棄します。
***************************************************************/
Interceptors::ShutdownReturnStatus YourInterceptorClient::shutdown(
Interceptors::ShutdownReason reason,
CORBA::Exception_ptr & excep_val)
{
// 次の各行は、単なる提案例。必要に応じて置換する
Interceptors::ShutdownReturnStatus ret_status = Interceptors::SHUTDOWN_NO_EXCEPTION;
switch (reason)
{
case Interceptors::ORB_SHUTDOWN:
// <<<ここにコードを記入する>>>
break;
case Interceptors::CONNECTION_ABORTED:
// <<<ここにコードを記入する>>>
break;
case Interceptors::RESOURCES_EXCEEDED:
// <<<ここにコードを記入する>>>
break;
}
return ret_status;
}
/*************************************************************
関数名 YourInterceptorClient::id
機能説明
id アクセサ・オペレーションは、ベンダによって割り当てられたインターセプタの
ID を文字列値として取得するために ORB によって使用されます。この属性は、
主に ORB によって呼び出されたインターセプタのオペレーションのデバッグ
とトレーシングに使用されます。
***************************************************************/
CORBA::String YourInterceptorClient::id()
{
// <<<ここにコードを記入する>>>
// 次の行は、想定される有用なインプリメンテーション
return CORBA::string_dup("YourInterceptorClient");
}
/*************************************************************
関数名 YourInterceptorClient::exception_occurred
機能説明
例外が発生すると、exception_occurred オペレーションが要求レベルの
インターセプタのインプリメンテーションに対して呼び出されます。
これは、そのインターセプタの <xxx>_response メソッドの代わりに
呼び出されるものです。ORB がこのオペレーションを呼び出すことにより、
インターセプタのインプリメンテーションは、管理していた、
ある要求に固有の一切の状態を、クリーンアップできるようになります。
***************************************************************/
void YourInterceptorClient::exception_occurred (
const RequestLevelInterceptor::ReplyContext & reply_context,
CORBA::Exception_ptr excep_val)
{
// <<<ここにコードを記入する>>>
}
/*************************************************************
関数名 YourInterceptorClient::client_invoke
機能説明
このオペレーションは、ターゲット・オブジェクトが異なる
アドレス領域にあるか、同じアドレス領域にあるかに関係なく、
呼び出しがターゲット・オブジェクトに送信されると ORB に
よって呼び出されます。
***************************************************************/
Interceptors::InvokeReturnStatus YourInterceptorClient::client_invoke (
const RequestLevelInterceptor::RequestContext & request_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr request_arg_stream,
CORBA::DataOutputStream_ptr reply_arg_stream,
CORBA::Exception_ptr & excep_val)
{
// 次の行は提案例。以下の最終行と関連して機能する
Interceptors::InvokeReturnStatus ret_status = Interceptors::INVOKE_NO_EXCEPTION;
// <<<ここにコードを記入する>>>
return ret_status;
}
/*************************************************************
関数名 YourInterceptorClient::client_response
機能説明
このオペレーションは、イニシエータがターゲット・
オブジェクトと異なるアドレス領域にあるか、同じアドレス
領域にあるかに関係なく、呼び出しへの応答が要求の
イニシエータによって受信されると ORB によって
呼び出されます。
***************************************************************/
Interceptors::ResponseReturnStatus YourInterceptorClient::client_response (
const RequestLevelInterceptor::ReplyContext & reply_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr arg_stream,
CORBA::Exception_ptr & excep_val)
{
// 次の行は提案例。以下の最終行と関連して機能する
// これ以外の一般的な使用方法の提案については、例を参照
Interceptors::ResponseReturnStatus ret_status = Interceptors::RESPONSE_NO_EXCEPTION;
// <<<ここにコードを記入する>>>
return ret_status;
}
/*************************************************************
関数名 YourInterceptorTarget constructor
機能説明
この関数は、ターゲット・インターセプタのインスタンスを構成します。
この例では、セキュリティ・インターセプタのインプリメントに
使用できるデータ・メンバを示します。
***************************************************************/
YourInterceptorTarget::YourInterceptorTarget(CORBA::ORB_ptr TheOrb) :
m_orb(TheOrb), // 提案例
m_security_current(0), // セキュリティ・インターセプタの提案例
m_attributes_to_get(0) // セキュリティ・インターセプタの提案例
{
// <<<ここにコードを記入する>>>
}
/*************************************************************
関数名 YourInterceptorTarget::shutdown
機能説明
shutdown オペレーションは、インターセプタの
インプリメンテーションに、インターセプタがシャットダウンされている
ことを通知するために、ORB によって使用されます。
ORB は、オペレーションから ORB に制御が返されると、
インターセプタのインスタンスを破棄します。
***************************************************************/
Interceptors::ShutdownReturnStatus YourInterceptorTarget::shutdown(
Interceptors::ShutdownReason reason,
CORBA::Exception_ptr & excep_val)
{
// <<<ここにコードを記入する>>>
// 次の各行は、単なる提案例。必要に応じて置換する
Interceptors::ShutdownReturnStatus ret_status = Interceptors::SHUTDOWN_NO_EXCEPTION;
switch (reason)
{
case Interceptors::ORB_SHUTDOWN:
// <<<ここにコードを記入する>>>
break;
case Interceptors::CONNECTION_ABORTED:
// <<<ここにコードを記入する>>>
break;
case Interceptors::RESOURCES_EXCEEDED:
// <<<ここにコードを記入する>>>
break;
}
return ret_status;
}
/*************************************************************
関数名 YourInterceptorTarget::id
機能説明
id アクセサ・オペレーションは、ベンダによって割り当てられたインターセプタの
ID を文字列値として取得するために ORB によって使用されます。この属性は、
主に ORB によって呼び出されたインターセプタのオペレーションのデバッグ
とトレーシングに使用されます。
***************************************************************/
CORBA::String YourInterceptorTarget::id()
{
// <<<ここにコードを記入する>>>
// 次の行は、想定される有用なインプリメンテーション
return CORBA::string_dup("YourInterceptorTarget");
}
/*************************************************************
関数名 YourInterceptorTarget::exception_occurred
機能説明
例外が発生すると、exception_occurred オペレーションが要求レベルの
インターセプタのインプリメンテーションに対して呼び出されます。
これは、そのインターセプタの <xxx>_response メソッドの代わりに
呼び出されるものです。ORB がこのオペレーションを呼び出すことにより、
インターセプタのインプリメンテーションは、管理していた、
ある要求に固有の一切の状態を、クリーンアップできるようになります。
***************************************************************/
void YourInterceptorTarget::exception_occurred (
const RequestLevelInterceptor::ReplyContext & reply_context,
CORBA::Exception_ptr excep_val)
{
// <<<ここにコードを記入する>>>
}
/*************************************************************
関数名 YourInterceptorTarget::target_invoke
機能説明
このオペレーションは、ターゲット・オブジェクトが
異なるアドレス領域にあるか、
同じアドレス領域にあるかに関係なく、
呼び出しがターゲット・オブジェクトによって
受信されると ORB によって呼び出されます。
***************************************************************/
Interceptors::InvokeReturnStatus YourInterceptorTarget::target_invoke (
const RequestLevelInterceptor::RequestContext & request_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr request_arg_stream,
CORBA::DataOutputStream_ptr reply_arg_stream,
CORBA::Exception_ptr & excep_val)
{
// 次の行は提案例。以下の最終行と関連して機能する
Interceptors::InvokeReturnStatus ret_status = Interceptors::INVOKE_NO_EXCEPTION;
// <<<ここにコードを記入する>>>
return ret_status;
}
/*************************************************************
関数名 YourInterceptorTarget::target_response
機能説明
このオペレーションは、イニシエータがターゲット・
オブジェクトと異なるアドレス領域にあるか、同じアドレス
領域にあるかに関係なく、呼び出しへの応答が要求の
イニシエータに送信されると ORB によって
呼び出されます。
***************************************************************/
Interceptors::ResponseReturnStatus YourInterceptorTarget::target_response (
const RequestLevelInterceptor::ReplyContext & reply_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr arg_stream,
CORBA::Exception_ptr & excep_val)
{
// 次の行は提案例。以下の最終行と関連して機能する
Interceptors::ResponseReturnStatus ret_status =
Interceptors::RESPONSE_NO_EXCEPTION;
//<<<ここにコードを記入する>>>
return ret_status;
}
/*************************************************************
関数名 YourInterceptorTarget destructor
機能説明
***************************************************************/
YourInterceptorTarget::~YourInterceptorTarget()
{
// <<<ここにコードを記入する>>>
}
スタータ・ヘッダ・ファイル・コード
#include <CORBA.h>
#include <RequestLevelInterceptor.h>
#include <security_c.h> // セキュリティ用
class YourInterceptorClient : public virtual RequestLevelInterceptor::ClientRequestInterceptor
{
private:
YourInterceptorClient() {}
CORBA::ORB_ptr m_orb;
public:
YourInterceptorClient(CORBA::ORB_ptr TheOrb);
~YourInterceptorClient() {}
Interceptors::ShutdownReturnStatus shutdown(
Interceptors::ShutdownReason reason,
CORBA::Exception_ptr & excep_val);
CORBA::String id();
void exception_occurred (
const RequestLevelInterceptor::ReplyContext & reply_context,
CORBA::Exception_ptr excep_val);
Interceptors::InvokeReturnStatus client_invoke (
const RequestLevelInterceptor::RequestContext & request_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr request_arg_stream,
CORBA::DataOutputStream_ptr reply_arg_stream,
CORBA::Exception_ptr & excep_val);
Interceptors::ResponseReturnStatus client_response (
const RequestLevelInterceptor::ReplyContext & reply_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr arg_stream,
CORBA::Exception_ptr & excep_val);
};
class YourInterceptorTarget : public virtual RequestLevelInterceptor::TargetRequestInterceptor
{
private:
YourInterceptorTarget() {}
CORBA::ORB_ptr m_orb;
SecurityLevel1::Current_ptr m_security_current; // セキュリティ用
Security::AttributeTypeList * m_attributes_to_get; // セキュリティ用
public:
YourInterceptorTarget(CORBA::ORB_ptr TheOrb);
~YourInterceptorTarget();
Interceptors::ShutdownReturnStatus shutdown(
Interceptors::ShutdownReason reason,
CORBA::Exception_ptr & excep_val);
CORBA::String id();
void exception_occurred (
const RequestLevelInterceptor::ReplyContext & reply_context,
CORBA::Exception_ptr excep_val);
Interceptors::InvokeReturnStatus target_invoke (
const RequestLevelInterceptor::RequestContext & request_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr request_arg_stream,
CORBA::DataOutputStream_ptr reply_arg_stream,
CORBA::Exception_ptr & excep_val);
Interceptors::ResponseReturnStatus target_response (
const RequestLevelInterceptor::ReplyContext & reply_context,
RequestLevelInterceptor::ServiceContextList_ptr service_context,
CORBA::DataInputStream_ptr arg_stream,
CORBA::Exception_ptr & excep_val);
};
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |