BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   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)
{
  // <<<ここにコードを記入する>>>
 
}
 
/*************************************************************
 
  関数名YourInterceptor コンストラクタ
 
  機能説明
 
***************************************************************/
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 page