目次 前 次 PDF


CORBA API

CORBA API
この章では、C++でのCORBAコア・メンバー関数およびそれらの拡張のOracle Tuxedo実装について説明します。また、擬似オブジェクトおよびC++クラスとのそれらの関係についても説明します。擬似オブジェクトは、ネットワーク経由で転送できないオブジェクト参照です。擬似オブジェクトは他のオブジェクトと似ていますが、ORBが所有するため拡張できません。
注意:
この章に記載されている情報の一部は、『Common Object Request Broker: Architecture and Specification』からの引用です。Revision 2.4.2 (Object Management Group (OMG)により、2001年2月に発行)OMGの許可を得て使用されています。
Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、Tuxedo 9.xではサポートされなくなりました。 Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBのすべてのテキスト・リファレンスや関連するサンプル・コードは、以下の場合にのみ使用してください。
サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートやマニュアルは提供していません。
グローバル・クラス
次のOracle Tuxedoクラスは、スコープ内においてグローバルです。
上記のクラスには、Oracle Tuxedoの開発で使用する定義済の型、クラス、および関数が含まれています。
CORBAクラスには、CORBAで定義されている、オブジェクト・リクエスト・ブローカ(ORB)を使用する際に不可欠なクラス、データ型およびメンバー関数が含まれます。CORBAのOracle Tuxedo拡張は、Tobj C++クラスに含まれます。Tobjクラスには、CORBAの拡張としてOracle Tuxedoに用意されているデータ型、ネストされたクラスおよびメンバー関数が含まれます。
Oracle Tuxedo製品でCORBAデータ型およびメンバー関数を使用するには、CORBA::接頭辞が必要です。たとえば、Longの場合はCORBA::Longとなります。同様に、Oracle Tuxedo製品でTobjのネストされたクラスとメンバー関数を使用するには、Tobj::接頭辞が必要です。たとえば、FactoryFinderの場合はTobj::FactoryFinderとなります。
擬似オブジェクト
擬似オブジェクトは、CORBAクラス内にあるローカル・クラスとして表されます。擬似オブジェクトおよび対応するメンバー関数には、ネストされたクラス構造を使用して名前が付けられます。たとえば、ORBオブジェクトの場合はCORBA::ORB、Currentオブジェクトの場合はCORBA::Currentとなります。
Anyクラスのメンバー関数
ここでは、Anyクラスの各メンバー関数について説明します。
これらのメンバー関数のC++へのマッピングは次のとおりです:
class CORBA
{
class Any
{
public:
Any ();
Any (const Any&);
Any (TypeCode_ptr tc, void *value, Boolean release =
CORBA_ FALSE);
~Any ();
Any & operator=(const Any&);

void operator<<=(Short);
void operator<<=(UShort);
void operator<<=(Long);
void operator<<=(ULong);
void operator<<=(Float);
void operator<<=(Double);
void operator<<=(const Any&);
void operator<<=(const char*);
void operator<<=(Object_ptr);
void operator<<=(from_boolean);
void operator<<=(from_char);
void operator<<=(from_octet);
void operator<<=(from_string);
Boolean operator>>=(Short&) const;
Boolean operator>>=(UShort&) const;
Boolean operator>>=(Long&) const;
Boolean operator>>=(ULong&) const;
Boolean operator>>=(Float&) const;
Boolean operator>>=(Double&) const;
Boolean operator>>=(Any&) const;
Boolean operator>>=(char*&) const;
Boolean operator>>=(Object_ptr&) const;
Boolean operator>>=(to_boolean) const;
Boolean operator>>=(to_char) const;
Boolean operator>>=(to_octet) const;
Boolean operator>>=(to_object) const;
Boolean operator>>=(to_string) const;

TypeCode_ptr type()const;
void replace(TypeCode_ptr, void *, Boolean);
void replace(TypeCode_ptr, void *);
const void * value() const;
};
}; //CORBA
CORBA::Any::Any()
概要
Anyオブジェクトを作成します。
C++バインディング
CORBA::Any::Any()
引数
なし。
説明
これは、CORBA::Anyクラスのデフォルトのコンストラクタです。型tc_nullおよび値0 (ゼロ)のTypeCodeでAnyオブジェクトを作成します。
戻り値
なし。
CORBA::Any::Any(const CORBA::Any & InitAny)
概要
別のAnyオブジェクトのコピーであるAnyオブジェクトを作成します。
C++バインディング
CORBA::Any::Any(const CORBA::Any & InitAny)
引数
InitAny
CORBA::Anyを参照してコピーします。
説明
これは、CORBA::Anyクラスのコピー・コンストラクタです。このコンストラクタは、渡されるAnyのTypeCode参照を複製します。
実行されるコピーの種類は、コピーされるAnyオブジェクトのreleaseフラグによって決まります。releaseCORBA_TRUEと評価された場合、コンストラクタはパラメータの値をディープ・コピーします。releaseCORBA_FALSEと評価された場合、コンストラクタはパラメータの値をシャロー・コピーします。シャロー・コピーを使用すると、メモリー割当ての最適化をより高度に制御できます。ただし、呼出し側は、解放済メモリーをAnyが使用していないことを確認する必要があります。
戻り値
なし。
CORBA::Any::Any(TypeCode_ptr TC, void * Value, Boolean Release)
概要
TypeCodeおよび値でAnyオブジェクトを作成します。
C++バインディング
CORBA::Any::Any(TypeCode_ptr TC, void * Value, Boolean Release)
引数
TC
作成する型を指定した、TypeCode擬似オブジェクト参照へのポインタ。
Value
Anyオブジェクトの作成で使用するデータへのポインタ。この引数のデータ型は、指定されたTypeCodeと一致していなければなりません。
Release
Value引数で指定されたメモリーの所有権をAnyが想定するかどうかを指定します。ReleaseCORBA_TRUEの場合、Anyは所有権を想定します。ReleaseCORBA_FALSEの場合、Anyは所有権を想定しません。この場合、Value引数が指すデータは、割当て時または破棄時に解放されません。
説明
このコンストラクタは、型保障でないAnyインタフェースで使用されます。指定されたTypeCodeオブジェクト参照を複製してから、Anyオブジェクト内の値が指すデータを挿入します。
戻り値
なし。
CORBA::Any::~Any()
概要
Anyのデストラクタ。
C++バインディング
CORBA::Any::~Any()
引数
なし。
説明
このデストラクタは、ReleaseフラグがCORBA_TRUEに指定されている場合にCORBA::Anyが保持しているメモリーを解放します。また、Anyに含まれるTypeCode擬似オブジェクト参照も解放します。
戻り値
なし。
CORBA::Any & CORBA::Any::operator=(const CORBA::Any & InitAny)
概要
Anyの代入演算子。
C++バインディング
CORBA::Any & CORBA::Any::operator=(const CORBA::Any & InitAny)
引数
InitAny
代入で使用するAnyへの参照。代入で使用するAnyによって、AnyValueのメモリーの所有権を想定するかどうかが決まります。ReleaseCORBA_TRUEの場合、Anyは所有権を想定してInitAny引数の値をディープ・コピーします。ReleaseがCORBA_FALSEの場合、AnyInitAny引数の値をシャロー・コピーします。
説明
これは、Anyクラスの代入演算子です。このメンバー関数のメモリー管理は、Releaseフラグの現在の値によって決まります。また、Releaseフラグの現在の値によって、現在のメモリーが割当て前に解放されるかどうかも決まります。現在のReleaseフラグがCORBA_TRUEの場合、Anyは前に保持していたすべての値を解放します。現在のReleaseフラグがCORBA_FALSEの場合、Anyは前に保持していた値を解放しません。
戻り値
InitAnyのコピーを保持するAnyを返します。
void CORBA::any::operator<<=()
概要
Anyの型保障挿入演算子。
C++バインディング
void CORBA::Any::operator<<=(CORBA::Short Value)
void CORBA::Any::operator<<=(CORBA::UShort Value)
void CORBA::Any::operator<<=(CORBA::Long Value)
void CORBA::Any::operator<<=(CORBA::Ulong Value)
void CORBA::Any::operator<<=(CORBA::Float Value)
void CORBA::Any::operator<<=(CORBA::Double Value)
void CORBA::Any::operator<<=(const CORBA::Any & Value)
void CORBA::Any::operator<<=(const char * Value)
void CORBA::Any::operator<<=(Object_ptr Value)
引数
Value
Anyに挿入する型固有の値。
説明
この挿入メンバー関数は、型保障挿入を実行します。Anyに前の値があり、ReleaseフラグがCORBA_TRUEの場合、メモリーの割当てを解除し、前のTypeCodeオブジェクト参照を解放します。Valueパラメータを使用して渡された値をコピーしてAnyに新しい値を挿入します。これにより、適切なTypeCodeリファレンスが複製されます。
戻り値
なし。
CORBA::Boolean CORBA::Any::operator>>=()
概要
Anyの型保障抽出演算子。
C++バインディング
CORBA::Boolean CORBA::Any::operator>>=(
CORBA::Short & Value) const
CORBA::Boolean CORBA::Any::operator>>=(
CORBA::UShort & Value) const
CORBA::Boolean CORBA::Any::operator>>=(
CORBA::Long & Value) const
CORBA::Boolean CORBA::Any::operator>>=(
CORBA::Ulong & Value) const
CORBA::Boolean CORBA::Any::operator>>=(
CORBA::Float & Value) const
CORBA::Boolean CORBA::Any::operator>>=(
CORBA::Double & Value) const
CORBA::Boolean CORBA::Any::operator>>=(CORBA::Any & Value) const
CORBA::Boolean CORBA::Any::operator>>=(char * & Value) const
CORBA::Boolean CORBA::Any::operator>>=(Object_ptr & Value) const
引数
Value引数は、Anyオブジェクトに格納されている値の出力を受け取る関連オブジェクトへの参照です。
説明
この抽出メンバー関数は、型保障抽出を実行します。Anyオブジェクトに指定の型が格納されている場合、このメンバー関数は、Anyのポインタを出力参照値Valueに代入し、CORBA_TRUEを返します。Anyに適切な型が格納されていない場合は、CORBA_FALSEを返します。ストレージはAnyオブジェクトによって所有および管理されているため、呼出し側はストレージの解放または削除を試行しないでください。Value引数は、Anyオブジェクトに格納されている値の出力を受け取る関連オブジェクトへの参照です。Anyオブジェクトに適切な型が格納されていない場合、値は変更されません。
戻り値
Anyに特定の型の値が格納されていた場合はCORBA_TRUEAnyに特定の型の値が格納されていなかった場合はCORBA_FALSE
CORBA::Any::operator<<=()
概要
Anyの型保障挿入演算子。
C++バインディング
void CORBA::Any::operator<<=(from_boolean Value)
void CORBA::Any::operator<<=(from_char Value)
void CORBA::Any::operator<<=(from_octet Value)
void CORBA::Any::operator<<=(from_string Value)
引数
Value
Anyに挿入する値を格納する関連オブジェクト。
説明
これらの挿入メンバー関数は、AnyCORBA::BooleanCORBA::CharまたはCORBA::Octet参照を型保障で挿入します。Anyに前の値があり、そのReleaseフラグがCORBA_TRUEの場合、メモリーの割当てを解除し、前のTypeCodeオブジェクト参照を解放します。Valueパラメータを使用して渡された値をコピーしてAnyオブジェクトに新しい値を挿入します。これにより、適切なTypeCodeリファレンスが複製されます。
戻り値
なし。
CORBA::Boolean CORBA::Any::operator>>=()
概要
Anyの型保障抽出演算子。
C++バインディング
CORBA::Boolean CORBA::Any::operator>>=(to_boolean Value) const
CORBA::Boolean CORBA::Any::operator>>=(to_char Value) const
CORBA::Boolean CORBA::Any::operator>>=(to_octet Value) const
CORBA::Boolean CORBA::Any::operator>>=(to_object Value) const
CORBA::Boolean CORBA::Any::operator>>=(to_string Value) const
引数
Value
Anyオブジェクトに格納されている値の出力を受け取る関連オブジェクトへの参照。Anyオブジェクトに適切な型が格納されていない場合、値は変更されません。
説明
これらの抽出メンバー関数は、AnyからCORBA::BooleanCORBA::CharCORBA::OctetCORBA::ObjectまたはString参照を型保障で抽出します。これらのメンバー関数は、Anyクラス内でネストされたヘルパーです。その目的は、C++ではBoolean型、char型、octet型の識別が不要なため、OMG IDLのこれらの型を識別して抽出することです。
戻り値
Anyに指定の型が格納されている場合、このメンバー関数は、Anyオブジェクト参照の値を出力変数Valueに代入し、CORBA_TRUEを返します。Anyオブジェクトに適切な型が格納されていない場合は、CORBA_FALSEを返します。
CORBA::TypeCode_ptr CORBA::Any::type() const
概要
AnyのTypeCodeアクセサ。
C++バインディング
CORBA::TypeCode_ptr CORBA::Any::type();
引数
なし。
説明
この関数は、Anyに関連付けられたTypeCodeオブジェクトのTypeCode_ptr擬似オブジェクト参照を返します。TypeCode_ptr擬似オブジェクト参照は、CORBA::releaseメンバー関数で解放する必要があります。または、TypeCode_varに割り当てて自動的に解放されるようにする必要があります。
戻り値
Anyに格納されているTypeCode_ptr
void CORBA::Any::replace()
概要
型保障でないAnyの挿入。
C++バインディング
void CORBA::Any::replace(TypeCode_ptr TC, void * Value,
Boolean Release = CORBA_FALSE);
引数
TC
置き換えられるAnyオブジェクトのTypeCode値を指定するTypeCode擬似オブジェクト参照。この引数は複製されます。
Value
Anyオブジェクトが指すストレージを指定するvoidポインタ。
Release
Anyが指定のValue引数を管理するかどうかを指定します。ReleaseCORBA_TRUEの場合、Anyは所有権を想定します。ReleaseCORBA_FALSEの場合、Anyは所有権を想定しません。この場合、Valueパラメータが指すデータは、代入時または破棄時に解放されません。
説明
これらのメンバー関数は、渡されたTCおよびValue引数の値に、Anyに現在格納されているデータおよびTypeCode値を置き換えます。この関数による置換えは型保障ではありません。つまり、TypeCode値とValue引数が指すストレージのデータ型との一貫性は、呼出し側が維持することになります。
Releaseの値がCORBA_TRUEの場合、この関数はAnyオブジェクト内の既存のTypeCode擬似オブジェクトを解放し、Anyオブジェクト参照が指すストレージを解放します。
戻り値
なし。
Contextメンバー関数
Contextは、メソッド呼出しに関連付けられたオプションのコンテキスト情報を提供します。
これらのメンバー関数のC++へのマッピングは次のとおりです:
class CORBA
{
class Context
{
public:
const char *context_name() const;
Context_ptr parent() const;

void create_child(const char *, Context_out);

void set_one_value(const char *, const Any &);
void set_values(NVList_ptr);
void delete_values(const char *);
void get_values(
const char *,
Flags,
const char *,
NVList_out
);
}; // Context
}// CORBA
メモリー管理
Contextには、次の特別なメモリー管理規則があります。
context_nameおよびparent関数の戻り値の所有権はContextが保持します。呼出し側はこれらの戻り値を解放しないでください。
ここでは、各Contextメンバー関数について説明します。
CORBA::Context::context_name
概要
Contextオブジェクトの名前を返します。
C++バインディング
Const char * CORBA::Context::context_name () const;
引数
なし。
説明
このメンバー関数は、指定のContextオブジェクトの名前を返します。Contextオブジェクト参照は、返されるchar *のメモリーを所有します。このメモリーは変更できません。
戻り値
メンバー関数が成功した場合、Contextオブジェクトの名前を返します。ContextオブジェクトがCORBA::Context::create_childの呼出しで作成された子Contextでない場合、値は空になることがあります。
Contextオブジェクトに名前がない場合、空の文字列になります。
CORBA::Context::create_child
概要
Contextオブジェクトの子を作成します。
C++バインディング
void CORBA::Context::create_child (
const char * CtxName,
CORBA::Context_out CtxObject);
引数
CtxName
Contextリファレンスに関連付ける名前。
CtxObject
新しく作成するContextオブジェクト参照。
例外
CORBA::NO_MEMORY
説明
このメンバー関数は、Contextオブジェクトの子を作成します。子Contextオブジェクトの検索は、必要に応じて、親コンテキスト内の一致するプロパティ名などを(コンテキスト・ツリーを上方向に)探します。
戻り値
なし。
関連項目
CORBA::ORB::get_default_context
CORBA::release
CORBA::Context::delete_values
概要
Contextオブジェクトの指定された属性の値を削除します。
C++バインディング
void CORBA::Context::delete_values (
const char * AttrName);
引数
AttrName
値が削除される属性の名前。この引数の後にワイルドカード文字(*)を付けると、ワイルドカード文字の前にある文字列に一致する名前がすべて削除されます。
例外
属性が空の文字列の場合はCORBA::BAD_PARAM
削除対象の一致する属性が見つからなかった場合はCORBA::BAD_CONTEXT
説明
このメンバー関数は、Contextオブジェクトの属性の名前付き値を削除します。その親に対して同じ操作を再帰的に行わないことに注意してください(ある場合)。
戻り値
なし。
関連項目
CORBA::Context::create_child
CORBA::ORB::get_default_context
CORBA::Context::get_values
概要
指定されたスコープ内でContextオブジェクトの属性値を取り出します。
C++バインディング
void CORBA::Context::get_values (
const char * StartScope,
CORBA::Flags OpFlags,
const char * AttrName,
CORBA::NVList_out AttrValues);
引数
StartScope
指定されたプロパティの検索を開始するContextオブジェクト・レベル。レベルは、コンテキスト名または検索が開始されるparentです。値が0(ゼロ)の場合、現在のContextオブジェクトで検索が開始されます。
OpFlags
有効な操作フラグは、CORBA::CTX_RESTRICT_SCOPEのみです。このフラグを指定すると、オブジェクト実装によってプロパティの検索が現在のスコープのみに制限されます。したがって、一連の親コンテキストのプロパティの検索は再帰的に実行されません。このフラグを指定しない場合は、スコープを広げて一致が見つかるか、または検索対象がすべてのレベルになるまで検索が続行されます。
AttrName
値が返される属性の名前。この引数の後にワイルドカード文字(*)を付けると、ワイルドカード文字の前にある文字列に一致する名前がすべて返されます。
AttrValues
指定された属性の値を受け取り、NVListオブジェクトを返します。リスト内の各項目はNamedValueです。
例外
属性が空の文字列の場合はCORBA::BAD_PARAM
一致する属性が見つからなかった場合はCORBA::BAD_CONTEXT
動的メモリー割当てに失敗した場合はCORBA::NO_MEMORY
説明
このメンバー関数は、Contextオブジェクトの指定された属性の値を取り出します。これらの値はNVListオブジェクトとして返され、不要になったときは、CORBA::releaseメンバー関数を使用して解放する必要があります。
戻り値
なし。
関連項目
CORBA::Context::create_child
CORBA::ORB::get_default_context
CORBA::Context::parent
概要
Contextオブジェクトの親コンテキストを返します。
C++バインディング
CORBA::Context_ptr CORBA::Context::parent () const;
引数
なし。
説明
このメンバー関数は、Contextオブジェクトの親コンテキストを返します。Contextオブジェクトの親はContextが所有する属性であり、呼出し側は変更または解放できません。CORBA::Context::create_childメンバー関数を使用してContextオブジェクトが作成されていないかぎり、この親はnilです。
戻り値
メンバー関数が成功した場合、Contextオブジェクトの親コンテキストを返します。親コンテキストがnilである場合もあります。CORBA::is_nilメンバー関数を使用すると、オブジェクト参照がnilかどうかをテストできます。
メンバー関数が失敗した場合は、例外がスローされます。CORBA::is_nilメンバー関数を使用すると、オブジェクト参照がnilかどうかをテストできます。
CORBA::Context::set_one_value
概要
Contextオブジェクトの指定の属性値を設定します。
C++バインディング
void CORBA::Context::set_one_value (
const char * AttrName,
const CORBA::Any & AttrValue);
引数
AttrName
設定する属性の名前。
AttrValue
属性の値。現在、Oracle Tuxedoシステムでは文字列型のみをサポートしています。したがって、このパラメータは、CORBA::Anyオブジェクト内で文字列型で指定する必要があります。
例外
AttrNameが空の文字列の場合、またはAttrValueに文字列型が含まれない場合はCORBA::BAD_PARAM
動的メモリー割当てに失敗した場合はCORBA::NO_MEMORY
説明
このメンバー関数は、Contextオブジェクトの指定の属性の値を設定します。現在、Contextオブジェクトでサポートされているのは文字列値のみです。Contextオブジェクトに指定の名前の属性がすでにある場合、最初にそれが削除されます。
戻り値
なし。
関連項目
CORBA::Context::get_values
CORBA::Context::set_values
CORBA::Context::set_values
概要
Contextオブジェクトの指定の属性値を設定します。
C++バインディング
void CORBA::Context::set_values (
CORBA::NVList_ptr AttrValue)
;
引数
AttrValues
属性の名前と値。現在、Oracle Tuxedoシステムでは文字列型のみをサポートしています。したがって、リスト内のNamedValueオブジェクトはすべて、CORBA::Anyオブジェクト内で文字列型で指定する必要があります。
例外
属性値のいずれかに文字列型でない値がある場合はCORBA::BAD_PARAM
動的メモリー割当てに失敗した場合はCORBA::NO_MEMORY
説明
このメンバー関数は、Contextオブジェクトの指定の属性の値を設定します。CORBA::NVListメンバー関数には、設定するプロパティの名前と値のペアが含まれます。
戻り値
なし。
関連項目
CORBA::Context::get_values
CORBA::Context::set_one_value
ContextListメンバー関数
ContextListを使用すると、クライアントまたはサーバー・アプリケーションで、Request呼出しで指定する必要があるコンテキスト文字列のリストを提供できます。Requestメンバー関数の説明は、14-96ページの「Requestメンバー関数」という項を参照してください。
ContextListとContextの違いは、ContextListが検索および送信対象の値を含むコンテキスト文字列のみをRequest呼出しで指定するのに対し(該当する場合)、Contextはそれらの値が取得される場所であるという点です。Contextメンバー関数の説明は、「Contextメンバー関数」という項を参照してください。
これらのメンバー関数のC++へのマッピングは次のとおりです:
class CORBA
{
class ContextList
{
public:
Ulong count ();
void add(const char* ctxt);
void add_consume(char* ctxt);
const char* item(Ulong index);
Status remove(Ulong index);
}; // ContextList
}// CORBA
 
CORBA::ContextList:: count
概要
リスト内の現在の項目数を取り出します。
C++バインディング
Ulong count ();
引数
なし。
例外
関数が失敗した場合、例外がスローされます。
説明
このメンバー関数は、リスト内の現在の項目数を取り出します。
戻り値
関数が成功した場合、戻り値はリスト内の項目数です。リストが作成されたばかりで、ContextListオブジェクトを追加していない場合は、この関数によって0 (ゼロ)が返されます。
関連項目
CORBA::ContextList::add
CORBA::ContextList::add_consume
CORBA::ContextList::item
CORBA::ContextList::remove
CORBA::ContextList::add
概要
名前の付いていない項目でContextListオブジェクトを作成します。これは、flags属性のみを設定したオブジェクトです。
C++バインディング
void add(const char* ctxt);
引数
ctxt
char*によって参照されるメモリー位置を定義します。
例外
メンバー関数が失敗した場合、CORBA::NO_MEMORY例外がスローされます。
説明
このメンバー関数は、名前の付いていない項目でContextListオブジェクトを作成します。これは、flags属性のみを設定したオブジェクトです。
ContextListオブジェクトは動的に拡張するので、そのサイズをアプリケーションで追跡する必要がありません。
戻り値
関数が成功した場合、戻り値は新しく作成されたContextListオブジェクトへのポインタです。
関連項目
CORBA::ContextList::add_consume
CORBA::ContextList::count
CORBA::ContextList::item
CORBA::ContextList::remove
CORBA::ContextList::add_consume
概要
ContextListオブジェクトを作成します。
C++バインディング
void add_consume(const char* ctxt);
引数
ctxt
char*によって参照されるメモリー位置を定義します。
例外
メンバー関数が失敗した場合、例外が発生します。
説明
このメンバー関数は、ContextListオブジェクトを作成します。
ContextListオブジェクトは動的に拡張するので、そのサイズをアプリケーションで追跡する必要がありません。
戻り値
関数が成功した場合、戻り値は新しく作成されたContextListオブジェクトへのポインタです。
関連項目
CORBA::ContextList::add
CORBA::ContextList::count
CORBA::ContextList::item
CORBA::ContextList::remove
CORBA::ContextList::item
概要
渡された索引に基づいてContextListオブジェクトへのポインタを取り出します。
C++バインディング
const char* item(ULong index);
引数
index
ContextListオブジェクトへの索引。索引の基数はゼロです。
例外
この関数が失敗した場合、BAD_PARAM例外がスローされます。
説明
このメンバー関数は、渡された索引に基づいてContextListオブジェクトへのポインタを取り出します。この関数では、ゼロを基数とする索引が使用されます。
戻り値
関数が成功した場合、戻り値はContextListオブジェクトへのポインタです。
関連項目
CORBA::ContextList::add
CORBA::ContextList::add_consume
CORBA::ContextList::count
CORBA::ContextList::remove
CORBA::ContextList::remove
概要
指定された索引の項目を削除し、関連付けられたメモリーをすべて解放してから、リストの残りの項目を順序付けし直します。
C++バインディング
Status remove(ULong index);
引数
Index
ContextListオブジェクトへの索引。索引の基数はゼロです。
例外
この関数が失敗した場合、BAD_PARAM例外がスローされます。
説明
このメンバー関数は、指定された索引の項目を削除し、関連付けられたメモリーをすべて解放してから、リストの残りの項目を順序付けし直します。
戻り値
なし。
関連項目
CORBA::ContextList::add
CORBA::ContextList::add_consume
CORBA::ContextList::count
CORBA::ContextList::item

NamedValueメンバー関数
NamedValueは、特にDIIで、NVListの要素としてのみ使用されます。NamedValueは、(オプション)名前、anyの値およびラベリング・フラグを保持します。有効なフラグ値は、CORBA::ARG_INCORBA::ARG_OUT、およびCORBA::ARG_INOUTです。
NamedValueの値は、anyの標準操作で操作できます。
これらのメンバー関数のC++へのマッピングは次のとおりです:
// C++
class NamedValue
{
public:
Flags flags() const;
const char * name() const;
Any * value() const;
};
メモリー管理
NamedValueには、次の特別なメモリー管理規則があります。
name()およびvalue()関数の戻り値の所有権はNamedValueが保持します。呼出し側はこれらの戻り値を解放しないでください。
以下のセクションでは、NamedValueの各メンバー関数について説明します。
CORBA::NamedValue::flags
概要
NamedValueオブジェクトのflags属性を取り出します。
C++バインディング
CORBA::Flags CORBA::NamedValue::flags () const;
引数
なし。
説明
このメンバー関数は、NamedValueオブジェクトのflags属性を取り出します。
戻り値
関数が成功した場合、戻り値はNamedValueオブジェクトのflags属性です。
関数が失敗した場合、例外がスローされます。
CORBA::NamedValue::name
概要
NamedValueオブジェクトのname属性を取り出します。
C++バインディング
const char * CORBA::NamedValue::name () const;
引数
なし。
説明
このメンバー関数は、NamedValueオブジェクトのname属性を取り出します。このメンバー関数から返された名前はNamedValueオブジェクトが所有するため、変更または解放しないでください。
戻り値
関数が成功した場合、戻り値はNamedValueオブジェクトのname属性を表す定数Identifierオブジェクトです。
関数が失敗した場合、例外がスローされます。
CORBA::NamedValue::value
概要
NamedValueオブジェクトのvalue属性へのポインタを取り出します。
C++バインディング
CORBA::Any * CORBA::NamedValue::value () const;
引数
なし。
説明
このメンバー関数は、NamedValueオブジェクトのvalue属性を表すAnyオブジェクトへのポインタを取り出します。この属性はNamedValueオブジェクトによって所有されます。そのため、変更または解放しないでください。
戻り値
関数が成功した場合、戻り値は、NamedValueオブジェクトに格納されているAnyオブジェクトへのポインタです。
関数が失敗した場合、例外がスローされます。
NVListメンバー関数
NVListはNamedValueのリストです。新しいNVListは、ORB::create_list操作(「CORBA::ORB::create_exception_list」を参照)を使用して作成します。新しいNamedValueは、次のいずれかの方法でNVListの一部として作成できます。
add - flagsのみを初期化して、名前の付いていない値を作成します
add_item - nameとflagsを初期化します
add_value - name、valueおよびflagsを初期化します
上記の各操作によって、新しい項目が返されます。
要素には、ゼロを基数とする索引を介してアクセスおよび削除できます。addadd_itemadd_valueadd_item_consumeおよびadd_value_consume関数は、呼び出されるたびにNVListを長くして新しい要素を保持できるようにします。既存の要素にアクセスするには、item関数を使用します。
// C++
class NVList
{
public:
ULong count() const;
NamedValue_ptr add(Flags);
NamedValue_ptr add_item(const char*, Flags);
NamedValue_ptr add_value(const char*, const Any&, Flags);
NamedValue_ptr item(ULong);
void remove(ULong);
};
メモリー管理
NVListには、次の特別なメモリー管理規則があります。
addadd_itemadd_valueadd_item_consumeadd_value_consumeおよびitem関数の戻り値の所有権はNVListが保持します。呼出し側はこれらの戻り値を解放しないでください。
add_item_consumeおよびadd_value_consume関数のchar*パラメータとadd_value_consume関数のAny*パラメータは、NVListが使用します。NVListはこれらのパラメータをコピーして、元のパラメータをすぐに破棄します。そのため、パラメータが関数に渡された後は、呼出し側がこれらのデータにアクセスすることはできません。基底のNamedValueのvalue属性を呼出し側が変更する場合は、NamedValue::value()操作を使用します。
remove関数は、削除済のNamedValueのCORBA::releaseも呼び出します。
以下のセクションでは、NVListの各メンバー関数について説明します。
CORBA::NVList::add
概要
名前の付いていない項目でNamedValueオブジェクトを作成します。これは、flags属性のみを設定したオブジェクトです。
C++バインディング
CORBA::NamedValue_ptr CORBA::NVList::add (
CORBA::Flags Flags);
引数
Flags
引数の受渡しを決定するフラグ。有効な値は次のとおりです。
CORBA::ARG_IN
CORBA::ARG_INOUT
CORBA::ARG_OUT
説明
このメンバー関数は、名前の付いていない項目でNamedValueオブジェクトを作成します。これは、flags属性のみを設定したオブジェクトです。NamedValueオブジェクトは、呼出しが行われたNVListオブジェクトに追加されます。
NVListオブジェクトは動的に拡張するので、そのサイズをアプリケーションで追跡する必要はありません。
戻り値
関数が成功した場合、戻り値は新しく作成されたNamedValueオブジェクトへのポインタです。返されたNamedValueオブジェクト参照はNVListが所有するため、解放しないでください。
メンバー関数が失敗した場合、CORBA::NO_MEMORY例外がスローされます。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::NVList::count
CORBA::NVList::remove
CORBA::NVList::add_item
概要
空のvalue属性を作成し、nameおよびflags属性を初期化してNamedValueオブジェクトを作成します。
C++バインディング
CORBA::NamedValue_ptr CORBA::NVList::add_item (
const char * Name,
CORBA::Flags Flags);
引数
Name
リスト項目の名前。
Flags
引数の受渡しを決定するフラグ。有効な値は次のとおりです。
CORBA::ARG_IN
CORBA::ARG_INOUT
CORBA::ARG_OUT
説明
このメンバー関数は、空のvalue属性を作成し、パラメータとして渡すnameおよびflags属性を初期化してNamedValueオブジェクトを作成します。NamedValueオブジェクトは、呼出しが行われたNVListオブジェクトに追加されます。
NVListオブジェクトは動的に拡張するので、そのサイズをアプリケーションで追跡する必要はありません。
戻り値
関数が成功した場合、戻り値は新しく作成されたNamedValueオブジェクトへのポインタです。返されたNamedValueオブジェクト参照はNVListが所有するため、解放しないでください。
メンバー関数が失敗した場合、例外がスローされます。
関連項目
CORBA::NVList::add
CORBA::NVList::add_value
CORBA::NVList::count
CORBA::NVList::item
CORBA::NVList::remove
CORBA::NVList::add_value
概要
name、value、およびflags属性を初期化してNamedValueオブジェクトを作成します。
C++バインディング
CORBA::NamedValue_ptr CORBA::NVList::add_value (
const char * Name,
const CORBA::Any & Value,
CORBA::Flags Flags);
引数
Name
リスト項目の名前。
Value
リスト項目の値。
Flags
引数の受渡しを決定するフラグ。有効な値は次のとおりです。
CORBA::ARG_IN
CORBA::ARG_INOUT
CORBA::ARG_OUT
説明
このメンバー関数は、name、valueおよびflags属性を初期化してNamedValueオブジェクトを作成します。NamedValueオブジェクトは、呼出しが行われたNVListオブジェクトに追加されます。
NVListオブジェクトは動的に拡張するので、そのサイズをアプリケーションで追跡する必要はありません。
戻り値
関数が成功した場合、戻り値は新しく作成されたNamedValueオブジェクトへのポインタです。返されたNamedValueオブジェクト参照はNVListが所有するため、解放しないでください。
メンバー関数が失敗した場合、例外が発生します。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::count
CORBA::NVList::item
CORBA::NVList::remove
CORBA::NVList::count
概要
リスト内の現在の項目数を取り出します。
C++バインディング
CORBA::ULong CORBA::NVList::count () const;
引数
なし。
説明
このメンバー関数は、リスト内の現在の項目数を取り出します。
戻り値
関数が成功した場合、戻り値はリスト内の項目数です。リストが作成されたばかりで、NamedValueオブジェクトを追加していない場合は、この関数によって0 (ゼロ)が返されます。
関数が失敗した場合、例外がスローされます。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::NVList::item
CORBA::NVList::remove
CORBA::NVList::item
概要
渡された索引に基づいてNamedValueオブジェクトへのポインタを取り出します。
C++バインディング
CORBA::NamedValue_ptr CORBA::NVList::item (
CORBA::ULong Index);
引数
Index
NVListオブジェクトへの索引。索引の基数はゼロです。
例外
この関数が失敗した場合、BAD_PARAM例外がスローされます。
説明
このメンバー関数は、渡された索引に基づいてNamedValueオブジェクトへのポインタを取り出します。この関数では、ゼロを基数とする索引が使用されます。
戻り値
関数が成功した場合、戻り値はNamedValueオブジェクトへのポインタです。返されたNamedValueオブジェクト参照はNVListが所有するため、解放しないでください。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::NVList::count
CORBA::NVList::remove
CORBA::NVList::remove
概要
指定された索引の項目を削除し、関連付けられたメモリーをすべて解放してから、リストの残りの項目を順序付けし直します。
C++バインディング
void CORBA::NVList::remove (
CORBA::ULong Index);
引数
Index
NVListオブジェクトへの索引。索引の基数はゼロです。
例外
この関数が失敗した場合、BAD_PARAM例外がスローされます。
説明
このメンバー関数は、指定された索引の項目を削除し、関連付けられたメモリーをすべて解放してから、リストの残りの項目を順序付けし直します。
戻り値
なし。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::NVList::count
CORBA::NVList::item
 
Objectメンバー関数
ここでは、OMG IDLインタフェースのObjectに適用される規則について説明します。Objectは、OMG IDLインタフェース階層の基底インタフェースです。インタフェースObjectでは、擬似オブジェクトではなく通常のCORBAオブジェクトを定義します。ただし、他の擬似オブジェクトを参照するため、ここではこれについても説明します。
他の規則に加えて、インタフェースObjectの操作名はすべて、マッピングされるC++クラス内で先頭にアンダースコアが付きます。また、create_requestのマッピングは3つの形式に分類されます。これらは、「Requestメンバー関数」という項で説明した使用形式にそれぞれ対応しています。is_nilおよびrelease関数は、「Objectメンバー関数」に記載されているように、CORBAネームスペースで提供されます。
Oracle Tuxedoソフトウェアでは、CORBAリビジョン2.2で定義されているオブジェクト参照操作が使用されます。これらの操作が依存するのは、型Objectのみです。したがって、操作はCORBAネームスペースの中で通常の関数として記述できます。
注意:
Oracle Tuxedoソフトウェアでは、BOAではなくPOAを使用しているため、非推奨のget_implementation()メンバー関数は認識されません。このメンバー関数を参照しようとすると、コンパイル・エラーが発生します。
これらのメンバー関数のC++へのマッピングは次のとおりです:
class CORBA
{
class Object
{
public:
CORBA::Boolean _is_a(const char *)
CORBA::Boolean _is_equivalent();
CORBA::Boolean _nonexistent(Object_ptr);

static Object_ptr _duplicate(Object_ptr obj);
static Object_ptr _nil();
InterfaceDef_ptr _get_interface();
CORBA::ULong _hass(CORBA::ULong);
void _create_request(
Context_ptr ctx,
const char *operation,
NVList_ptr arg_list,
NamedValue_ptr result,
Request_out request,
Flags req_flags
);
Status _create_request(
Context_ptr ctx,
const char * operation,
NVList_ptr arg_list,
NamedValue_ptr result,
ExceptionList_ptr Except_list,
ContextList_ptr Context_list,
Request_out request,
Flags req_flags
);
Request_ptr _request(const char* operation);
}; //Object
}; // CORBA
以降の項では、Objectメンバー関数について説明します。
CORBA::Object::_create_request
概要
ユーザー指定の情報でリクエストを作成します。
C++バインディング
Void CORBA::Object::_create_request (
CORBA::Context_ptr Ctx,
const char * Operation,
CORBA::NVList_ptr Arg_list,
CORBA::NamedValue_ptr Result,
CORBA::ExceptionList_ptr Except_list,
CORBA::ContextList_ptr Context_list,
CORBA::Request_out Request,
CORBA::Flags Req_flags,);
引数
Ctx
このリクエストに使用するContext。
Operation
このリクエストの操作名。
Arg_list
このリクエストの引数リスト。
Result
正常に呼出しが行われた後、このリクエストの戻り値を格納するNamedValueリファレンス。
Except_list
このリクエストの例外リスト。
Context_list
このリクエストのコンテキスト・リスト。
Request
新しく作成するリクエスト・リファレンス。
Req_flags
将来使用するために予約されています。ゼロの値を渡す必要があります。
説明
このメンバー関数は、コンテキスト、操作名およびその他の値に関する情報を提供するリクエストを作成します(長い形式)。呼出し時に指定した操作名のみでリクエストを作成するには(短い形式)、CORBA::Object::_requestメンバー関数を使用します。ただし、長い形式で提供される残りの情報については、最終的には指定する必要があります。
戻り値
なし。
関連項目
CORBA::Object::_request
CORBA::Object::_duplicate
概要
Objectオブジェクト参照を複製します。
C++バインディング
CORBA::Object_ptr CORBA::Object::_duplicate(
Object_ptr Obj);
引数
obj
複製するオブジェクト参照。
説明
このメンバー関数は、指定のObjectオブジェクト参照(Obj)を複製します。指定のオブジェクト参照がnilの場合、_duplicate関数はnilオブジェクト参照を返します。この呼出しで返されるオブジェクトは、CORBA::releaseで解放するか、または自動的に破棄されるようにCORBA::Object_varを割り当てる必要があります。
この関数では、CORBAシステム例外がスローされる場合があります。
戻り値
複製オブジェクト参照を返します。指定のオブジェクト参照がnilの場合は、nilオブジェクト参照を返します。
CORBA::Object_ptr op = TP::create_object_reference(
"IDL:Teller:1.0","MyTeller");
CORBA::Object_ptr dop = CORBA::Object::_duplicate(op);
CORBA::Object::_get_interface
概要
Repositoryオブジェクトのインタフェース定義を返します。
C++バインディング
CORBA::InterfaceDef_ptr CORBA::Object::_get_interface ();
引数
なし。
説明
Repositoryオブジェクトのインタフェース定義を返します。
注意:
リポジトリ・インタフェースAPIを使用するには、マクロを定義してからCORBA.hをインクルードします。マクロの定義方法については、『CORBAサーバー・アプリケーションの作成』を参照してください。
戻り値
InterfaceDef_ptr
CORBA::Object::_is_a
概要
オブジェクトが特定のインタフェースのインスタンスであるかどうかを指定します。
C++バインディング
CORBA::Boolean CORBA::Object::_is_a(const char * interface_id);
引数
interface_id
インタフェース・リポジトリIDを示す文字列。
説明
このメンバー関数は、オブジェクトがinterface_idパラメータで指定されたインタフェースのインスタンスであるかどうかを判別するために使用します。この関数を使用すると、ORBのスコープでオブジェクト参照の型保障の維持が容易になります。
戻り値
オブジェクトが指定の型のインスタンスである場合、またはオブジェクトがそのオブジェクトの最終派生型の上位オブジェクトである場合、TRUEを返します。
CORBA::Object_ptr op = TP::create_object_reference(
"IDL:Teller:1.0", "MyTeller");
CORBA::Boolean b = op->_is_a("IDL:Teller:1.0");
CORBA::Object::_is_equivalent
概要
2つのオブジェクト参照が等価であるかどうかを判別します。
C++バインディング
CORBA::Boolean CORBA::Object::_is_equivalent (
CORBA::Object_ptr other_obj);
引数
other_obj
ターゲット・オブジェクトとの比較に使用される、他方のオブジェクトのオブジェクト参照。
例外
標準CORBA例外がスローされる場合があります。
説明
このメンバー関数は、ORBが容易に判別できるかぎりにおいて、2つのオブジェクト参照が等価であるかどうかを判別するために使用します。オブジェクト参照が、パラメータとして渡すオブジェクト参照と等価である場合、これはTRUEを返します。2つのオブジェクト参照が同じ場合、両者は等価です。2つのオブジェクト参照が異なっても、同一のオブジェクトを参照していれば、両者は等価です。
戻り値
ターゲット・オブジェクト参照が、パラメータとして渡された他方のオブジェクト参照と等価であると認識された場合、TRUEを返します。それ以外の場合は、FALSEを返します。
CORBA::Object_ptr op = TP::create_object_reference(
"IDL:Teller:1.0", "MyTeller");
CORBA::Object_ptr dop = CORBA::Object::_duplicate(op);
CORBA::Boolean b = op->_is_equivalent(dop);
CORBA::Object::_nil
概要
nilオブジェクトのリファレンスを返します。
C++バインディング
CORBA::Object_ptr CORBA::Object::_nil();
引数
なし。
説明
このメンバー関数は、nilオブジェクト参照を返します。指定のオブジェクトがnilであるかどうかをテストするには、適切なCORBA::is_nilメンバー関数を使用します(「CORBA::release」という項を参照)。_nilメンバー関数のCORBA:is_nilルーチンを呼び出すと、常にCORBA_TRUEが返されます。
戻り値
nilオブジェクト参照を返します。
CORBA::Object_ptr op = CORBA::Object::_nil();
CORBA::Object::_non_existent
概要
オブジェクトが破棄されているかどうかを判別するために使用します。
C++バインディング
CORBA::Boolean CORBA::Object::_non_existent();
引数
なし。
説明
このメンバー関数を使用して、オブジェクトが破棄されているかどうかを判別できます。この関数では、オブジェクトのアプリケーション・レベルの操作を呼び出さずに判別を行うため、オブジェクト自体に影響は生じません。
戻り値
ORBで正式にオブジェクトが存在しないことが認識された場合、(CORBA::OBJECT_NOT_EXISTを生成するのではなく) CORBA_TRUEを返します。それ以外の場合は、CORBA_FALSEを返します。
CORBA::Object::_request
概要
操作名を指定するリクエストを作成します。
C++バインディング
CORBA::Request_ptr CORBA::Object::_request (
const char * Operation);
引数
Operation
このリクエストの操作名。
説明
このメンバー関数は、操作名を指定するリクエストを作成します。引数や結果などのその他の情報はすべて、CORBA::Requestメンバー関数を使用して設定する必要があります。
戻り値
関数が成功した場合、戻り値は新しく作成されたリクエストへのポインタです。
メンバー関数が失敗した場合、例外がスローされます。
関連項目
CORBA::Object::_create_request
CORBAメンバー関数
ここでは、ObjectおよびPseudo-Object Referenceメンバー関数について説明します。
これらのメンバー関数のC++へのマッピングは次のとおりです:
class CORBA {
void release(Object_ptr);
void release(Environment_ptr);
void release(NamedValue_ptr);
void release(NVList_ptr);
void release(Request_ptr);
void release(Context_ptr);
void release(TypeCode_ptr);
void release(POA_ptr);
void release(ORB_ptr);
void release(ExceptionList_ptr);
void release(ContextList_ptr);

Boolean is_nil(Object_ptr);
Boolean is_nil(Environment_ptr);
Boolean is_nil(NamedValue_ptr);
Boolean is_nil(NVList_ptr);
Boolean is_nil(Request_ptr);
Boolean is_nil(Context_ptr);
Boolean is_nil(TypeCode_ptr);
Boolean is_nil(POA_ptr);
Boolean is_nil(ORB_ptr);
Boolean is_nil(ExceptionList_ptr);
Boolean is_nil(ContextList_ptr);

hash(maximum);

resolve_initial_references(identifier);
...
};
CORBA::release
概要
指定のオブジェクト型に対して割り当てられたリソースを解放できるようにします。
C++バインディング
void CORBA::release(spec_object_type obj);
引数
obj
呼出し側がアクセスしなくなるオブジェクト参照。指定するオブジェクト型は、「CORBAメンバー関数」という項にリストされている型のいずれかである必要があります。
説明
このメンバー関数は、呼出し側が今後参照にアクセスしないことを示します。その結果、関連付けられたリソースの割当てが解除可能になります。指定したオブジェクト参照がnilの場合、release操作は何の処理も行いません。ORBインスタンスの解放がORBへの最後の参照である場合、その破棄の前にORBが停止されます。これは、CORBA::releaseを呼び出す前にORB_shutdownを呼び出すのと同じです。この処理は、ORBで呼び出されたreleaseメンバー関数にのみ適用されます。
このメンバー関数では、CORBA例外はスローされない場合があります。
戻り値
なし。
CORBA::Object_ptr op = TP::create_object_reference(
"IDL:Teller:1.0", "MyTeller");
CORBA::release(op);
CORBA::is_nil
概要
指定のオブジェクト型に対応するオブジェクトが存在するかどうかを判別します。
C++バインディング
CORBA::Boolean CORBA::is_nil(spec_object_type obj);
引数
obj
オブジェクト参照。指定するオブジェクト型は、「CORBAメンバー関数」という項にリストされている型のいずれかである必要があります。
説明
このメンバー関数は、指定のオブジェクト参照がnilであるかどうかを判別するために使用します。ORBで定義したnilオブジェクト参照の特別な値がオブジェクト参照に含まれる場合、TRUEが返されます。
この操作では、CORBA例外はスローされない場合があります。
戻り値
指定したオブジェクトがnilの場合、TRUEを返します。それ以外の場合は、FALSEを返します。
CORBA::Object_ptr op = TP::create_object_reference(
"IDL:Teller:1.0", "MyTeller");
CORBA::Boolean b = CORBA::is_nil(op);
CORBA::hash
概要
ORB内部の識別子でオブジェクト参照への間接アクセスを提供します。
C++バインディング
CORBA::hash(CORBA::ULong maximum);
引数
maximum
ORBが返すハッシュ値の上限を指定します。
説明
オブジェクト参照は、hash()操作を使用してアプリケーションから間接的にアクセスできるORB内部識別子に関連付けられています。この識別子の値は、オブジェクト参照の存続期間は変更されません。したがって、識別子のどのハッシュ関数も変更されません。
この操作の値は、確実に一意であるとはかぎりません。つまり、別のオブジェクト参照が同じハッシュ値を返すこともあります。ただし、2つのオブジェクト参照が別々にハッシュされた場合、アプリケーションでは2つのオブジェクト参照が同じでないことを判別できます。
hash操作のmaximumパラメータには、ORBが返すハッシュ値の上限を指定します。この値の下限はゼロです。この機能は通常、オブジェクト参照の衝突チェーン状のハッシュ表を作成したり、これにアクセスしたりするために使用します。したがって、その範囲内で値がランダムに分散するほど、計算する値は小さくなり、計算精度も向上します。
戻り値
なし。
CORBA::resolve_initial_references
概要
identifier文字列に対応する初期オブジェクト参照を返します。
C++バインディング
CORBA::Object_ptr CORBA::resolve_initial_references(
const CORBA::char *identifier);
引数
identifier
リファレンスが必要なオブジェクトを識別する文字列。
例外
InvalidName
説明
identifier文字列に対応する初期オブジェクト参照を返します。有効な識別子は、“RootPOA"および“POACurrent"です。
注意:
戻り値
CORBA::Object_ptrを返します。
CORBA::ORB_ptr orb = CORBA::ORB_init(argc, argv);
CORBA::Object_ptr pfobj =
orb->resolve_initial_references("RootPOA");
PortableServer::POA_ptr rootPOA;
rootPOA = PortableServer::POA::narrow(pfobj);
ORBメンバー関数
ORBメンバー関数は、オブジェクト・リクエスト・ブローカのプログラミング・インタフェースです。
ORBメンバー関数のC++へのマッピングは次のとおりです。
class CORBA
{
class ORB
{
public:
char *object_to_string(Object_ptr);
Object_ptr string_to_object(const char *);
void create_list(Long, NVList_out);
void create_operation_list(operationDef_ptr, NVList_out);
void create_named_value(NamedValue_out);
void create_exception_list(ExceptionList_out);
void create_context_list(ContextList_out);
void get_default_context(Context_out);
void create_environment(Environment_out);
void send_multiple_requests_oneway(const requestSeq&);
void send_multiple_requests_deferred(const requestSeq&);
Boolean poll_next_response();
void get_next_response(Request_out);
Boolean work_pending();
void perform_work();
void create_policy (in PolicyType type, in any val);
// Extension
void destroy();
// Extensions to support sharing context between threads
void Ctx get_ctx() = 0;
void set_ctx(Ctx) = 0;
void clear_ctx() = 0;
// Thread extensions
void inform_thread_exit(TID) = 0;
}; //ORB
}; // CORBA
スレッド関連の操作:
シングル・スレッドORB、およびマルチスレッド非対応のコードを実行するマルチスレッドORBをサポートするために、2つの操作(perform_workwork_pending)がORBインタフェースに含まれています。これらの操作は、シングル・スレッド・アプリケーションでもマルチスレッド・アプリケーションでも使用できます。アプリケーションが純粋なORBクライアントの場合は、これらの操作は不要です。
マルチスレッド・サーバー・アプリケーションをサポートするために、4つの操作(get_ctxset_ctxclear_ctxおよびinform_thread_exit)がORBインタフェースの拡張として含まれています。
以下のセクションでは、ORBの各メンバー関数について説明します。
CORBA::ORB::clear_ctx
概要
このスレッドでコンテキストが不要になったことを示します。このメソッドは、マルチスレッド・サーバー・アプリケーションの開発をサポートします。
C++バインディング
void clear_ctx()
パラメータ
なし。
戻り値
なし。
説明
このメソッドは、アプリケーション管理スレッドがコンテキストの使用を終了した後、そのスレッドによって呼び出されます。このメソッドは、そのスレッドとコンテキストの間の関連付けを解除します。
注意:
Oracle Tuxedoシステムが管理しているスレッド内からclear_ctxメソッドを呼び出さないでください。Oracle Tuxedoシステムでは、適切にコンテキストを伝播し、管理しているスレッドを自動的にクリーンアップします。Oracle Tuxedoシステムが管理しているスレッドでこのメソッドを呼び出した場合、BAD_PARAM例外がスローされます。
TP::orb()->clear_ctx();
関連項目
CORBA::ORB::get_ctx
CORBA::ORB::set_ctx
CORBA::ORB::create_context_list
概要
コンテキストのリストを作成して返します。
C++バインディング
void CORBA::ORB::create_context_list(
CORBA::ContextList_out List);
引数
List
新しく作成されるコンテキスト・リストのリファレンスを受け取ります。
説明
このメンバー関数は、コンテキスト文字列のリストを作成して返します。コンテキスト文字列のリストには、動的起動インタフェース(DII)で使用可能な形式でRequest操作で指定する必要があります。このリストが不要になったときは、CORBA::releaseメンバー関数を使用して解放する必要があります。
戻り値
なし。
CORBA::ORB::create_environment
概要
環境を作成します。
C++バインディング
void CORBA::ORB::create_environment (
CORBA::Environment_out New_env);
引数
New_env
新しく作成される環境のリファレンスを受け取ります。
説明
このメンバー関数は、環境を作成します。
戻り値
なし。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::release
CORBA::ORB::create_exception_list
概要
例外のリストを返します。
C++バインディング
void CORBA::ORB::create_exception_list(
CORBA::ExceptionList_out List);
引数
List
新しく作成される例外リストのリファレンスを受け取ります。
説明
このメンバー関数は、動的起動インタフェース(DII)で使用可能な形式で例外のリストを作成して返します。このリストが不要になったときは、CORBA::releaseメンバー関数を使用して解放する必要があります。
戻り値
なし。
CORBA::ORB::create_list
概要
NVListオブジェクト参照を作成して返します。
C++バインディング
void CORBA::ORB::create_list (
CORBA::Long NumItem,
CORBA::NVList_out List);
引数
NumItem
新しく作成されるリストに事前に割り当てる要素数。
List
新しく作成されたリストを受け取ります。
説明
このメンバー関数は、指定した数の項目を事前に割り当ててリストを作成します。リスト項目は、CORBA::NVList_add_itemメンバー関数を使用して順番にリストに追加できます。このリストが不要になったときは、CORBA::releaseメンバー関数でリストを解放しなければなりません。
戻り値
なし。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::release
CORBA::ORB::create_named_value
概要
NamedValueオブジェクト参照を作成します。
C++バインディング
void CORBA::ORB::create_named_value (
NameValue_out NewNamedVal);
引数
NewNamedVal
新しく作成されるNamedValueオブジェクトのリファレンス。
説明
このメンバー関数は、NamedValueオブジェクトを作成します。これは、NamedValueオブジェクトを必要とするリクエストの結果引数を取得するために使用します。このメンバー関数を呼び出すことによって、NVListオブジェクトを作成する追加の手順を省くことができます。
NamedValueオブジェクトが不要になったときは、CORBA::releaseメンバー関数を使用して解放する必要があります。
戻り値
なし。
関連項目
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::release
CORBA::ORB::create_operation_list
概要
指定された操作の引数のリストを作成して返します。
C++バインディング
void CORBA::ORB::create_operation_list (
CORBA::OperationDef_ptr Oper,
CORBA::NVList_out List);
引数
Oper
作成中のリストの操作定義。
List
新しく作成される引数リストのリファレンスを受け取ります。
説明
このメンバー関数は、動的起動インタフェース(DII)で使用可能な形式で、指定された操作の引数のリストを作成して返します。このリストが不要になったときは、CORBA::releaseメンバー関数を使用して解放する必要があります。
戻り値
なし。
関連項目
CORBA::OBB::create_list
CORBA::NVList::add
CORBA::NVList::add_item
CORBA::NVList::add_value
CORBA::release
CORBA::ORB::create_policy
概要
指定された初期状態で特定の型のポリシー・オブジェクトの新しいインスタンスを作成します。
C++バインディング
void CORBA::ORB::create_policy (
in PolicyType type,
in any val);
引数
type
Oracle WebLogic Enterpriseバージョン4.2でサポートされているPolicyType値は、BiDirPolicy::BIDIRECTIONAL_POLICY_TYPEのみです。
val
Oracle WebLogic Enterprise V4.2でサポートされているval値は、BiDirPolicy::BidirectionalPolicyValueのみです。
例外
PolicyError
この例外は、ORB::create_policy操作に渡されたパラメータ値に問題があることを示す場合に発生します。表14-1に、具体的な例外と理由を示します。
 
説明
この操作は、指定された初期状態で特定の型のポリシー・オブジェクトの新しいインスタンスを作成するために呼び出すことができます。ポリシーのリクエストされた型と内容を解釈できなかったために、create_policyが新しいポリシー・オブジェクトのインスタンス化に失敗した場合、該当する理由を保持するポリシー・エラー例外が発生します。(以下の例外を参照。)
リモート・クライアントはIIOPを使用するため、コールバックを使用するリモート・クライアント向けにBidirectionalPolicy引数が提供されています。この引数は、コールバックを使用するネイティブ・クライアント、またはOracle Tuxedoサーバーには使用しません。これは、Oracle Tuxedoドメイン内部のマシンが個別に通信するためです。
GIOP 1.2より前は、(TCP/IPを使用する) IIOPで双方向ポリシーを選択できませんでした。GIOP 1.0および1.1の接続は一方向でした(つまり、リクエストはクライアントからサーバーに送られていました)。レスポンスのみがサーバーからクライアントに返されていました。サーバーがリクエストをクライアント・マシンに返す(たとえばコールバックのために)場合、サーバー・マシンは別の一方向接続を確立する必要がありました。(ここでいう接続は、物理的に異なる配線や通信パスではなく、オペレーティング・システムのリソースを意味します。接続ではリソースが使用されるため、接続を最小限に抑えることが適切です。)
このリリースのOracle Tuxedo C++ソフトウェアではGIOP 1.2がサポートされているため、受信リクエストと送信リクエストの両方にTCP/IP接続を再利用できます。接続を再利用することにより、リモート・クライアントがOracle Tuxedoドメインにコールバック参照を送信するときにリソースを節約できます。共同クライアント/サーバーでは、接続を使用してOracle Tuxedoドメインにリクエストを送信します。その際、コールバックのリクエストに接続を再利用できます。接続を再利用しない場合、コールバックのリクエストは別の接続を確立する必要があります。
接続の再利用を許可することは、コールバック・オブジェクト参照を作成するORB/POAを選択することです。それらのオブジェクト参照のサーバー(通常は参照の作成元。特にコールバックの場合)は、セキュリティを考慮して再利用を許可しないことを選択できます(つまり、リモート・サーバーにセキュリティが不要なため送信接続(このマシンからリモート・サーバーへのクライアント・リクエスト)にセキュリティは不要ですが、このマシンのコールバック・サーバーにはセキュリティが必要な場合があります)。セキュリティが部分的に接続ごとに確立されることから、別個の接続を使用する場合にのみ受信時のセキュリティを確立することが可能です。リモート・サーバーにセキュリティが必要で、そのセキュリティに相互認証が伴う場合、ローカル・サーバーは、通常、接続の再利用を許可しても安全であると認識します。
プロセスがサーバー(この場合は共同クライアント/サーバー)として機能し、オブジェクト参照を作成する場合は常に、接続の再利用の選択はサーバー・エンドで行われます。そのため、接続を再利用することをORBに通知する必要があります。そのためには、オブジェクト参照を作成するPOAでポリシーを設定します。デフォルトのポリシーでは、再利用が許可されません(つまり、再利用のためのポリシー・オブジェクトを指定しないと、POAでは再利用が許可されません)。
このデフォルトにより、CORBAバージョン2.3より前に記述されたコードとの後方互換性が維持されます。このようなコードでは、再利用が可能であることが認識されていなかったため、再利用によるセキュリティへの影響を考慮する必要はありませんでした。したがって、未変更のコードは、ユーザーがセキュリティを検討して明示的に再利用を許可するまでは、引き続き再利用を禁止する必要があります。
再利用を許可するには、create_policy操作を使用して、再利用を許可するポリシー・オブジェクトを作成し、POAを作成する際のポリシーのリストの一部としてそのポリシー・オブジェクトを使用します。
戻り値
なし。
#include <BiDirPolicy_c.h>
BiDirPolicy::BidirectionalPolicy_var bd_policy;
CORBA::Any allow_reuse;
allow_reuse <<= BiDirPolicy::BOTH;
CORBA::Policy_var generic_policy =
orb->create_policy( BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE,
allow_reuse );
bd_policy = BiDirPolicy::BidirectionalPolicy::_narrow(
generic_policy );
前述の例では、bd_policyがその後、create_poa操作に渡されるPolicyListに挿入されます。
CORBA::ORB::destroy
概要
指定されたORBを破棄します。
C++バインディング
void destroy();
パラメータ
なし。
戻り値
なし。
説明
このメソッドを使用して、ORBを破棄し、このORBに関連付けられていたリソースを再利用できるようにします。ORBを破棄した場合、同じORB IDでORB_initメソッドを別に呼び出すと、新しく作成されたORBへの参照が返されます。現在呼び出しているスレッドからアプリケーションでORB::destroyメソッドを呼び出した場合、Oracle Tuxedoシステムでは、OMGマイナー・コード3のBAD_INV_ORDERシステム例外が発生します。これは、ブロッキングによってデッドロックが発生するためです。
pOrb->destroy();
CORBA::ORB::get_ctx
概要
現在のスレッドに関連付けられているコンテキストを取り出します。このメソッドは、マルチスレッド・サーバー・アプリケーションの開発をサポートします。
C++バインディング
CORBA::ORB::Ctx get_ctx()
引数
なし。
戻り値
CORBA::ORB::Ctx
現在のスレッドに関連付けられているコンテキスト。
説明
このメソッドを使用して、現在のスレッドに関連付けられているコンテキストを取り出します。このコンテキストは、アプリケーションによって作成および管理される他のスレッドを初期化するために使用できます。
オブジェクトはスレッドを作成するときにORBでこの操作を呼び出して、オブジェクトがスレッドに渡すことができるシステム・コンテキスト情報を取得します。この操作は、すでにコンテキストを持っているスレッドから呼び出される必要があります。たとえば、メソッドがディスパッチされたスレッドはすでにコンテキストを持っています。
thread.context = TP::orb()->get_ctx();
関連項目
CORBA::ORB::set_ctx
CORBA::ORB::clear_ctx
CORBA::ORB::get_default_context
概要
デフォルト・コンテキストへのリファレンスを返します。
C++バインディング
void CORBA::ORB::get_default_context (
CORBA::Context_out ContextObj);
引数
ContextObj
デフォルト・コンテキストへのリファレンス。
説明
このメンバー関数は、デフォルト・コンテキストへの参照を返します。このコンテキスト参照が不要になったときは、CORBA::releaseメンバー関数を使用して解放する必要があります。
戻り値
なし。
関連項目
CORBA::Context::get_one_value
CORBA::Context::get_values
CORBA::ORB::get_next_response
概要
次に完了する遅延同期リクエストを判別および報告します。
C++バインディング
void CORBA::ORB::get_next_response (
CORBA::Request_out RequestObj);
引数
RequestObj
次に完了するリクエストへのリファレンス。
説明
このメンバー関数は、完了する次にリクエストへの参照を返します。完了したリクエストがない場合、この関数はリクエストが完了するまで待機します。このメンバー関数は、キューの次のリクエストを返します。これと対照的にCORBA::Request::get_responseメンバー関数は、特定のリクエストが完了するまで待機します。このリクエストが不要になったときは、CORBA::releaseメンバー関数でリクエストを解放しなければなりません。
戻り値
なし。
関連項目
CORBA::ORB::poll_next_response
CORBA::Request::get_reponse
CORBA::ORB::inform_thread_exit
概要
アプリケーション管理スレッドに関連付けられたリソースを解放できることをOracle Tuxedoシステムに通知します。このメソッドは、マルチスレッド・サーバー・アプリケーションの開発をサポートします。
C++バインディング
void CORBA::ORB::inform_thread_exit(CORBA::TID threadId)
パラメータ
threadId
削除中のアプリケーション管理スレッドの論理スレッドID。
戻り値
なし。
説明
このメソッドは、次の状態をOracle Tuxedoシステムに通知します。
注意:
pOrb->inform_thread_exit(thread.threadId);
CORBA::ORB::list_initial_services
概要
初期リファレンス・メカニズムで利用可能なリファレンスがどのオブジェクトにあるかを判別します。
C++バインディング
typedef string ObjectId;
typedef sequence
ObjectId ObjectIdList;
ObjectIdList list_initial_services ();
引数
ObjectId
オブジェクトID。
list_initial_services ()
オブジェクト型を定義します。
説明
この操作は、初期参照メカニズムで使用可能な参照がどのオブジェクトにあるかを判別するためにアプリケーションで使用されます。この操作は、ObjectIdのシーケンスであるObjectIdListを返します。ObjectIdには文字列型が付きます。
初期化時に使用可能にする必要がある各オブジェクトには、それを表す文字列値が割り当てられます。また、IDの定義に加えて、返されるオブジェクトの型が必ず定義されます。たとえば、InterfaceRepositoryは型Repositoryのオブジェクトを返し、NameServiceCosNamingContextオブジェクトを返します。
戻り値
ObjectIdのシーケンス。
関連項目
CORBA::ORB::resolve_initial_references
CORBA::ORB::object_to_string
概要
オブジェクト参照の文字列表現を生成します。
C++バインディング
char * CORBA::ORB::object_to_string (
CORBA::Object_ptr ObjRef);
引数
ObjRef
文字列として表すオブジェクト参照。
説明
このメンバー関数は、オブジェクト参照の文字列表現を生成します。呼出し側のプログラムでは、文字列のメモリーが不要になったら、CORBA::string_freeメンバー関数で解放する必要があります。
戻り値
指定されたオブジェクト参照を表す文字列。
CORBA::Object_ptr op = TP::create_object_reference(
"IDL:Teller:1.0", "MyTeller");
char* objstr = TP::orb()->object_to_string(op);
関連項目
CORBA::ORB::string_to_object
CORBA::string_free
CORBA::ORB::perform_work
概要
ORBがサーバー関連の作業を実行できるようにします。
C++バインディング
void CORBA::ORB::perform_work ();
引数
なし。
例外
ORBが停止した後に、work_pendingおよびperform_work()を呼び出すと、BAD_INV_ORDER例外が発生します。アプリケーションでは、この例外を検出して、いつポーリング・ループを終了するかを判定します。
説明
この操作は、メイン・スレッドによって呼び出された場合にORBがサーバー関連の作業を実行できるようにします。それ以外の場合は、何も行いません。
work_pending()およびperform_work()操作を使用すると、ORBなどのアクティビティのメイン・スレッドを多重化する単純なポーリング・ループを記述できます。このようなループは主に、シングル・スレッドのサーバーで必要になります。マルチスレッドのサーバーでポーリング・ループが必要になるのは、メイン・スレッドの使用が必要なほかのコードとORBの両方がある場合のみです。このようなポーリング・ループについては、以下の例を参照してください。
戻り値
なし。
関連項目
CORBA::ORB::work_pending
次に、ポーリング・ループの例を示します。
// C++
for (;;) {
if (orb->work_pending()) {
orb->perform_work();
}
//ほかの作業を実行させるか、
//またはスリープ状態にする
}
CORBA::ORB::poll_next_response
概要
完了したリクエストが未処理かどうかを判別します。
C++バインディング
CORBA::Boolean CORBA::ORB::poll_next_response ();
引数
なし。
説明
このメンバー関数は、未処理(保留中)の完了したリクエストがあるかどうかを報告します。リクエストを削除するわけではありません。完了したリクエストが未処理の場合、次にCORBA::ORB::get_next_responseメンバー関数を呼び出すと、待機することなくリクエストが確実に返されます。完了したリクエストに未処理のものがない場合、直ちにCORBA::ORB::poll_next_responseメンバー関数が返されます(ブロッキング)。
戻り値
完了したリクエストが未処理の場合、関数はCORBA_TRUEを返します。
完了したリクエストに未処理のものがない場合、関数はCORBA_FALSEを返します。
関連項目
CORBA::ORB::get_next_response
CORBA::ORB::resolve_initial_references
概要
初期サービスのオブジェクト参照を取得します。
C++バインディング
Object resolve_initial_references ( in ObjectId identifier )
raises (InvalidName);
exception InvalidName {};
引数
identifier
リファレンスが必要なオブジェクトを識別する文字列。
説明
この操作は、初期サービスのオブジェクト参照を取得するためにアプリケーションで使用されます。インタフェースはネーミング・サービスの解決方法によって異なります。つまり、ObjectId (文字列)を複雑なネーミング・サービスの構成(名前の構成要素の文字列ペアを格納する構造体のシーケンス)に置き換えるかどうかで異なります。この簡素化の方法を実行すると、ネームスペースは1つのコンテキストに減ります。
ObjectIdは、参照が必要なオブジェクトを識別する文字列です。初期リファレンスを取得するインタフェースの簡素さを維持するには、限定したオブジェクトのセットのみに、上記の方法で見つかったリファレンスを格納します。ORB識別子とは異なり、ObjectIdネームスペースには慎重な管理が必要になります。これを達成するため、OMGは、将来、このインタフェースを介してアプリケーションで必要になるサービスを定義し、それらのサービスの名前を指定します。
現在、予約されているObjectIdは、RootPOAPOACurrentInterfaceRepositoryNameServiceTradingServiceSecurityCurrentTransactionCurrentおよびDynAnyFactoryです。
アプリケーションでは、resolve_initial_referencesから返されるオブジェクト参照をObjectIdでリクエストされた型に限定します。たとえば、InterfaceRepositoryの場合、返されるオブジェクトはRepository型に限定されます。
戻り値
初期サービスのオブジェクト参照。
関連項目
CORBA::ORB::list_initial_services
CORBA::ORB::send_multiple_requests_deferred
概要
遅延同期リクエストのシーケンスを送信します。
C++バインディング
void CORBA::ORB::send_multiple_requests_deferred (
const CORBA::ORB::RequestSeq & Reqs);
引数
Reqs
送信するリクエストのシーケンス。シーケンスにリクエスト参照を挿入する方法の詳細は、「使用方法」という項の「CORBA::ORB::RequestSeq」を参照してください。
説明
このメンバー関数はリクエストのシーケンスを送信し、操作が完了するまで待機することなく呼出し側に制御を返します。呼出し側は、CORBA::ORB::poll_next_responseCORBA::ORB::get_next_responseまたはCORBA::Rquest::get_response、あるいは3つすべてを使用して、操作が完了したかどうか、および出力引数が更新されたかどうかを判別します。
戻り値
なし。
関連項目
CORBA::Request::get_response
CORBA::ORB::get_next_response
CORBA::ORB::send_multiple_requests_oneway
CORBA::ORB::send_multiple_requests_oneway
概要
一方向の遅延同期リクエストのシーケンスを送信します。
C++バインディング
void CORBA::ORB::send_multiple_requests_oneway (
const CORBA::RequestSeq & Reqs);
引数
Reqs
送信するリクエストのシーケンス。シーケンスにリクエスト参照を挿入する方法の詳細は、「使用方法」という項の「CORBA::ORB::RequestSeq」を参照してください。
説明
このメンバー関数はリクエストのシーケンスを送信し、操作が完了するまで待機することなく呼出し側に制御を返します。呼出し側がレスポンスを待機することはなく、出力引数の更新を要求することもありません。
戻り値
なし。
関連項目
CORBA::ORB::send_multiple_requests_deferred
CORBA::ORB::set_ctx
概要
現在のスレッドのコンテキストを設定します。このメソッドは、マルチスレッド・サーバー・アプリケーションの開発をサポートします。
C++バインディング
void set_ctx(CORBA::ORB::Ctx aContext)
パラメータ
aContext
現在のスレッドに関連付けるコンテキスト。
戻り値
なし。
説明
このメソッドは、現在のアプリケーション管理スレッドのコンテキストを設定します。指定するコンテキスト・パラメータは、Oracle Tuxedoシステムによって管理されている実行済スレッド、または初期化済アプリケーション管理スレッドで取得されている必要があります。
注意:
set_ctxメソッドは、Oracle Tuxedoシステムが管理しているスレッドでは呼び出さないでください。Oracle Tuxedoシステムでは、管理しているスレッドに対して適切にコンテキストを自動的に伝達します。Oracle Tuxedoシステムが管理しているスレッドで、このメソッドがアプリケーションによって呼び出された場合、BAD_PARAM例外がスローされます。
TP::orb()->set_ctx(thread->context);
関連項目
CORBA::ORB::get_ctx()
CORBA::ORB::clear_ctx()
CORBA::ORB::string_to_object
概要
CORBA::ORB::object_to_string操作によって生成された文字列を変換し、対応するオブジェクト参照を返します。
C++バインディング
Object string_to_object ( in string str );
引数
str
CORBA::ORB::object_to_string操作によって生成された文字列。
説明
この操作は、CORBA::ORB::object_to_string操作によって生成された文字列を変換するためにアプリケーションで使用され、対応するオブジェクト参照を返します。
オブジェクト参照の文字列形式がORBで確実に認識されるようにするには、文字列を生成する際にそのORBのobject_to_string操作を使用する必要があります。string_to_object操作では、IORのURL、corbaloc、corbalocs、およびcorbanamesの各形式をオブジェクト参照に変換できます。変換に失敗した場合、string_to_object操作によって、次のいずれかのマイナー・コードのBAD_PARAM標準例外が発生します。
準拠するすべてのORBについて、objがオブジェクトへの有効な参照である場合、2つの操作が同じORBで実行されると、string_to_object(object_to_string(obj))は同じオブジェクトへの有効な参照を返します。ORBがサポートするIOPに完全準拠する場合は、2つの操作が異なるORBで実行されても設定は同じままになります。
戻り値
オブジェクト参照を返します。
関連項目
CORBA::ORB::object_to_string
CORBA::ORB::work_pending
概要
サーバー関連の作業を実行するためにORBでメイン・スレッドが必要かどうかを示す値を返します。
C++バインディング
CORBA::boolean CORBA::ORB::work_pending ();
引数
なし。
説明
この操作は、サーバー関連の作業を実行するためにORBでメイン・スレッドが必要かどうかを示す値を返します。
戻り値
結果がTRUEの場合は、サーバー関連の作業を実行するためにORBでメイン・スレッドが必要であることを示します。結果がFALSEの場合は、ORBでメイン・スレッドが不要であることを示します。
関連項目
CORBA::ORB::perform_work
ORB初期化メンバー関数
このメンバー関数のC++へのマッピングは次のとおりです。
class CORBA {
static CORBA::ORB_ptr ORB_init(int& argc, char** argv,
const char* orb_identifier = 0,
const char* -ORBport nnn);
<appl-name> [-ORBid {BEA_IIOP | BEA_TOBJ} \
[-ORBInitRef <ObjectID>=<ObjectURL> [*]]
[-ORBDefaultInitRef <ObjectURL>]
[-ORBport port-number] \
[-ORBsecurePort port-number] \
[-ORBminCrypto {0 | 40 | 56 | 128}] \
[-ORBmaxCrypto {0 | 40 | 56 | 128}] \
[-ORBmutualAuth] \
[-ORBpeerValidate {detect | warn | none}] \
[appl-options]
};
CORBA::ORB_init
概要
ORBの操作を初期化します。
C++バインディング
static CORBA::ORB_ptr ORB_init(int& argc, char** argv,
const char* orb_identifier = 0);
引数
argc
argv内の文字列の数。
argv
この引数は、文字列の無制限配列(char **)として定義します。配列内の文字列の数は、argcパラメータで渡されます。
orb_identifier
orb_identifierパラメータを指定する場合、「Tobj_Bootstrap」という項で定義されているように、"BEA_IIOP"はリモート・クライアントを明示的に指定し、"BEA_TOBJ"はネイティブ・クライアントを明示的に指定します。
説明
このメンバー関数はORBの操作を初期化し、ORBへのポインタを返します。プログラムでORBの操作が完了したら、CORBA::releaseメンバー関数を使用して、CORBA::ORB_ptr ORB_initから返されたORBポインタに割り当てられたリソースを解放します。
返されたORBは、クライアント・タイプ(リモートまたはネイティブ)とサーバーのポート番号の操作方法を決定する2つの情報で初期化されています。クライアント・タイプは、orb_identifier引数、argv引数またはシステム・レジストリで指定できます。サーバーのポート番号は、argv引数で指定できます。
通常、引数argcargvは、メイン・プログラムに渡されたパラメータと同じです。C++での指定のように、これらのパラメータには、クライアントを起動したコマンド行の文字列トークンが格納されます。2つのORBオプションは、以下の例で示すように、トークンのペアをそれぞれ使用してコマンド行で指定できます。
クライアント・タイプ
ORB_init関数は、次の手順でORBのクライアント・タイプを判別します。
1.
orb_identifier引数が指定されている場合、ORB_initは、文字列が"BEA_IIOP""BEA_TOBJ"かによって、クライアント・タイプがネイティブかリモートかを判別します。orb_identifier文字列がある場合、argvの -ORBidパラメータはすべて無視または削除されます。
2.
orb_identifierが指定されていないか、または明示的にゼロに指定されている場合、ORB_initargc/argvのエントリを確認します。argv"-ORBid"のエントリがある場合、次のエントリは、リモートまたはネイティブを表す"BEA_IIOP""BEA_TOBJ"かのどちらかになります。このエントリのペアが出現するのは、コマンド行に"-ORBid BEA_IIOP"または"-ORBid BEA_TOBJ"のどちらかがある場合です。
3.
クライアント・タイプがargc/argvで指定されていない場合、ORB_initは、システム・レジストリ内のデフォルトのクライアント・タイプ(BEA_IIOPまたはBEA_TOBJ)を使用します。システム・レジストリは、Oracle Tuxedoのインストール時に初期化されています。
サーバーのポート
Oracle Tuxedoリモート共同クライアント/サーバーの場合、IIOPをサポートするには、定義上、サーバー部分に対して作成されたオブジェクト参照にホストとポートが格納されている必要があります。一時オブジェクト参照の場合は、任意のポートで十分であり、ORBで動的に取得できますが、永続オブジェクト参照の場合、これでは十分ではありません。永続的な参照の場合、ORBの再起動後に同じポートを指定する必要があります。つまり、ORBでは、オブジェクト参照を作成したものと同じポートでリクエストを受け付ける必要があります。したがって、特定のポートを使用するようにORBを構成するためのなんらかの方法が必要です。
通常、システム管理者は、動的範囲ではなくポート番号の「ユーザー」範囲からクライアントのポート番号を割り当てます。これにより、共同クライアント/サーバーが競合するポートを使用するのを防ぐことができます。
ポート番号を特定するために、ORB_initは、argvパラメータの"-ORBport"トークンとそれに続く数値のトークンを検索します。たとえば、クライアントの実行可能ファイルの名前がsherryの場合、コマンド行では次のようにサーバーのポート937に指定します。
sherry -ORBport 937
ARGVパラメータの考慮事項
C++の場合、argvパラメータの処理順序がアプリケーションで重要になることがあります。アプリケーションで認識されないargvパラメータをアプリケーションで確実に処理不要にするには、ORB初期化関数を呼び出してから、残りのパラメータを処理する必要があります。したがって、ORB_initを呼び出した後、argvおよびargcパラメータは、ORBで認識された引数を削除するために変更されています。この際に重要なのは、ORB_init関数が、argvリストのパラメータの参照の順序変更または削除しかできない点です。この制限が設けられたのは、argvリストの一部の解放を試行したり、パラメータのargvリストの拡張を試行したりすることで発生する可能性のあるメモリー管理上の問題を防ぐためです。このような理由から、argvは、char**&ではなくchar**として渡されます。
注意:
CORBA::ORB_initから返されたポインタに割り当てられたリソースを解放するには、CORBA::releaseメンバー関数を使用します。
戻り値
CORBA::ORBへのポインタ。
例外
なし。
 
ORB
概要
Oracle TuxedoのCORBAオブジェクトにアクセスしたり、CORBAオブジェクトを提供するために、Oracle Tuxedo CORBA C++ ORBに基づいてアプリケーションを構成します。
構文
<appl-name> [-ORBid {BEA_IIOP | BEA_TOBJ} \
[-ORBInitRef <ObjectID>=<ObjectURL> [*]]
[-ORBDefaultInitRef <ObjectURL>]
[-ORBport port-number] \
[-ORBsecurePort port-number] \
[-ORBminCrypto {0 | 40 | 56 | 128}] \
[-ORBmaxCrypto {0 | 40 | 56 | 128}] \
[-ORBmutualAuth] \
[-ORBpeerValidate {detect | warn | none}] \
[appl-options]
説明
Oracle Tuxedo CORBA C++ ORBはOracle Tuxedoが提供するライブラリです。このライブラリを使用すると、IIOPまたはIIOP-SSLを使用してOracle Tuxedoのオブジェクトにアクセスしたり、このオブジェクトを提供するためのCORBAベースのアプリケーションを開発できます。ORBのコマンド行オプションを使用してカスタマイズすることもできます。
パラメータ
[–ORBid {BEA_IIOP | BEA_TOBJ}]
BEA_IIOPは、IIOPまたはIIOP-SSLプロトコルで通信するクライアントまたはサーバー環境をサポートするようにORBを構成することを明示的に指定します。
BEA_TOBJは、Oracle Tuxedoドメイン内でTGIOPプロトコルのみで通信可能なネイティブ・クライアント環境をサポートするようにORBを構成することを明示的に指定します。
上記のパラメータを指定しない場合、ORBは、ORB自身がデプロイされ、その環境で使用するように構成される環境を検出します。
[–ORBInitRef ObjectId=ObjectURL]
ORB初期参照引数である-ORBInitRefでは、初期サービスに対して任意のオブジェクト参照を指定できます。
ObjectIDは、CORBA仕様で定義されるサービスの既知のオブジェクトIDを表します。このメカニズムにより、ORBのインストール時に定義しなかった、新しい初期サービスのObject IDでORBを構成できます。
ObjectURLには、CORBA仕様で定義するCORBA::ORB::string_to_object操作でサポートされている任意のURLスキームを指定できます。URLの構文に誤りがある場合、または実装で定義された方法では無効であると判別された場合、CORBA::ORB_initによって、表14-2にリストするCORBA::BAD_PARAM標準例外が生成されます。
 
[–ORBDefaultInitRef <ObjectURL>]
ORBのデフォルト初期参照引数である-ORBDefaultInitRefは、-ORBInitRefを使用して明示的に指定されていない初期参照の解決を支援します。また、現在のTobj_Bootstrapオブジェクトに指定されているIIOPリスナー・アドレスと同様の機能を備えています。
-ORBInitRef引数とは異なり、-ORBDefaultInitRefでは、スラッシュ(/)文字と文字列化したオブジェクト・キーを追加した後に、初期オブジェクト参照を識別するための新しいURLを形成するURLが必要です。たとえば、デフォルト初期参照引数として次が指定されているとします。
-ORBDefaultInitRef corbaloc:555objs.com
 
サービスの初期参照を取得するためのORB::resolve_initial_references(“NotificationService”)の呼出しでは、次のような新しいURLが作成されます。
corbaloc:555objs.com/NotificationService
 
ORB::resolve_initial_references操作の実装は、新しく作成されたURLを受け取り、サービスの初期参照を取得するためにCORBA::ORB::string_to_objectを呼び出します。
-ORBDefaultInitRef引数の値として指定するURLには、複数の場所を含めることができます。これは、Tobj_Bootstrapオブジェクトで使用される場所のリストに提供されている機能とほぼ同じです。この場合、ORBではURLの構文規則に基づいてURLの場所を処理します。たとえば、デフォルト初期参照引数として次が指定されているとします。
-ORBDefaultInitRef corbaloc:555objs.com,555Backup.com
 
サービスの初期参照を取得するためのORB::resolve_initial_references(“NameService”)の呼出しでは、次のいずれかの新しいURLが作成されます。
corbaloc:555objs.com/NameService
 
または
corbaloc:555Backup.com/NameService
結果のURLはその後、サービスの初期参照を取得するためにCORBA::ORB::string_to_objectに渡されます。
[–ORBminCrypto [0 | 40 | 56 | 128]]
これは、ネットワーク・リンクを確立する際に必要な暗号化の最小レベルです。ゼロ(0)は暗号化なしを意味し、40、56および128は暗号化キーの長さ(ビット単位)を示します。この暗号化の最小レベルを満たすことができない場合、リンクの確立は失敗します。
デフォルトは0です。
[–ORBmaxCrypto [0 | 40 | 56 | 128]]
これは、ネットワーク・リンクを確立する際に許可される暗号化の最大レベルです。ゼロ(0)は暗号化なしを意味し、40、56および128は暗号化キーの長さ(ビット単位)を示します。デフォルトは、ライセンスで規定されている機能のとおりです。-ORBmaxCryptoまたは-ORBmaxCryptoオプションは、国際版または米国/カナダ版のOracle Tuxedoセキュリティ・アドオン・パッケージがインストールされている場合にのみ使用可能です。
[–ORBmutualAuth]
リモート・アプリケーションからSSL接続を受け付けるときに証明書ベースの認証を有効にするかどうかを指定します。
-ORBmutualAuthオプションは、国際版または米国/カナダ版のOracle Tuxedoセキュリティ・アドオン・パッケージがインストールされている場合にのみ使用可能です。
[–ORBpeerValidate {detect | warn | none}]
Oracle Tuxedo ORBによって開始されたアウトバウンド接続のピアのデジタル証明書がSecure Sockets Layer (SSL)プロトコル・ハンドシェイクの一部として受信された場合に、Oracle Tuxedo CORBA ORBがどのように動作するかを指定します。検証は安全な接続の開始側のみで実行され、サーバーのデジタル証明書にあるドメイン名で指定されたものと同じネットワーク・アドレスにピア・サーバーが実際にあることを確認します。この検証は、技術的にはSSLプロトコルの一部ではなく、Webブラウザで行われるチェックと同様のものです。
値がdetectの場合、Oracle Tuxedo CORBA ORBは、接続に使用されるオブジェクト参照で指定されたホストがピアのデジタル証明書で指定されたドメイン名と一致しているかどうかを検証します。照合に失敗した場合、ORBはピアの認証を拒否し、接続を破棄します。このチェックによって、介在者の攻撃から保護します。
値がwarnの場合、Oracle Tuxedo CORBA ORBは、接続に使用されるオブジェクト参照で指定されたホストがピアのデジタル証明書で指定されたドメイン名と一致しているかどうかを検証します。照合に失敗した場合、ORBはユーザー・ログにメッセージを書き込み、接続処理を続行します。
値がnoneの場合、Oracle Tuxedo CORBA ORBは、ピアの検証を行わずに接続処理を続行します。
-ORBpeerValidateオプションは、国際版または米国/カナダ版のOracle Tuxedoセキュリティ・アドオン・パッケージがインストールされている場合にのみ使用可能です。
指定しない場合、デフォルトはdetectです。
[–ORBport port-number]
リモートCORBAクライアントからの接続を受け付けるためにORBで使用されるネットワーク・アドレスを指定します。システム通常、管理者は、動的範囲ではなくポート番号の「ユーザー」範囲からクライアントのポート番号を割り当てます。これにより、共同クライアント/サーバーが競合するポートを使用するのを防ぐことができます。
Oracle Tuxedo CORBA ORBが永続オブジェクト参照を作成する場合は、このパラメータが必要です。永続オブジェクト参照は、ORBが再起動した場合でも、オブジェクト参照に格納されているものと同じポートで処理される必要があります。一時オブジェクト参照の場合は、任意のポートで十分であり、ORBで動的に取得できます。
port-numberは、Oracle Tuxedo CORBA ORBプロセスが受信リクエストをリスニングするTCPポート番号です。port-numberには、0から65535までの数字を指定します。
[–ORBsecurePort port-number]
IIOPリスナー/ハンドラがSecure Sockets Layerプロトコルを使用して安全な接続をリスニングするために使用する必要があるポート番号を指定します。ポート番号なしでコマンド行オプションを指定した場合、OMGによって割り当てられたポート番号684がSSL接続に使用されます。
port-numberは、Oracle Tuxedo CORBA ORBプロセスが受信リクエストをリスニングするTCPポート番号です。port-numberには、0から65535までの数字を指定します。
 
Oracle Tuxedo CORBA ORBへの安全な接続のみを許可するように構成するには、管理者は、
-ORBport-ORBsecurePortで指定するポート番号を同じ値に設定します。
-ORBsecurePortオプションは、国際版または米国/カナダ版のOracle Tuxedoセキュリティ・アドオン・パッケージがインストールされている場合にのみ使用可能です。
移植性
Oracle Tuxedo CORBA ORBは、UNIXおよびMicrosoft Windowsオペレーティング・システム上でOracle Tuxedoが提供するクライアントまたはサーバーとしてサポートされています。また、Windows XPオペレーティング・システム上でOracle Tuxedoが提供するクライアントとしてサポートされています。
相互運用性
Oracle Tuxedo CORBA ORBは、TCP/IP接続でバージョン1.0、1.1または1.2のGIOPプロトコルをサポートする、IIOP準拠のORBと相互運用します。また、Oracle Tuxedo CORBA ORBは、オブジェクト参照でのTAG_SSL_SEC_TRANSタグ付きコンポーネントの使用と、バージョン3のSecure Sockets Layerプロトコルをサポートする、IIOP-SSL準拠のORBと相互運用します。
C++サンプル・コード
ChatClient –ORBid BEA_IIOP –ORBport 2100
-ORBDefaultInitRef corbaloc:piglet:1900
-ORBInitRef TraderService=corbaloc:owl:2530
–ORBsecurePort 2100
-ORBminCrypto 40
–ORBmaxCrypto 128
TechTopics
Javaサンプル・コード
java –DORBDefaultInitRef=corbalocs:piglet:1900
.....-DORBInitRef=TraderService=corbaloc:owl:2530
-Dorg.omg.CORBA.ORBPort=1948
-classpath=%CLASSPATH% client
関連項目
ISL
Policyメンバー関数
ポリシーは、操作に関する特定の選択をORBに通知するために使用されるオブジェクトです。この情報には、CORBAモジュールで定義されているPolicyインタフェースから派生したインタフェースを使用して、構造化された方法でアクセスします。
注意:
次に示すCORBA::Policy操作および構造体は、通常、プログラマにとっては必須ではありません。通常、生成されたインタフェースには、仕様に関連する情報が格納されています。ポリシー・オブジェクトは、特定のファクトリ、またはCORBA::create_policy操作を使用することで作成できます。
ポリシー・オブジェクトのC++へのマッピングは次のとおりです。
class CORBA
{
class Policy
{
public:
copy();
void destroy();
}; //Policy
typedef sequence<Policy>PolicyList;
}; // CORBA
PolicyListは、他のC++シーケンス・マッピングと同様に使用されます。シーケンスの使用方法は、「シーケンス」を参照してください。
関連項目:
POAポリシーおよびCORBA::ORB::create_policy
CORBA:Policy::copy
概要
ポリシー・オブジェクトをコピーします。
C++バインディング
CORBA::Policy::copy();
引数
なし。
説明
この操作は、ポリシー・オブジェクトをコピーします。コピーでは、ポリシーとドメインまたはオブジェクトとの間にあった関係は保持されません。
注意:
戻り値
なし。
CORBA::Policy::destroy
概要
ポリシー・オブジェクトを破棄します。
C++バインディング
void CORBA::Policy::destroy();
引数
なし。
例外
ポリシー・オブジェクトを破棄できないと判別された場合、CORBA::NO_PERMISSION例外が発生します。
説明
この操作は、ポリシー・オブジェクトを破棄します。破棄できるかどうかは、ポリシー・オブジェクトによって判別されます。
注意:
戻り値
なし。
PortableServerメンバー関数
PortableServerメンバー関数のC++へのマッピングは次のとおりです。
// C++
class PortableServer
{
public:
class LifespanPolicy;
class IdAssignmentPolicy;
class POA::find_POA
class reference_to_id
class POAManager;
class POA;
class Current;
class virtual ObjectId
class ServantBase
};
ObjectId
特定の抽象CORBAオブジェクトを識別するためにPOAおよびユーザー指定の実装で使用される値。ObjectId値は、POAで割り当てて管理することも、実装で割り当てて管理することもできます。ObjectId値はリファレンスによってカプセル化されるので、クライアントからは隠ぺいされます。ObjectIdには標準の形式がないため、POAでは未解釈のオクテット・シーケンスとして管理されます。
以下のセクションでは、これ以外のクラスについて説明します。
PortableServer::POA::activate_object
概要
個別のオブジェクトを明示的にアクティブ化します。
C++バインディング
ObjectId * activate_object (
Servant p_servant);
引数
p_servant
インタフェースのC++実装クラスのインスタンス。
例外
指定のサーバントがすでにアクティブ・オブジェクト・マップにある場合、ServantAlreadyActive例外が発生します。
注意:
説明
この操作は、ObjectIdを生成し、ObjectIdおよび指定のサーバントをアクティブ・オブジェクト・マップに入れることにより、個々のオブジェクトを明示的にアクティブ化します。
注意:
戻り値
関数が成功した場合、ObjectIdが返されます。
次の例では、最初の構造体がユーザー定義のコンストラクタでサーバントを作成します。2番目の構造体は、オブジェクトに対するリクエストの処理にサーバントを使用できることをPOAに通知します。POAは、そのオブジェクトについて作成したObjectIdを返します。3番目の文は、POAにIMPLICIT_ACTIVATIONポリシー(Oracle Tuxedoソフトウェアのバージョン4.2でのみサポートされているポリシー)があると想定し、オブジェクトへのリファレンスを返します。これにより、このリファレンスは呼出し用にクライアントで処理が可能になります。クライアントがリファレンスを呼び出すと、作成されたばかりのサーバントにリクエストが返されます。
MyFooServant* afoo = new MyFooServant(poa,27);
PortableServer::ObjectId_var oid =
poa->activate_object(afoo);
Foo_var foo = afoo->_this();
PortableServer::POA::activate_object_with_id
概要
指定のObjectIdを持つ個々のオブジェクトをアクティブ化します。
C++バインディング
void activate_object_with_id (
const ObjectId & id,
Servant p_servant);
引数
id
その操作が呼び出されたオブジェクトを識別するObjectId
p_servant
インタフェースのC++実装クラスのインスタンス。
例外
ObjectId値で示されたCORBAオブジェクトがそのPOAですでにアクティブである場合、ObjectAlreadyActive例外が発生します。
サーバントがすでにアクティブ・オブジェクト・マップにある場合、ServantAlreadyActive例外が発生します。
注意:
POAにSYSTEM_IDポリシーがあり、ObjectId値がシステムによって生成されていないか、そのPOAについて生成されていないことが検出された場合、BAD_PARAMシステム例外が発生することがあります。こうした無効なObjectId値をすべて検出するために、ORBは必要ありません。ただし、POAについてシステムによって以前に生成されていないObjectId値を持つSYSTEM_IDポリシーがPOAにある場合、または同じPOAの以前のインスタンスについて、PERSISTENTポリシーもPOAにある場合、移植可能なアプリケーションではactivate_object_with_idをPOAで呼び出さないでください。
説明
この操作は、指定のObjectIdと指定のサーバントとの関連付けをアクティブ・オブジェクト・マップに入れます。
注意:
戻り値
なし。
MyFooServant* afoo = new MyFooServant(poa, 27);
PortableServer::ObjectId_var oid =
PortableServer::string_to_ObjectId("myLittleFoo");
poa->activate_object_with_id(oid.in(), afoo);
Foo_var foo = afoo->_this();
PortableServer::POA::create_id_assignment_policy
概要
IdAssignmentPolicyインタフェースを持つオブジェクトを取得して、ユーザーがPOA::create_POA操作にオブジェクトを渡すことができるようにします。
C++バインディング
IdAssignmentPolicy_ptr
PortableServer::POA::create_id_assignment_policy (
PortableServer::IdAssignmentPolicyValue value)
引数
value
ObjectIdがアプリケーションによってのみ割り当てられることを示すPortableServer::USER_ID、またはObjectIdがシステムによってのみ割り当てられることを示すPortableServer::SYSTEM_IDのいずれかの値。
説明
POA::create_id_assignment_policy操作は、IdAssignmentPolicyインタフェースを持つオブジェクトを取得します。POA::create_POA操作に渡されると、このポリシーは、作成されるPOAのObjectIdがアプリケーションによって生成されるか、ORBによって生成されるかを指定します。指定可能な値は次のとおりです。
PortableServer::USER_ID - そのPOAで作成されるオブジェクトには、アプリケーションによってのみObjectIdが割り当てられます。
PortableServer::SYSTEM_ID - そのPOAで作成されるオブジェクトには、POAによってのみObjectIdが割り当てられます。POAにPERSISTENT LifespanPolicyもある場合は、割り当てられたObjectIdが、同じPOAのすべてのインスタンスを通じて一意である必要があります。
IdAssignmentPolicyがPOAの作成時に指定されていない場合、デフォルトはSYSTEM_IDです。
注意:
戻り値
Id Assignmentポリシーを返します。
PortableServer::POA::create_lifespan_policy
概要
LifespanPolicyインタフェースを持つオブジェクトを取得して、ユーザーがPOA::create_POA操作にオブジェクトを渡すことができるようにします。
C++バインディング
LifespanPolicy_ptr
PortableServer::POA::create_lifespan_policy (
PortableServer::LifespanPolicyPolicyValue value)
引数
value
ObjectIdがアプリケーションによってのみ割り当てられることを示すPortableServer::USER_ID、またはObjectIdがシステムによってのみ割り当てられることを示すPortableServer::SYSTEM_IDのいずれかの値。
説明
POA::create_lifespan_policy操作を使用してLifespanPolicyインタフェースを持つオブジェクトを取得し、POA::create_POA操作に渡して、作成されたPOAで実装されるオブジェクトの有効期間を指定します。指定可能な値は次のとおりです。
TRANSIENT - POAで実装されるオブジェクトは、それらが最初に作成されたプロセスの後まで存在することはできません。POAが非アクティブ化されると、そのPOAから生成されたオブジェクト参照を使用した場合、OBJECT_NOT_EXIST例外が発生します。
PERSISTENT - POAで実装されるオブジェクトは、それらが最初に作成されたプロセスの後も存在できます。
LifespanPolicyオブジェクトがPOA::create_POAに渡されない場合、有効期間ポリシーのデフォルトはTRANSIENTです。
注意:
戻り値
LifespanPolicyを返します。
PortableServer::POA::create_POA
概要
新しいPOAをターゲットのPOAの子として作成します。
C++バインディング
POA_ptr PortableServer::create_POA (
const char * adapter_name,
POAManager_ptr a_POAManager,
const CORBA::PolicyList & policies)
引数
adapter_name
作成するPOAの名前。
a_POAManager
新しいPOAManagerが作成されて新しいPOAに関連付けられることを示すNULL値か、または既存のPOAManagerへのポインタ。
policies
新しいPOAに関連付けるポリシー・オブジェクト。
例外
AdapterAlreadyExists
ターゲットのPOAに指定の名前を持つ子POAがすでにある場合に発生します。
InvalidPolicy
指定したポリシー・オブジェクトのいずれかがORB実装について有効でない場合、競合するポリシー・オブジェクトを指定した場合、または指定したポリシー・オブジェクトのいずれかで事前の管理作業が必要であるにもかかわらず実行されていない場合に発生します。この例外には、問題がある最初のポリシー・オブジェクトのポリシー・パラメータ値の索引が含まれます。
IMP_LIMIT
CORBA::ORB_init操作で説明したようにポートを設定せずに、PERSISTENTのLifespanPolicyでプログラムがPOAを作成しようとした場合に発生します。
説明
この操作は、新しいPOAをターゲットPOAの子として作成します。指定する名前は一意である必要があり、同じ親POAを持つ他のPOAと新しいPOAを識別します。
a_POAManagerパラメータがNULLである場合、新しいPortableServer::POAManagerオブジェクトが作成され、新しいPOAに関連付けられます。それ以外の場合は、指定したPOAManagerオブジェクトが新しいPOAに関連付けられます。POAManagerオブジェクトは、属性名the_POAManagerを使用して取得できます。
指定したポリシー・オブジェクトはPOAに関連付けられ、その動作を制御するために使用されます。ポリシー・オブジェクトは実質的に、この操作が戻る前にコピーされるため、アプリケーションではPOAの使用中にそれらを自由に破棄できます。ポリシーは、親POAから継承されません
注意:
戻り値
作成されたPOAへのポインタを返します。
例1
この例では、子POAは親POAと同じマネージャを使用します。この場合、子POAの状態は親と同じになります。たとえば、親がアクティブ化されていれば、子もアクティブ化されます。
CORBA::PolicyList policies(2);
policies.length (1);
policies[0] = rootPOA->create_lifespan_policy(
PortableServer::LifespanPolicy::TRANSIENT);
PortableServer::POA_ptr poa =
rootPOA->create_POA("my_little_poa",
rootPOA->the_POAManager, policies);
例2
この例では、新しいPOAがルートPOAの子として作成されています。
CORBA::PolicyList policies(2);
policies.length (1);
policies[0] = rootPOA->create_lifespan_policy(
PortableServer::LifespanPolicy::TRANSIENT);
PortableServer::POA_ptr poa =
rootPOA->create_POA("my_little_poa",
PortableServer::POAManager::
_nil(), policies);
PortableServer::POA::create_reference
概要
POA生成のObjectId値と指定のインタフェース・リポジトリIDをカプセル化するオブジェクト参照を作成します。
C++バインディング
CORBA::Object_ptr create_reference (
const char * intf)
引数
intf
インタフェース・リポジトリID。
例外
この操作では、LifespanPolicyが値SYSTEM_IDを持っている必要があります。存在しない場合、PortableServer::WrongPolicy例外が発生します。
説明
このcreate_reference操作は、POA生成のObjectId値と指定のインタフェース・リポジトリIDをカプセル化するオブジェクト参照を作成します。この操作は、POAに関連付けられた情報および操作のパラメータからのリファレンスを構成するために必要な情報を収集します。この操作は、リファレンスを作成するだけで、リファレンスとアクティブ化されたサーバントとを関連付けるわけではありません。作成された参照をクライアントに渡して、その参照に対するそれ以降のリクエストが、生成されたObjectIdを使用するPOAに返るようにすることができます。生成されたObjectId値を取得するには、作成された参照を指定してPOA::reference_to_idを呼び出します。
注意:
戻り値
オブジェクトへのポインタを返します。
PortableServer::POA::create_reference_with_id
概要
指定のObjectIdおよびインタフェース・リポジトリID値をカプセル化するオブジェクト参照を作成します。
C++バインディング
CORBA::Object_ptr create_reference_with_id (
const ObjectId & oid,
const char * intf)
引数
oid
その操作が呼び出されたオブジェクトを識別するObjectId
intf
インタフェース・リポジトリID。
例外
POAに値SYSTEM_IDを持つLifespanPolicyがあり、ObjectId値がシステムによって生成されていないか、そのPOAについて生成されていないことが検出された場合、BAD_PARAMシステム例外が発生します。
説明
create_reference操作は、指定のObjectIdおよびインタフェース・リポジトリID値をカプセル化するオブジェクト参照を作成します。この操作は、POAに関連付けられた情報および操作のパラメータからのリファレンスを構成するために必要な情報を収集します。この操作は、参照を作成するのみで、参照とアクティブ化されたサーバントとを関連付けるわけではありません。作成された参照をクライアントに渡して、その参照に対するそれ以降のリクエストで、指定のObjectIdを持つ同じPOAに呼出しが返るようにすることができます。
注意:
戻り値
Object_ptrを返します。
PortableServer::ObjectId_var oid =
PortableServer::string_to_ObjectId("myLittleFoo");
CORBA::Object_var obj = poa->create_reference_with_id(
oid.in(), "IDL:Foo:1.0");
Foo_var foo = Foo::_narrow(obj);
PortableServer::POA::deactivate_object
概要
アクティブ・オブジェクト・マップからObjectIdを削除します。
C++バインディング
void deactivate_object (
const ObjectId & oid)
引数
oid
オブジェクトを識別するObjectId
例外
指定のObjectIdに関連付けられたアクティブなオブジェクトがない場合、ObjectNotActive例外が発生します。
説明
この操作は、oidパラメータで指定されたObjectIdとそのサーバントの関連付けをアクティブ・オブジェクト・マップから削除します。
注意:
戻り値
なし。
PortableServer::POA::destroy
概要
POAおよびすべての下位POAを破棄します。
C++バインディング
void destroy (
CORBA::Boolean etherealize_objects,
CORBA::Boolean wait_for_completion)
引数
etherealize_objects
このリリースのOracle Tuxedoでは、この引数はFALSEである必要があります。
wait_for_completion
この引数は、操作がただちに戻る必要があるかどうかを示します
説明
この操作は、POAおよびすべての下位POAを破棄します。POAとその名前を同じプロセスで後から再作成することもできます。(これは、関連付けられたPOAを同じプロセスで再作成できないPOAManager::deactivate操作とは異なります。)
POAが破棄された場合、実行を開始しているリクエストについては、完了するまで処理が続行されます。実行を開始していないリクエストについては、新しく到着し、POAがない場合と同様に処理されます。つまり、それらは拒否され、OBJECT_NON_EXIST例外が発生します。
wait_for_completionパラメータがTRUEの場合、destroy操作は、処理中のリクエストがすべて完了し、etherealizeの呼出しがすべて完了した後にのみ戻ります。それ以外の場合、destroy操作は、POAを破棄した後に戻ります。
注意:
このリリースのOracle Tuxedoでは、マルチスレッドがサポートされていません。そのため、オブジェクト呼出しのコンテキストで呼出しを行う場合、wait_for_completionTRUEにしないでください。この指定を行うと、POAはそれが実行中のときに自身を解放できなくなります。
注意:
戻り値
なし。
PortableServer::POA::find_POA
概要
指定の名前を持つ子POAへのリファレンスを返します。
C++バインディング
void find_POA( in string adapter_name, in boolean activate_it);
引数
adapter_name
ターゲットPOAへのリファレンス。
active_it
このバージョンのOracle Tuxedoでは、このパラメータはFALSEである必要があります。
例外
AdapterNonExistent
この例外は、POAが存在しない場合に発生します。
説明
指定の名前を持つ子POAがPOAにある場合、その子POAが返されます。指定の名前を持つ子POAが存在せず、activate_itパラメータの値がFALSEの場合、AdapterNonExistent例外が発生します。
戻り値
なし。
PortableServer::POA::reference_to_id
概要
指定のreferenceによってカプセル化されたObjectId値を返します。
C++バインディング
ObjectId reference_to_id(in Object reference);
引数
reference
オブジェクトへのリファレンスを指定します。
例外
WrongAdapter
そのPOAによってリファレンスが作成されなかった場合に発生します。
説明
この操作は、指定のreferenceによってカプセル化されたObjectId値を返します。この操作を実行中のPOAによってリファレンスが作成された場合にのみ、この操作は有効です。リファレンスで示されたオブジェクトがアクティブ化されているかどうかは、この操作の成否には関係ありません。
注意:
戻り値
指定のreferenceによってカプセル化されたObjectId値を返します。
 
PortableServer::POA::the_POAManager
概要
POAに関連付けられたPOAマネージャを識別します。
C++バインディング
POAManager_ptr the_POAManager ();
引数
なし。
説明
この属性は読取り専用で、POAに関連付けられたPOAマネージャを識別します。
注意:
戻り値
なし。
poa->the_POAManager()->activate();
この文は、所定のPOAのPOAManagerの状態をアクティブに設定します。これは、POAがリクエストを受け付ける場合に必要です。POAに親がある場合、つまりルートPOAでない場合、この文が効果を生じるためには、その親のPOAManagerもすべてアクティブ状態である必要があります。
PortableServer::ServantBase::_default_POA
概要
サーバントに関連付けられたPOAへのオブジェクト参照を返します。
C++バインディング
class PortableServer
{
class ServantBase
{
public:
virtual POA_ptr _default_POA();
}
}
引数
なし。
説明
C++サーバントはすべて、PortableServer::ServantBaseから継承されるため、それらはすべて_default_POA関数を継承します。このバージョンのOracle Tuxedoでは、通常、_default_POAを使用する必要はありません。
この関数のデフォルトの実装では、このプロセスのデフォルトORBのルートPOAへのオブジェクト参照が返されますが、これは、ORB::resolve_initial_references("RootPOA")を呼び出したときの戻り値と同じです。C++サーバントは、この定義をオーバーライドして目的に応じたPOAを返すことができます。
注意:
戻り値
サーバントに関連付けられたデフォルトPOA。
POA Currentメンバー関数
CORBA::Currentから派生したPortableServer::Currentインタフェースは、そのメソッドが呼び出されたオブジェクトのIDへのアクセスをメソッド実装に提供します。
PortableServer::Current::get_object_id
概要
呼び出されたオブジェクトをそのコンテキストで識別するObjectIdを返します。
C++バインディング
ObjectId * get_object_id ();
引数
なし。
例外
POAディスパッチ操作のコンテキストの外部で呼び出された場合、PortableServer::NoContext例外が発生します。
説明
この操作は、呼び出されたオブジェクトをそのコンテキストで識別するPortableServer::ObjectIdを返します。
注意:
戻り値
この操作は、呼び出されたオブジェクトをそのコンテキストで識別するObjectIdを返します。
PortableServer::Current::get_POA
概要
呼び出されるオブジェクトをそのコンテキストで実装するPOAへのリファレンスを返します。
C++バインディング
POA_ptr get_POA ();
引数
なし。
例外
この操作がPOAディスパッチ操作のコンテキストの外部で呼び出された場合、PortableServer::NoContext例外が発生します。
説明
この操作は、呼び出されるオブジェクトをそのコンテキストで実装するPOAへのリファレンスを返します。
注意:
戻り値
この操作は、呼び出されるオブジェクトをそのコンテキストで実装するPOAへのリファレンスを返します。
POAManagerメンバー関数
各POAオブジェクトには、POAManagerオブジェクトが関連付けられています。POAManagerは、1つまたは複数のPOAオブジェクトと関連付けることができます。POAManagerは、関連付けられたPOAの処理状態をカプセル化します。POAマネージャの操作を使用すると、アプリケーションでPOAのリクエストをキューに登録したり、破棄することも、POAを非アクティブ化することもできます。
POAマネージャは、暗黙的に作成および破棄されます。POAの作成時に明示的なPOAManagerオブジェクトを指定しないかぎり、POAManagerはPOAの作成時に作成され、自動的にそのPOAに関連付けられます。関連付けられたPOAがすべて破棄されると、POAManagerオブジェクトは暗黙的に破棄されます。
POAManagerには、アクティブ化、非アクティブ化、保持、破棄の4つの処理状態があります。この処理状態によって、関連付けられたPOAの機能、およびPOAが受け取ったリクエストを破棄するかどうかが決まります。
POAManagerは保持状態で作成されます。この状態では、POAマネージャがアクティブ化状態に移行するまで、そのPOAの呼出しはキューに登録されます。このバージョンのOracle Tuxedoでは、アクティブ化および非アクティブ化状態のみに移行できます。つまり、このバージョンでは、保持状態に戻したり、破棄状態に移行することはできません。
PortableServer::POAManager::activate
概要
POAManagerの状態をアクティブ化に変更します。
C++バインディング
void activate();
引数
なし。
例外
POAManagerが非アクティブ化状態のときにこの操作を発行すると、PortableServer::POAManager::AdapterInactive例外が発生します。
説明
この操作は、POAManagerの状態をアクティブ化に変更します。状態をアクティブ化に移行すると、関連付けられたPOAはリクエストを処理できるようになります。
注意:
注意:
戻り値
なし。
PortableServer::POAManager::deactivate
概要
POAマネージャの状態を非アクティブ化に変更します。
C++バインディング
void deactivate (
CORBA::Boolean etherealize_objects,
CORBA::Boolean wait_for_completion);
引数
etherealize_objects
BEA WebLogic Enterprise 4.2以降のソフトウェアおよびOracle Tuxedo 8.0以降のソフトウェアでは、この引数は常にFALSEに設定する必要があります。
wait_for_completion
この引数がTRUEの場合、deactivate操作は、処理中のリクエストがすべて完了した後にのみ戻ります。この引数がFALSEの場合、deactivate操作は、関連付けられたPOAの状態を変更した後に戻ります。
例外
POAマネージャが非アクティブ化状態のときに発行すると、PortableServer::POAManager::AdapterInactive例外が発生します。
説明
この操作は、POAManagerの状態を非アクティブ化に変更します。状態を非アクティブ化に移行すると、関連付けられたPOAは、未実行のリクエストおよびすべての新しいリクエストを拒否します。
注意:
このリリースのOracle Tuxedoでは、マルチスレッドがサポートされていません。そのため、オブジェクト呼出しのコンテキストで呼出しを行う場合、wait_for_completionTRUEにしないでください。したがって、POAManagerが現在実行中の場合、POAManagerは非アクティブ化に設定できません。
注意:
戻り値
なし。
POAポリシー・メンバー・オブジェクト
CORBA::Policyから派生したインタフェースは、POAに適用するポリシーを指定するためにPOA::create_POA操作で使用されます。ポリシー・オブジェクトは、ルートPOAなど、既存のPOAのファクトリ操作を使用して作成されます。ポリシー・オブジェクトは、POAの作成時に指定します。既存のPOAではポリシーは変更できません。ポリシーは、親POAから継承されません
PortableServer::LifespanPolicy
概要
create_POA操作にオブジェクトの有効期間を指定します。
説明
POA::create_lifespan_policy操作を使用してLifespanPolicyインタフェースを持つオブジェクトを取得し、POA::create_POA操作に渡して、作成されたPOAで実装されるオブジェクトの有効期間を指定します。指定可能な値は次のとおりです。
TRANSIENT - POAで実装されるオブジェクトは、それらが最初に作成されたプロセスの後まで存在することはできません。
PERSISTENT - POAで実装されるオブジェクトは、それらが最初に作成されたプロセスの後も存在できます。
永続オブジェクトには、POA (それらを作成したPOA)が関連付けられています。ORBが永続オブジェクトに対するリクエストを受け取ると、POAおよびそのすべての上位POAの名前に基づいて、一致するPOAを検索します。
POAの名前は、その包含スコープ(親POA)内で一意である必要があります。移植可能なプログラムでは、自身のPOAの名前と他のプロセスで使用されるPOAの名前が競合しないものと想定できます。
LifespanPolicyオブジェクトがcreate_POAに渡されない場合、有効期間ポリシーのデフォルトはTRANSIENTです。
注意:
例外
なし。
PortableServer::IdAssignmentPolicy
概要
作成されるPOAのObjectIdがアプリケーションによって生成されるか、ORBによって生成されるかを指定します
説明
POA::create_id_assignment_policy操作を使用してIdAssignmentPolicyインタフェースを持つオブジェクトを取得し、POA::create_POA操作に渡して、作成されるPOAのObjectIdがアプリケーションによって生成されるか、ORBによって生成されるかを指定します。指定可能な値は次のとおりです。
USER_ID - そのPOAで作成されるオブジェクトには、アプリケーションによってのみObjectIdが割り当てられます。
SYSTEM_ID - そのPOAで作成されるオブジェクトには、POAによってのみObjectIdが割り当てられます。POAにPERSISTENTポリシーもある場合は、割り当てられたObjectIdが、同じPOAのすべてのインスタンスを通じて一意である必要があります。
IdAssignmentPolicyがPOAの作成時に指定されていない場合、デフォルトはSYSTEM_IDです。
注意:
Requestメンバー関数
これらのメンバー関数のC++へのマッピングは次のとおりです:
// C++
class Request
{
public:
Object_ptr target() const;
const char *operation() const;
NamedValue_ptr result();
NVList_ptr arguments();
Environment_ptr env();
ExceptionList_ptr exceptions();
ContextList_ptr contexts();
void ctx(Context_ptr);
Context_ptr ctx() const
// argument manipulation helper functions
Any &add_in_arg();
Any &add_in_arg(const char* name);
Any &add_inout_arg():
Any &add_inout_arg(const char* name);
Any &add_out_arg():
Any &add_out_arg(const char* name);
void set_return_type(TypeCode_ptr tc);
Any &return_value();

void invoke();
void send_oneway();
void send_deferred();
void get_response();
Boolean poll_response();
};
注意:
add_*_argset_return_typeおよびreturn_valueメンバー関数は、属性ベースのアクセサの使用を簡略化するものとして追加されています。
以下のセクションでは、これらのメンバー関数について説明します。
CORBA::Request::arguments
概要
リクエストの引数リストを取り出します。
C++バインディング
CORBA::NVList_ptr CORBA::Request::arguments () const;
引数
なし。
説明
このメンバー関数は、リクエストの引数リストを取り出します。引数は、inputまたはoutput、あるいはその両方です。
戻り値
関数が成功した場合、戻り値はリクエストに対する操作の引数のリストへのポインタです。返された引数リストはRequestオブジェクト参照が所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::ctx(Context_ptr)
概要
操作のContextオブジェクトを設定します。
C++バインディング
void CORBA::Request::ctx (
CORBA::Context_ptr CtxObject);
引数
CtxObject
Contextオブジェクトの設定に使用する新しい値。
説明
このメンバー関数は、操作のContextオブジェクトを設定します。
戻り値
なし。
関連項目
CORBA::Request::ctx()
CORBA::Request::get_response
概要
特定の遅延同期リクエストのレスポンスを取り出します。
C++バインディング
void CORBA::Request::get_response ();
引数
なし。
説明
このメンバー関数は、特定のリクエストのレスポンスを取り出します。これは、CORBA::Request::send_deferred関数またはCORBA::Request::send_multiple_requests関数の呼出し後に使用されます。リクエストが完了していない場合、CORBA::Request::get_response関数によってリクエストが完了するまでブロックされます。
戻り値
なし。
関連項目
CORBA::Request::send_deferred
CORBA::Request::invoke
概要
リクエストで指定された操作で呼出しを実行します。
C++バインディング
void CORBA::Request::invoke ();
引数
なし。
説明
このメンバー関数は、オブジェクト・リクエスト・ブローカ(ORB)を呼び出して、適切なサーバー・アプリケーションにリクエストを送信します。
戻り値
なし。
CORBA::Request::operation
概要
リクエスト用の操作を取り出します。
C++バインディング
const char * CORBA::Request::operation () const;
引数
なし。
説明
このメンバー関数は、リクエスト用の操作を取り出します。
戻り値
関数が成功した場合、戻り値はオブジェクトを対象とする操作へのポインタです。値が0 (ゼロ)の場合もあります。返されたメモリーはRequestオブジェクトが所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::poll_response
概要
遅延同期リクエストが完了したかどうかを判別します。
C++バインディング
CORBA::Boolean CORBA::Request::poll_response ();
引数
なし。
説明
このメンバー関数は、リクエストが完了したかどうかを判別し、ただちに戻ります。この呼出しを使用して、リクエストの状態をチェックできます。このメンバー関数を使用して、CORBA::Request::get_responseの呼出しがブロックされるかどうかを判別することもできます。
戻り値
関数が成功した場合、戻り値は、レスポンスがすでに完了していればCORBA_TRUE、レスポンスがまだ完了していなければCORBA_FALSEです。
関数が失敗した場合、例外がスローされます。
関連項目
CORBA::ORB::get_next_response
CORBA::ORB::poll_next_response
CORBA::ORB::send_multiple_requests
CORBA::Request::get_response
CORBA::Request::send_deferred
CORBA::Request::result
概要
リクエストの結果を取り出します。
C++バインディング
CORBA::NamedValue_ptr CORBA::Request::result ();
引数
なし。
説明
このメンバー関数は、リクエストの結果を取り出します。
戻り値
関数が成功した場合、戻り値は操作の結果へのポインタです。返された結果はRequestオブジェクトが所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::env
概要
リクエストの環境を取り出します。
C++バインディング
CORBA::Environment_ptr CORBA::Request::env ();
引数
なし。
説明
このメンバー関数は、リクエストの環境を取り出します。
戻り値
関数が成功した場合、戻り値は操作の環境へのポインタです。返された環境はRequestオブジェクトが所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::ctx
概要
リクエストのコンテキストを取り出します。
C++バインディング
CORBA::context_ptr CORBA::Request::ctx ();
引数
なし。
説明
このメンバー関数は、リクエストのコンテキストを取り出します。
戻り値
関数が成功した場合、戻り値は操作のコンテキストへのポインタです。返されたコンテキストはRequestオブジェクトが所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::contexts
概要
リクエストのコンテキスト・リストを取り出します。
C++バインディング
CORBA::ContextList_ptr CORBA::Request::contexts ();
引数
なし。
説明
このメンバー関数は、リクエストのコンテキスト・リストを取り出します。
戻り値
関数が成功した場合、戻り値は操作のコンテキスト・リストへのポインタです。返されたコンテキスト・リストはRequestオブジェクトが所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::exceptions
概要
リクエストの例外リストを取り出します。
C++バインディング
CORBA::ExceptionList_ptr CORBA::Request::exceptions ();
引数
なし。
説明
このメンバー関数は、リクエストの例外リストを取り出します。
戻り値
関数が成功した場合、戻り値はリクエストの例外リストへのポインタです。返された例外リストはRequestオブジェクトが所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::target
概要
リクエストのターゲット・オブジェクト参照を取り出します。
C++バインディング
CORBA::Object_ptr CORBA::Request::target () const;
引数
なし。
説明
このメンバー関数は、リクエストのターゲット・オブジェクト参照を取り出します。
戻り値
関数が成功した場合、戻り値は操作のターゲット・オブジェクトへのポインタです。戻り値はRequestオブジェクトが所有するため、解放しないでください。
関数が失敗した場合、例外がスローされます。
CORBA::Request::send_deferred
概要
遅延同期リクエストを開始します。
C++バインディング
void CORBA::Request::send_deferred ();
引数
なし。
説明
このメンバー関数は、遅延同期リクエストを開始します。この関数は、レスポンスが要求される場合にCORBA::Request::get_response関数とともに使用します。
戻り値
なし。
関連項目
CORBA::ORB::get_next_response
CORBA::ORB::poll_next_response
CORBA::ORB::send_multiple_requests
CORBA::Request::get_response
CORBA::Request::poll_response
CORBA::Request::send_oneway
CORBA::Request::send_oneway
概要
一方向のリクエストを開始します。
C++バインディング
void CORBA::Request::send_oneway ();
引数
なし。
説明
このメンバー関数は一方向のリクエストを開始します。この関数では、レスポンスは要求されません。
戻り値
なし。
関連項目
CORBA::ORB::send_multiple_requests
CORBA::Request::send_deferred
文字列
文字列の各関数のC++へのマッピングは次のとおりです。
// C++
namespace CORBA {
static char * string_alloc(ULong len);
static char * string_dup (const char *);
static void string_free(char *);
...
注意:
C++では、charの静的配列はchar*に移行が進んでいます。したがって、String_varに静的配列を割り当てる際は注意が必要になります。これは、String_varでは、string_allocで割り当てられたデータをポインタが指すことを前提としており、最終的にはstring_freeでデータを解放しようとするためです。

このような動作に対応するために、ANSI/ISO C++では、文字列リテラルがchar*からconst char*に変更されています。ただし、ほどんどのC++コンパイラではこの変更を実装していないため、移植可能なプログラムを作成する際は、上記の注意事項に留意しなければなりません。
以下のセクションでは、文字列に割り当てられるメモリーを管理する各関数について説明します。
CORBA::string_alloc
概要
文字列用のメモリーを割り当てます。
C++バインディング
char * CORBA::string_alloc(ULong len);
引数
len
メモリーに割り当てる文字列の長さ。
説明
このメンバー関数は文字列用のメモリーを動的に割り当て、割当てを実行できない場合はnilポインタを返します。これは、結果の文字列に後続のNULL文字を保持するための十分なスペースを確保できるように、len+1文字を割り当てます。このメンバー関数で割り当てられたメモリーを解放するには、CORBA::string_freeメンバー関数を呼び出します。
この関数では、CORBA例外はスローされません。
戻り値
関数が成功した場合、戻り値は文字列オブジェクト用に新しく割り当てられたメモリーへのポインタです。関数が失敗した場合、戻り値はnilポインタです。
char* s = CORBA::string_alloc(10);
関連項目
CORBA::string_free
CORBA::string_dup
CORBA::string_dup
概要
文字列のコピーを作成します。
C++バインディング
char * CORBA::string_dup (const char * Str);
引数
Str
コピーする文字列のアドレス。
説明
このメンバー関数は、NULL文字も含め文字列引数のコピーを保持するのに十分なメモリーを割り当ててから、そのメモリーに文字列引数をコピーし、新しい文字列へのポインタを返します。
この関数では、CORBA例外はスローされません。
戻り値
関数が成功した場合、戻り値は新しい文字列へのポインタです。関数が失敗した場合、戻り値はnilポインタです。
char* s = CORBA::string_dup("hello world");
関連項目
CORBA::string_free
CORBA::string_alloc
 
CORBA::string_free
概要
文字列に割り当てられたメモリーを解放します。
C++バインディング
void CORBA::string_free(char * Str);
引数
Str
割当てを解除するメモリーのアドレス。
説明
このメンバー関数は、CORBA::string_alloc()またはCORBA::string_dup()メンバー関数を使用して前に文字列に割り当てられたメモリーの割当てを解除します。この関数にnilポインタを渡すと、すべてのアクションが実行されなくなります。
この関数では、CORBA例外はスローされない場合があります。
戻り値
なし。
char* s = CORBA::string_dup("hello world");
CORBA::string_free(s);
関連項目
CORBA::string_alloc
CORBA::string_dup
ワイド文字列
C++では、制限付きワイド文字列型と無制限ワイド文字列型の両方がCORBA::WChar*にマッピングされます。また、CORBAモジュールでは、WString_varおよびWString_outクラスを定義します。これらの各クラスは、同じメンバー関数に、対応する文字列として同じセマンティクスを提供します。ただし、これらのクラスがワイド文字列およびワイド文字を扱う場合は例外です。
ワイド文字列の動的な割り当てまたは割当て解除は、次の関数で実行します。
// C++
namespace CORBA {
// ...
WChar *wstring_alloc(ULong len);
WChar *wstring_dup(const WChar* ws);
void wstring_free(WChar*);
};
上記のメンバー関数は、ワイド文字列を処理する点を除いて、文字列型の同じ関数として同じセマンティクスを持っています。
仕様に準拠したマッピング実装では、C++入出力ストリームでWString_varおよびWString_outを直接使用するために、オーバーロードされたoperator<< (挿入)とoperator>> (抽出)の演算子が提供されます。
これらのメンバー関数の説明は、「文字列」の対応する関数を参照してください。
リスト14-1に、ワイド文字列およびワイド文字を使用したサンプル・コードを示します。
リスト14-1 ワイド文字列の例
// Get a string from the user:
cout << "String?";
char mixed[256]; // this should be big enough!
char lower[256];
char upper[256];
wchar_t wmixed[256];
cin >> mixed;
// Convert the string to a wide char string,
// because this is what the server will expect.
mbstowcs(wmixed, mixed, 256);
// Convert the string to upper case:
CORBA::WString_var v_upper = CORBA::wstring_dup(wmixed);
v_simple->to_upper(v_upper.inout());
wcstombs(upper, v_upper.in(), 256);
cout << upper << endl;
// Convert the string to lower case:
CORBA::WString_var v_lower = v_simple->to_lower(wmixed);
wcstombs(lower, v_lower.in(), 256);
cout << lower << endl;
// Everything succeeded:
return 0;
 
TypeCodeメンバー関数
TypeCodeは、OMG IDLの型情報を表します。
TypeCodeのコンストラクタは定義されていません。ただし、マッピングされたインタフェースに加えて、定義されている基本的な各OMG IDL型については、Anyで型を設定する場合や、equalの引数などとして使用できる_tc_<type>という形式のTypeCode擬似オブジェクト参照(TypeCode_ptr)へのアクセスが実装で提供されます。これらのTypeCodeリファレンス定数の名前では、<type>は定義したスコープの範囲内にある型のローカル名を参照します。各C++ _tc_<type>定数は、一致した型と同じスコープ・レベルで定義します。
他のすべてのサーバーレス・オブジェクトと同様に、TypeCodeのC++マッピングには、TypeCodeのnilオブジェクト参照を返す_nil()操作があります。また、作成された型に埋め込まれたTypeCodeリファレンスの初期化にも使用できます。ただし、nil TypeCodeリファレンスは、引数として操作に渡すことができません。これは、TypeCodesがオブジェクト参照ではなく値として渡されるためです。
これらのメンバー関数のC++へのマッピングは次のとおりです:
class CORBA
{
class TypeCode
{
public:
class Bounds { ... };
class BadKind { ... };

Boolean equal(TypeCode_ptr) const;
TCKind kind() const;
Long param_count() const;
Any *parameter(Long) const;
RepositoryId id () const;
}; // TypeCode
}; // CORBA
メモリー管理
TypeCodeには、次の特別なメモリー管理規則があります。
id関数の戻り値の所有権はTypeCodeが保持します。これらの戻り値を呼出し側で解放しないでください。
以下のセクションでは、これらのメンバー関数について説明します。
CORBA::TypeCode::equal
概要
2つのTypeCodeオブジェクトが同じかどうかを判別します。
C++バインディング
CORBA::Boolean CORBA::TypeCode::equal (
CORBA::TypeCode_ptr TypeCodeObj) const;
引数
TypeCodeObj
比較対象のTypeCodeオブジェクトへのポインタ。
説明
このメンバー関数は、TypeCodeオブジェクトが入力パラメータTypeCodeObjと同じかどうかを判別します。
戻り値
TypeCodeオブジェクトがTypeCodeObjパラメータと同じ場合、CORBA_TRUEが返されます。
TypeCodeオブジェクトがTypeCodeObjパラメータと同じでない場合は、CORBA_FALSEが返されます。
関数が失敗した場合、例外がスローされます。
CORBA::TypeCode::id
概要
TypeCodeのIDを返します。
C++バインディング
CORBA::RepositoryId CORBA::TypeCode::id () const;
引数
なし。
説明
このメンバー関数は、TypeCodeのIDを返します。
戻り値
TypeCodeのリポジトリID。
CORBA::TypeCode::kind
概要
TypeCodeオブジェクト参照に格納されているデータの種類を取り出します。
C++バインディング
CORBA::TCKind CORBA::TypeCode::kind () const;
引数
なし。
説明
このメンバー関数は、TypeCodeオブジェクト参照に格納されているデータの種類を指定する、CORBA::TypeCodeクラスのkind属性を取り出します。
戻り値
メンバー関数が成功した場合、TypeCodeオブジェクト参照に格納されているデータの種類を返します。TypeCodeの種類とそのパラメータのリストは、表14-3を参照してください。
メンバー関数が失敗した場合、例外がスローされます。
 
 
CORBA::TypeCode::param_count
概要
TypeCodeオブジェクト参照のパラメータ数を取り出します。
C++バインディング
CORBA::Long CORBA::TypeCode::param_count () const;
引数
なし。
説明
このメンバー関数は、TypeCodeオブジェクト参照のパラメータの数を指定する、CORBA::TypeCodeクラスのパラメータ属性を取り出します。各種類のパラメータのリストは、表14-3を参照してください。
戻り値
関数が成功した場合、TypeCodeオブジェクト参照に格納されているパラメータ数を返します。
関数が失敗した場合、例外がスローされます。
CORBA::TypeCode::parameter
概要
索引入力引数で指定されたパラメータを取り出します。
C++バインディング
CORBA::Any * CORBA::TypeCode::parameter (
CORBA::Long Index) const;
引数
Index
パラメータ・リストの索引。取り出すパラメータを指定するのに使用します。
説明
このメンバー関数は、索引入力引数で指定されたパラメータを取り出します。各種類のパラメータのリストは、表14-3を参照してください。
戻り値
メンバー関数が成功した場合、戻り値は索引入力引数で指定されたパラメータへのポインタです。
メンバー関数が失敗した場合、例外がスローされます。
Exceptionメンバー関数
Oracle Tuxedoソフトウェアでは、例外のスローと捕捉をサポートしています。
注意:
誤った例外コンストラクタを使用すると、データ・メンバーが初期化されません。reasonフィールド付きで定義する例外は、そのデータ・メンバーを初期化するコンストラクタを使用して作成する必要があります。デフォルトのコンストラクタを使用した場合は、そのデータ・メンバーは初期化されず、例外の破棄時にシステムによって存在しないデータの破棄が試行されます。
例外を作成する際には、必ず、最も完全にデータ・フィールドを初期化するコンストラクタ関数を使用してください。このような例外を最も簡単に識別するには、OMG IDL定義を確認します。これらには、データ・メンバーに関する追加の定義があります。
以下では、例外の各メンバー関数について説明します。
CORBA::SystemException::SystemException ()
これは、CORBA::SystemExceptionクラスのデフォルトのコンストラクタです。マイナー・コードは0(ゼロ)に初期化され、完了ステータスはCOMPLETED_NOに設定されています。
CORBA::SystemException::SystemException (
const CORBA::SystemException & Se)
これは、CORBA::SystemExceptionクラスのコピー・コンストラクタです。
CORBA::SystemException::SystemException(
CORBA::ULong Minor, CORBA::CompletionStatus Status)
CORBA::SystemExceptionクラスのこのコンストラクタは、マイナー・コードと完了ステータスを設定します。
各引数について次に説明します。
Minor
Exceptionオブジェクトのマイナー・コード。minorフィールドは、ORBが例外を識別するために使用する実装固有の値です。Oracle Tuxedoのminorフィールドの定義はorbminor.hファイルにあります。
Status
Exceptionオブジェクトの完了ステータス。値は次のとおりです。
CORBA::COMPLETED_YES
CORBA::COMPLETED_NO
CORBA::COMPLETED_MAYBE
CORBA::SystemException::~SystemException ()
これは、CORBA::SystemExceptionクラスのデストラクタです。Exceptionオブジェクトが使用していたメモリーを解放します。
CORBA::SystemException CORBA::SystemException::operator =
const CORBA::SystemException Se)
この代入演算子は、ソース例外から例外情報をコピーします。Se引数には、この演算子によってコピーされるSystemExceptionオブジェクトを指定します。
CORBA::CompletionStatus CORBA::SystemException::completed()
この例外の完了ステータスを返します。
CORBA::SystemException::completed(
CORBA::CompletionStatus Completed)
このメンバー関数は、この例外の完了ステータスを設定します。Completed引数には、この例外の完了ステータスを指定します。
CORBA::ULong CORBA::SystemException::minor()
この例外のマイナー・コードを返します。
CORBA::SystemException::minor (CORBA::ULong Minor)
このメンバー関数は、この例外のマイナー・コードを設定します。minor引数には、この例外の新しいマイナー・コードを指定します。minorフィールドは実装固有の値で、アプリケーションが例外を識別するために使用します。
CORBA::SystemException * CORBA::SystemException::_narrow (
CORBA::Exception_ptr Exc)
このメンバー関数は、指定の例外をシステム例外に限定できるかどうかを判別します。Exc引数には、限定する例外を指定します。
指定の例外がシステム例外である場合、このメンバー関数はシステム例外へのポインタを返します。指定の例外がシステム例外ではない場合、この関数は0 (ゼロ)を返します。
CORBA::UserException * CORBA::UserException::_narrow(
CORBA::Exception_ptr Exc)
このメンバー関数は、指定の例外をユーザー例外に限定できるかどうかを判別します。Exc引数には、限定する例外を指定します。
指定の例外がユーザー例外である場合、このメンバー関数はユーザー例外へのポインタを返します。指定の例外がユーザー例外ではない場合、この関数は0 (ゼロ)を返します。
標準例外
ここでは、ORBに対して定義される標準例外について説明します。これらの例外の識別子は、インタフェース仕様に関係なく、操作の呼出しの結果として返されることがあります。標準例外は、raises式には示されません。
標準例外の処理の複雑さを抑えるために、標準例外のセットは扱いやすいサイズに維持されます。この制約により、類似する多数の例外を列挙するのではなく、例外の等価クラスの定義が必要になります。
たとえば、動的なメモリーを割り当てることができないために、様々なポイントで操作の呼出しが失敗することがあります。メモリー割当ての失敗が原因で例外が発生する様々な状況(マーシャリング時、アンマーシャリング時、クライアント、オブジェクト実装、ネットワーク・パケットの割当てなど)に対応する複数の異なる例外を列挙するのではなく、動的メモリー割当ての失敗に対応する1つの例外が定義されます。それぞれの標準例外には、例外のサブカテゴリを指定するマイナー・コードが含まれています。マイナー・コードへの値の割当ては、各ORB実装で行います。
また、それぞれの標準例外には、次のいずれかの値を取るcompletion_statusコードも含まれています。
CORBA::COMPLETED_YES
例外が発生する前にオブジェクト実装の処理が完了しています。
CORBA::COMPLETED_NO
例外が発生する前にオブジェクト実装が開始されていませんでした。
CORBA::COMPLETED_MAYBE
実装の完了ステータスが不明です。
例外の定義
標準例外は次のように定義されています。この仕様の将来のバージョンで追加の標準例外が定義される可能性があることと、ORB実装で標準以外のシステム例外が発生する可能性があることから、このリストにないシステム例外を処理できるようにクライアントを準備しておく必要があります。例外の詳細は、システム・メッセージに関する項を参照してください。
表14-4に、例外の定義を示します。
 
オブジェクトが存在しない場合
削除されたオブジェクトの呼出しが実行されると、常にCORBA::OBJECT_NOT_EXIST例外が発生します。この場合、「困難な」フォルトとして報告されます。この例外を受け取った場合は、このオブジェクト参照のすべてのコピーの削除、およびほかの適切な「最終リカバリ」手順の実行が許可(推奨)されます。
トランザクションの例外
CORBA::TRANSACTION_REQUIRED例外は、リクエストがNULLトランザクション・コンテキストを送信しましたが、アクティブなトランザクションが必要であることを示します。
CORBA::TRANSACTION_ROLLEDBACK例外は、リクエストに関連付けられたトランザクションがすでにロールバックされているか、ロールバックするようにマークされていることを示します。したがって、要求された操作は実行できなかったか、または実行されていません。これは、トランザクションでこれ以降の計算が無意味になるためです。
CORBA::INVALID_TRANSACTIONは、リクエストが無効なトランザクション・コンテキストを送信したことを示します。たとえば、リソースを登録しようとしたときにエラーが発生した場合に、この例外が発生します。
ExceptionListメンバー関数
ExceptionListメンバー関数を使用すると、Requestが呼び出されたときに発生する可能性があるユーザー定義例外すべてのTypeCodeのリストをクライアントまたはサーバー・アプリケーションで提供できます。Requestメンバー関数の説明は、「Requestメンバー関数」という項を参照してください。
これらのメンバー関数のC++へのマッピングは次のとおりです:
class CORBA
{
class ExceptionList
{
public:
Ulong count ();
void add(TypeCode_ptr tc);
void add_consume(TypeCode_ptr tc);
TypeCode_ptr item(Ulong index);
Status remove(Ulong index);
}; // ExceptionList
}// CORBA
 
CORBA::ExceptionList::count
概要
リスト内の現在の項目数を取り出します。
C++バインディング
Ulong count ();
引数
なし。
例外
関数が失敗した場合、例外がスローされます。
説明
このメンバー関数は、リスト内の現在の項目数を取り出します。
戻り値
関数が成功した場合、戻り値はリスト内の項目数です。リストが作成されたばかりで、ExceptionListオブジェクトが追加されていない場合は、この関数によって0 (ゼロ)が返されます。
CORBA::ExceptionList::add
概要
flags属性のみを設定して、名前の付いていない項目でExceptionListオブジェクトを作成します。
C++バインディング
void add(TypeCode_ptr tc);
引数
tc
TypeCode_ptrによって参照されるメモリー位置を定義します。
例外
メンバー関数が失敗した場合、CORBA::NO_MEMORY例外がスローされます。
説明
このメンバー関数は、名前の付いていない項目でExceptionListオブジェクトを作成します。これは、flags属性のみを設定したオブジェクトです。
ExceptionListオブジェクトは動的に拡張するので、そのサイズをアプリケーションで追跡する必要はありません。
戻り値
関数が成功した場合、戻り値は新しく作成されたExceptionListオブジェクトへのポインタです。
関連項目
CORBA::ExceptionList::add_consume
CORBA::ExceptionList::count
CORBA::ExceptionList::item
CORBA::ExceptionList::remove
CORBA::ExceptionList::add_consume
概要
ExceptionListオブジェクトを作成します。
C++バインディング
void add_consume(TypeCode_ptr tc);
引数
tc
想定されるメモリー位置。
例外
メンバー関数が失敗した場合、例外が発生します。
説明
このメンバー関数は、ExceptionListオブジェクトを作成します。
ExceptionListオブジェクトは動的に拡張するので、そのサイズをアプリケーションで追跡する必要はありません。
戻り値
関数が成功した場合、戻り値は新しく作成されたExceptionListオブジェクトへのポインタです。
関連項目
CORBA::ExceptionList::add
CORBA::ExceptionList::count
CORBA::ExceptionList::item
CORBA::ExceptionList::remove
CORBA::ExceptionList::item
概要
渡された索引に基づいてExceptionListオブジェクトへのポインタを取り出します。
C++バインディング
TypeCode_ptr item(ULong index);
引数
index
ExceptionListオブジェクトへの索引。索引の基数はゼロです。
例外
関数が失敗した場合、BAD_PARAM例外がスローされます。
説明
このメンバー関数は、渡された索引に基づいてExceptionListオブジェクトへのポインタを取り出します。この関数では、ゼロを基数とする索引が使用されます。
戻り値
関数が成功した場合、戻り値はExceptionListオブジェクトへのポインタです。
関連項目
CORBA::ExceptionList::add
CORBA::ExceptionList::add_consume
CORBA::ExceptionList::count
CORBA::ExceptionList::remove
CORBA::ExceptionList::remove
概要
指定された索引の項目を削除し、関連付けられたメモリーをすべて解放してから、リストの残りの項目を順序付けし直します。
C++バインディング
Status remove(ULong index);
引数
Index
ContextListオブジェクトへの索引。索引の基数はゼロです。
例外
関数が失敗した場合、BAD_PARAM例外がスローされます。
説明
このメンバー関数は、指定された索引の項目を削除し、関連付けられたメモリーをすべて解放してから、リストの残りの項目を順序付けし直します。
戻り値
なし。
関連項目
CORBA::ExceptionList::add
CORBA::ExceptionList::add_consume
CORBA::ExceptionList::count
CORBA::ExceptionList::item

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved