bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo CORBA 要求レベルのインターセプタ > 要求レベルのインターセプタの API |
Tuxedo CORBA 要求レベルのインターセプタ
|
要求レベルのインターセプタの API
この章では、要求レベルのインターセプタのインプリメントに使用する次のインターフェイスについて説明します。
これらのインターフェイスは、位置制約付きオブジェクトです。リファレンスをその位置 (プロセス) の外部に渡そうとしたり、CORBA ORB object_to_string オペレーションを使用して、このインターフェイスをサポートしているオブジェクトを外部化しようとしたりすると、CORBA MARSHAL システム例外 (CORBA::MARSHAL) が発生します。
インターセプタの階層構造
要求レベルのインターセプタは、2 つのインターフェイスに分かれており、クライアント側とターゲット側で別個に機能します。次の図では、BEA Tuxedo 製品でサポートしている要求レベルのインターセプタの継承の階層構造を示します。
未使用インターフェイスについての注意事項 RequestLevelInterceptor インターフェイスから派生したクラスのオペレーションのためのメソッド・シグニチャには、次のインターフェイスのパラメータが含まれます。
これらのインターフェイスは BEA Tuxedo 製品では使用しません。しかし BEA Tuxedo 製品では、将来のリリースでこれらのインターフェイスのインプリメンテーションが提供されたときに CORBA アプリケーションを再コンパイルしなくてよいように、これらを定義してあります。ORB は常に実際の引数に対する nil オブジェクトを渡します。この引数を使用しようとしないでください。プロセスが深刻なエラーにより停止する可能性があります。
Interceptors::Interceptor インターフェイス
Interceptors::Interceptor インターフェイスは、要求レベルのインターセプタをはじめとする、すべての種類のインターセプタの基本インターフェイスとして定義されます。このインターフェイスには、全種類のインターセプタでサポートされる、オペレーションおよび属性のセットが含まれます。Interceptors::Interceptor インターフェイスは、抽象インターフェイスとして定義されるため、インターフェイスのインスタンスはインスタンス化できません。
コード リスト 8-1 Interceptors::Interceptor インターフェイスの OMG IDL
// ファイル: Interceptors.idl
#ifndef _INTERCEPTORS_IDL
#define _INTERCEPTORS_IDL
#pragma prefix "beasys.com"
module Interceptors
{
native ExceptionValue;
local Interceptor
{
readonly attribute string id; // インターセプタの識別子
// インターセプタのシャットダウン時に ORB によって呼び出される
ShutdownReturnStatus shutdown(
in ShutdownReason reason,
out ExceptionValue excep_val
);
}; // 位置制約付き
};
#endif /* _INTERCEPTORS_IDL */
オペレーション _duplicate、_narrow、および _nil のインプリメンテーションは、BEA Tuxedo 製品の CORBA ORB によって提供される CORBA::LocalBase インターフェイスのインプリメンテーションから継承されます。
コード リスト 8-2 Interceptors::Interceptor インターフェイスの C++ 宣言
#ifndef _INTERCEPTORS_H
#define _INTERCEPTORS_H
#include <string.h>
#include <CORBA.h>
class OBBEXPDLL Interceptors
{
public:
class Interceptor;
typedef Interceptor * Interceptor_ptr;
enum InvokeReturnStatus
{
INVOKE_NO_EXCEPTION,// 通常どおり進行する
REPLY_NO_EXCEPTION, // 進行を停止し、応答処理を開始する
REPLY_EXCEPTION // 進行を停止し、例外を返す
};
enum ResponseReturnStatus
{
RESPONSE_NO_EXCEPTION, // 通常どおり進行する
RESPONSE_EXCEPTION
};
enum ShutdownReturnStatus
{
SHUTDOWN_NO_EXCEPTION,
SHUTDOWN_EXCEPTION
};
enum ShutdownReason
{
ORB_SHUTDOWN,
CONNECTION_ABORTED,
RESOURCES_EXCEEDED
};
struct Version
{
CORBA::Octet major_version;
CORBA::Octet minor_version;
};
typedef Version * Version_ptr;
//+
// すべてのインターセプタの抽象基本インターフェイス
//-
class OBBEXPDLL Interceptor : public virtual CORBA::LocalBase
{
public:
static Interceptor_ptr _duplicate(Interceptor_ptr obj);
static Interceptor_ptr _narrow(Interceptor_ptr obj);
static Interceptor_ptr _nil();
virtual ShutdownReturnStatus
shutdown( ShutdownReason reason,
CORBA::Exception_ptr & excep_val) = 0;
virtual CORBA::String id() = 0;
protected:
Interceptor();
virtual ~Interceptor();
};
};#endif /* _INTERCEPTORS_H */
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |