![]() ![]() ![]() ![]() ![]() ![]() ![]() |
注意: | Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、サポートされなくなりました。すべてのOracle Tuxedo CORBA JavaクライアントおよびOracle Tuxedo CORBA JavaクライアントORBのテキスト・リファレンスとコード・サンプルは、サード・パーティ製のJava ORBライブラリをインプリメントまたは実行する際の参考や、プログラマの参照用としてのみ使用してください。 |
注意: | サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートやドキュメントは提供していません。 |
表 5-1は、CORBAネーム・サービスを使用するOracle Tuxedo CORBAアプリケーションの開発プロセスの概略です。
このトピックの手順を実行する前に、CORBAネーム・サービスのサーバー・プロセスを開始する必要があります。詳細は、「CORBAネーム・サービスのサーバー・プロセスの起動」を参照してください。
このトピックの開発手順が完了したら、buildobjclient
コマンドとbuildobjserver
コマンドを使用して、CORBAネーム・サービスを使用するサーバー・アプリケーションとクライアント・アプリケーションをコンパイルします。buildobjclient
およびbuildobjserver
コマンドの詳細は、『Oracle Tuxedoコマンド・リファレンス』を参照してください。
Oracle Tuxedo CORBAアプリケーションは、CosNaming.idl
で定義したインタフェースを使用してCORBAネーム・サービスにアクセスします。このObject Management Group (OMG)インタフェース定義言語(IDL)ファイルは、CORBAネーム・サービスで使用するインタフェース、COSnamingデータ構造体、例外を定義します。CosNaming.idl
ファイルは、以下のディレクトリの場所にあります。
drive
:\%TUXDIR%\include\CosNaming.idl
/
usr
/
local
/$TUXDIR/include/CosNaming.idl
リスト 5-1は、CosNaming.idlのOMG IDLを示しています。CORBA C++アプリケーションでも同じOMG IDLファイルが使用されます。
#ifndef _COSNAMING_IDL_
#define _COSNAMING_IDL_
module CosNaming {
#pragma prefix "omg.org/CosNaming"
ytypedef string Istring;
struct NameComponent {
Istring id;
Istring kind;
};
typedef sequence<NameComponent> Name;
enum BindingType { nobject, ncontext };
struct Binding {
Name binding_name;
BindingType binding_type;
};
typedef sequence <Binding> BindingList;
interface BindingIterator;
interface NamingContext {
enum NotFoundReason { missing_node,
not_context,
not_object };
exception NotFound {
NotFoundReason why;
Name rest_of_name;
};
exception CannotProceed {
NamingContext cxt;
Name rest_of_name;
};
exception InvalidName{};
exception AlreadyBound {};
exception NotEmpty{};
void bind(in Name n, in Object obj)
raises(NotFound,
CannotProceed,
InvalidName,
AlreadyBound);
void rebind(in Name n, in Object obj)
raises(NotFound,
CannotProceed,
InvalidName);
void bind_context(in Name n, in NamingContext nc)
raises(NotFound,
CannotProceed,
InvalidName,
AlreadyBound);
void rebind_context(in Name n, in NamingContext nc)
raises(NotFound,
CannotProceed,
InvalidName);
Object resolve (in Name n)
raises(NotFound,
CannotProceed,
InvalidName);
void unbind(in Name n)
raises(NotFound,
CannotProceed,
InvalidName);
NamingContext new_context();
NamingContext bind_new_context(in Name n)
raises(NotFound,
AlreadyBound,
CannotProceed,
InvalidName);
void destroy() raises(NotEmpty);
void list(in unsigned long how_many,
out BindingList bl,
out BindingIterator bi);
};
interface BindingIterator {
boolean next_one(out Binding b);
boolean next_n(in unsigned long how_many,
out BindingList bl);
void destroy();
};
interface NamingContextExt:NamingContext {
typedef string StringName;
typedef string Address;
typedef string URLString;
StringName to_string(in Name n) raises(InvalidName);
Name to_name(in StringName sn)
raises(InvalidName);
exception InvalidAddress {};
URLString to_url(in Address addr, in StringName sn)
raises(InvalidAddress, InvalidName);
Object resolve_str(in StringName n)
raises(NotFound,
CannotProceed,
InvalidName,
AlreadyBound
);
};
};
#pragma ID CosNaming "IDL:omg.org/CosNaming:1.0"
#endif // _COSNAMING_IDL_
CosNamingインタフェースの宣言とプロトタイプは、CORBAネーム・サービスのソフトウェア・キットの一部として提供されます。
Oracle Tuxedo CORBA C++クライアント・アプリケーションのインクルード・ファイルは、$TUXDIR/include
ディレクトリ(UNIXシステム)または%TUXDIR%¥include
ディレクトリ(Windowsシステム)にあります。
Bootstrapオブジェクトは、ネームスペースのルートに接続するために、NameService
環境オブジェクトをサポートしています。NameService環境オブジェクトを使用する場合、オブジェクト・リクエスト・ブローカ(ORB)がネームスペースのルートを特定します。次に、オブジェクト参照をCosNaming::NamingContext
またはCosNamingContextExt
にナロー変換できます。オブジェクトをネームスペースにバインドし、ネームスペースの名前を解決する前に、Oracle Tuxedoネームスペースに接続する必要があります。
BootstrapオブジェクトまたはCORBAインターオペラブル・ネーミング・サービス(INS)のブートストラップ処理メカニズムを使用すると、NameService環境オブジェクトへの初期リファレンスを取得できます。OracleクライアントORBを使用する場合は、Oracle社固有のメカニズムを使用します。別のベンダーのクライアントORBを使用する場合は、CORBA INSメカニズムを使用します。Oracle Tuxedoドメインのブートストラップ処理の詳細は、Oracle Tuxedoオンライン・ドキュメントの『CORBAプログラミング・リファレンス』の「CORBAブートストラップ処理のプログラミング・リファレンス」を参照してください。
リスト 5-2では、Oracle Tuxedoネームスペースとの通信を確立するC++コードを示します。
...
Tobj_Bootstrap * bootstrap = new Tobj_Bootstrap (v_orb.in(), "");
CORBA::Object_var var_nameservice_oref=
bootstrap.resolve_initial_references("NameService");
root = CosNaming::NamingContext::_narrow (obj);
...
ネームスペースのルートの文字列化されたオブジェクト参照を使用して、Oracle Tuxedoドメインでネームスペースに接続することもできます。文字列化されたオブジェクト参照を使用するには、CORBAネーム・サービスのサーバー・プロセスを開始するときに-f
コマンドライン・オプションを指定する必要があります。-f
コマンドライン・オプションは、文字列化されたオブジェクト参照をCNS_ROOT_FILE
環境変数、または以下の場所のいずれかに書き込みます。
ネームスペースのルート用の文字列化されたオブジェクト参照は、CORBAネーム・サービスのサーバー・プロセスが開始または終了しても変更されません。文字列化されたオブジェクト参照は、特定のサーバー・プロセスではなく、特定のホスト・マシンに関連付けられているためです。Oracle Tuxedoネームスペースと通信するために取得されている文字列化されたオブジェクト参照を、ほかのOracle Tuxedoと通信するために使用することはできません。
リスト 5-3では、文字列化されたオブジェクト参照を使用してOracle Tuxedoネームスペースとの通信を確立するC++コードを示します。
...
Tobj_Bootstrap * bootstrap;
bootstrap = new Tobj_Bootstrap (v_orb.in(), "");
CORBA::Object_var obj = GetRefFromFile ("cnsroot.dat", v_orb);
root = CosNaming::NamingContext::_narrow (obj);
...
セキュリティとトランザクションも利用するOracle Tuxedo CORBAアプリケーションで、文字列化されたオブジェクト参照を使用する場合は、以下の制限事項に注意してください。
Oracle Tuxedoアプリケーションが最初にBootstrapオブジェクトを作成しなかった場合、ネームスペースから取り出したオブジェクトでトランザクションとセキュリティを使用することはできません。トランザクションとセキュリティは、正式な接続を使用する必要があります。
UBBCONFIG
ファイルで定義されている場合、Oracle Tuxedo CORBAアプリケーションは、UBBCONFIG
ファイル内でTOBJADDR
環境変数が定義している最初のIIOPリスナー/ハンドラを使用する必要があります。 CORBAネーム・サービスは、IIOPリスナー/ハンドラのデフォルトのホストとポートを使用して、ネームスペースのルートに対して文字列化されたオブジェクト参照を作成します。UBBCONFIG
ファイルで定義されている最初のIIOPリスナー/ハンドラが、デフォルトIIOPリスナー/ハンドラとみなされます。デフォルトIIOPリスナー/ハンドラを使用すると、CORBAネーム・サービスによって取得されたすべてのオブジェクト参照が正式な接続になります。トランザクションとセキュリティは、正式な接続を使用する必要があります。
Oracle Tuxedoネームスペースにオブジェクトをバインドする方法には、以下の2種類があります。
cnsbind
コマンドを使用すると、アプリケーション・オブジェクトまたはネーミング・コンテキスト・オブジェクトをOracle Tuxedoネームスペースにバインドできます。cnsbind
コマンドを使用する前に、CORBAネーム・サービスのサーバー・プロセスを開始する必要があります。cnsbind
コマンドの詳細は、「CORBAネーム・サービス・リファレンス」を参照してください。
リスト 5-4では、CosNaming::NamingContext
オブジェクトのbind()
メソッドのC++実装を示します。このサンプル・コードでは、Name
のid
フィールドとkind
フィールドを表す2つのパラメータを受け付けます。この2つのパラメータは、SimpleFactory
オブジェクトのName
を初期化し、SimpleFactory
オブジェクトをネームスペースにバインドします。
...
//Establish the Name used to identify the SimpleFactory object
//in the namespace.
CosNaming::Name_var factory_name = new CosNaming::Name(1);
factory_name->length(1);
factory_name[(CORBA::ULong) 0].id =
(const char * "simple_factory";
factory_name[(CORBA::ULong) 0].kind =
(const char *) "";
//Create an object reference for the SimpleFactory object
s_v_factory_refer = TP::create_object_reference(
_tc_SimpleFactory->id(),
"simple_factory",
CORBA::NVList::_nil()
);
//Get the NameService object reference. See Listing 4-2.
//Place the object reference for SimpleFactory in the namespace
root->bind(factory_name, s_v_fact_ref);
...
CosNaming::NamingContext
オブジェクトのresolve()
メソッドを使用して、Oracle Tuxedoドメインのネームスペースでオブジェクトをロケートします。リスト 5-5では、Name
のid
フィールドとkind
フィールドを表す2つのパラメータを受け付けるC++コードを示します。サンプル・コードでは、ネーミング・コンテキストにバインドし、名前を解決し、指定したオブジェクトのオブジェクト参照を取得します。
...
//Establish the Name used to identify the SimpleFactory object
//in the namespace.
CosNaming::Name_var factory_name = new CosNaming::Name(1);
factory_name->length(1);
factory_name[(CORBA::ULong) 0].id =
(const char * "simple_factory";
factory_name[(CORBA::ULong) 0].kind =
(const char *) "";
//Locate the SimpleFactory object in the namespace
CORBA::Object_var v_simple_factory_oref =
root->resolve( *factory_name);
SimpleFactory_var v_simple_factory_ref =
SimpleFactory::_narrow(v_simple_factory_oref.in());
// Use the reference obtained from the Oracle Tuxedo CORBA Name Service // to find the Simple object
Simple_var v_simple = v_simple_factory_ref->find_simple();
...
![]() ![]() ![]() |