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

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

 Previous Next Contents Index View as PDF  

要求レベルのインターセプタのスタータ・ファイル

この付録では、インターセプタのインプリメントを開始する際に使用できる次のコードを示します。

このコードを使用する場合は、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);

};

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy