![]() |
![]() |
![]() |
![]() |
![]() |
•
•
• Bootstrapオブジェクトは、IIOPリスナー/ハンドラのアドレスの形式によっては特定のOracle Tuxedoドメインへの最初の接続を表す場合があります。NULLスキームUniversal Resource Locator (URL)形式を使用する場合(バージョン5.1より前のOracle WebLogic EnterpriseのリリースとOracle Tuxedoリリース8.0でサポートされている唯一のアドレス形式)、Bootstrapオブジェクトは最初の接続を表します。ただし、このURL形式を使用する場合、Bootstrapオブジェクトが作成されるまで接続は行われません。アドレス形式と接続時期の詳細は、「Tobj_Bootstrap」を参照してください。SecurityCurrentオブジェクトは、Oracle Tuxedoドメイン内のセキュリティ・コンテキストを確立するために使用します。クライアントは、SecurityCurrentオブジェクトのprincipal_authenticator属性からPrincipalAuthenticatorを取得できます。
•
•
•
•
• ファクトリ・オブジェクト参照と一致する利用可能なすべてのファクトリのリストを取得する(find_factories)。
• 特定の種類の利用可能な最初のファクトリを取得する(find_one_factory_by_id)。
• 特定の種類の利用可能なすべてのファクトリのリストを取得する(find_factories_by_id)。
• 登録されているすべてのファクトリのリストを取得する(list_factories)。
•
•
•
•
注意: 新しいURLアドレス形式(corbaloc://hostname:port_number)を使用している場合のSecurityCurrentの解決はローカルの操作です。つまり、クライアントからIIOPリスナー/ハンドラへの接続は行われません。Currentオブジェクトの新しいインスタンスを作成するには、アプリケーションは最初にBootstrapオブジェクトでdestroy_current()メソッドを呼び出す必要があります。この呼出しですべてのCurrentオブジェクトが無効になりますが、Oracle Tuxedoドメインとのセッションは破棄されません。destroy_current()を呼び出した後は、既存のBootstrapオブジェクトを使用してOracle Tuxedoドメイン内でCurrentオブジェクトの新しいインスタンスを作成できます。別のドメインのCurrentオブジェクトを取得するには、別のBootstrapオブジェクトを作成する必要があります。一度に複数のBootstrapオブジェクトを持つことが可能ですが、アクティブにできる、つまりCurrentオブジェクトを関連付けることができるBootstrapオブジェクトは1つのみです。したがって、アプリケーションではまず、アクティブなBootstrapオブジェクトでdestroy_current()を呼び出してから、その後アクティブなBootstrapオブジェクトになる別のBootstrapオブジェクトで新しいCurrentオブジェクトを取得する必要があります。
注意: 複数のドメインのオブジェクトにアクセスする必要がある場合は、オブジェクトをローカル・ドメインにインポートするか、アプリケーションが複数のドメインにアクセスするよう管理者が構成します。マルチ・ドメイン構成の詳細は、『Oracle Tuxedo Domainsコンポーネントの使用』の複数のCORBAドメインの構成に関する項を参照してください。サーバーとネイティブ・クライアントはOracle Tuxedoドメインの内部にあります。したがって、セッションは確立されません。ただし、同じ包含関係が強制されます。サーバーとネイティブ・クライアントは、//host:portではなく空の文字列を指定して、それらが現在含まれているドメインにアクセスします。
注意: Bootstrapオブジェクトを使用する場合、クライアント・アプリケーションとサーバー・アプリケーションでは、ORB::resolve_initial_references()メソッドではなくTobj_Bootstrap::resolve_initial_references()メソッドを使用する必要があります。表4-1に、Bootstrapオブジェクトを使用して他の環境オブジェクト(FactoryFinder、SecurityCurrent、TransactionCurrent、InterfaceRepositoryなど)にアクセスできるリモート・クライアントのタイプを示します。これらのクライアントは、Oracle Tuxedo CORBAソフトウェアに付属しています。サード・パーティ製のクライアントORBでは、CORBA Interoperable Naming Serviceを使用する必要があります。
• クライアント・アプリケーションには複数のBootstrapオブジェクトが共存できますが、Currentオブジェクト(TransactionとSecurity)を所有できるBootstrapオブジェクトは一度に1つのみです。クライアント・アプリケーションでは、1つのドメインと関連付けられているBootstrapオブジェクトでdestroy_current()を呼び出してから、別のドメインのCurrentオブジェクトを取得する必要があります。別々のOracle Tuxedoドメインと接続を確立する複数のBootstrapオブジェクトを持つこともできますが、Currentオブジェクトは1組しか有効になりません。既存のCurrentオブジェクトを破棄しないと、ほかのCurrentオブジェクトを取得することはできません。
• 有効なSecurityCurrentオブジェクトを備えるドメイン以外の、セキュリティが有効なOracle Tuxedoドメインに対するメソッド呼出しは失敗し、CORBA::NO_PERMISSION例外を返します。表4-2に、各IDで返されるオブジェクト参照を示します。
表4-2 返されるオブジェクト参照 FactoryFinderオブジェクト(Tobj::FactoryFinder) InterfaceRepositoryオブジェクト(CORBA::Repository) CORBAネーミング・サービス(Tobj::NameService) (CosNotifyChannelAdmin::
EventChannelFactory) SecurityCurrentオブジェクト(SecurityLevel2::Current) OTS Currentオブジェクト(Tobj::TransactionCurrent) Oracleシンプル・イベント
ChannelFactoryオブジェクト(Tobj_SimpleEvents::
ChannelFactory)表4-3に、Tobjモジュールの例外を示します。
表4-3 Tobjモジュールの例外 リスト4-1に、Tobj_bootstrap.hファイルのC++宣言を示します。リスト4-1 Tobj_boostrap.hの宣言class Tobj_Bootstrap {
public:
Tobj_Bootstrap(CORBA::ORB_ptr orb, const char* address);
CORBA::Object_ptr resolve_initial_references(
const char* id);
void register_callback_port(CORBA::Object_ptr objref);
void destroy_current( );
};リスト4-2に、Tobj_Bootstrap.javaのマッピングを示します。リスト4-2 Tobj_Bootstrap.javaのマッピングpublic void register_callback_port(orb.omg.CORBA.Object objref)
throws org.omg.CORBA.SystemException;リスト4-3に、オートメーションBootstrapインタフェースのマッピングを示します。
注意: リモート・クライアントの場合、addressでは、クライアント・アプリケーションがOracle Tuxedoドメインにアクセスするために使用するIIOPリスナー/ハンドラのネットワーク・アドレスを指定します。“//hostname:port_number”
“//#.#.#.#:port_number”
“corbaloc://hostname:port_number”
“corbalocs://hostname:port_number”最初の形式では、ドメインはローカルの名前解決機能(通常はDNS)を使用してhostnameのアドレスを検索します。ホスト名はリモート・マシンでなければならず、ローカルの名前解決機能ではhostnameがそのリモート・マシンのアドレスに明確に解決されなければなりません。2番目の形式では、#.#.#.#はドット区切りの10進数形式です。ドット区切りの10進数形式では、それぞれの#に0から255の数字を指定します。このドット区切りの10進数は、リモート・マシンのIPアドレスを表します。最初と2番目のどちらの形式でも、port_numberは、ドメイン・プロセスが受信リクエストをリスニングするTCPポート番号です。port_numberは、0 - 65535の数字でなければなりません。複数のアドレスを指定した場合、Oracle Tuxedoソフトウェアは、接続が確立されるまで左から右へ順番にアドレスを試行します。試行中にいずれかのアドレスで構文エラーが検出されると、BAD_PARAM例外がただちに呼出し側に返され、Oracle Tuxedoソフトウェアは接続の試行を中断します。たとえば、上記のカンマ区切りリストの最初のアドレスが//m1.3050である場合は、構文エラーが検出され、接続の試行が中断されます。Oracle Tuxedoソフトウェアがアドレス・リストの最後まで達しても有効なアドレスで接続を試行できない場合、つまりリストのどのアドレスにも接続を確立できない場合は、INVALID_DOMAIN例外が呼出し側に返されます。INVALID_DOMAIN以外の例外が生成された場合、その例外は呼出し側に直ちに返されます。Oracle Tuxedoでは、ランダムなアドレスの選択もサポートされています。ランダムなアドレスの選択を使用する場合は、アドレス・リストの任意のメンバーを、かっこで囲まれたパイプ(|)区切りのネットワーク・アドレスのグループとして指定できます。例:この形式を使用した場合、Oracle Tuxedoシステムでは、かっこで囲まれたアドレスのいずれか(//m1.acme:3050または//m2.acme:3050)がランダムに選択されます。INVALID_DOMAIN以外の例外が生成された場合、その例外は呼出し側に直ちに返されます。選択したアドレスで接続を確立できない場合は、かっこの後にある次の要素で接続が試行されます。接続を確立できないうちに文字列の最後に達してしまった場合は、INVALID_DOMAIN例外が呼出し側にスローされます。パイプ区切りリスト内のNULLアドレスは無効とみなされます。Oracle Tuxedoソフトウェアで無効なアドレスがランダムに選択された場合は、BAD_PARAM例外が呼出し側に返され、Oracle Tuxedoソフトウェアは接続の試行を中断します。TOBJADDR環境変数の詳細は、『Oracle Tuxedoアプリケーションの設定』のリモート・クライアント・アプリケーションの管理に関する項を参照してください。ただし、Tobj_Bootstrapで指定されたアドレスの方が常にTOBJADDR 環境変数よりも優先されます。TOBJADDR環境変数を使用してアドレス文字列を指定するには、Tobj_Bootstrapのaddressパラメータで空の文字列を指定する必要があります。
注意: C++アプリケーションの場合、TOBJADDRは環境変数であり、Javaアプリケーションの場合はプロパティ、Javaアプレットの場合はHTMLパラメータです。3番目と4番目の形式はUniform Resource Locator (URL)アドレス形式と呼ばれ、Oracle WebLogic Enterpriseバージョン5.1リリースで導入されました。NULLスキームURLアドレス形式(//hostname:port_number)の場合と同じように、URLアドレス形式を使用してIIOPリスナー/ハンドラの場所を指定します。ただし、corbaloc URLアドレス形式を使用する場合、IIOPリスナー/ハンドラへのクライアント・アプリケーションの初期接続はプリンシパル(クライアント)のIDが認証されるまで、またはユーザーが最初の操作を開始するまで遅延されます。corbalocs URLアドレス形式を使用する場合でもcorbalocと同じ接続の遅延がありますが、それに加えて、クライアント・アプリケーションがSecure Sockets Layer (SSL)プロトコルを使用してISL/ISHとの初期接続を行います。表4-4に、2つのURLアドレス形式の違いを示します。
注意: プリンシパルは、SecurityLevel2::Current::authenticate()操作を使用して証明書ベースの認証の使用を指定することでブートストラップ処理プロセスを保護できます。 corbalocおよびcorbalocs URLスキームは、TCP/IP中心の環境とDNS中心の環境の両方で簡単に操作される場所を提供します。これらのURLスキームでは、DNS形式のhostnameまたはIPアドレスとport_numberを指定します。次に例を示します。corbalocs://curly:1024,corbaloc://larry:1111,
corbalocs://ctxobj:3434,mthd:3434,corbaloc://force:1111上の例では、パーサーがURL corbaloc://force:1111に達した場合、安全な接続を試行しなかった場合と同様にその内部状態をリセットし、保護されていない接続の試行を開始します。
注意:
注意: Netscapeの埋込み型Java ORBおよびJavaSoft JDK ORBで使用するように提供されるBootstrapオブジェクトでは、corbalocおよびcorbalocs URLはサポートされていません。
注意: BootstrapコンストラクタまたはTOBJADDRで指定するネットワーク・アドレスは、サーバー・アプリケーションのUBBCONFIGファイル内のネットワーク・アドレスと正確に一致している必要があります(アドレスと大文字/小文字の区別の両方)。アドレスが一致しない場合、Bootstrapコンストラクタの呼出しは失敗し、見たところ関係のなさそうな次のエラー・メッセージが表示されます。
ERROR: Unofficial connection from client at
<tcp/ip address>/<port-number>
たとえば、ネットワーク・アドレスがサーバー・アプリケーションのUBBCONFIGファイルのISLコマンド行オプション文字列で(NULL URLアドレス形式を使用して) //TRIXIE:3500として指定されている場合、BootstrapコンストラクタまたはTOBJADDRで//192.12.4.6:3500または//trixie:3500を指定すると接続の試行は失敗します。UNIXシステムで大文字/小文字の区別を調べるには、ホスト・システムでuname -nコマンドを使用します。Windowsシステムで正確な大文字/小文字の区別を調べるには、コントロール・パネルでホスト・システムのネットワーク設定を確認します。ネイティブ・クライアントの場合、Tobj_Bootstrapコンストラクタのaddressパラメータは常に(NULLポインタではなく)空の文字列である必要があります。ネイティブ・クライアントは、TUXCONFIG環境変数で指定されたアプリケーションに接続します。アドレスが空でない場合は、コンストラクタによって CORBA::BAD_PARAMが生成されます。サーバーがBootstrapオブジェクトへのアクセスを必要とする場合、TP.bootstrap()を呼び出して、TPフレームワークを使用してその参照を取得する必要があります。Bootstrapオブジェクトの新しいインスタンスを作成することは避ける必要があります。applet (Javaメソッドのみに適用)これは、クライアント・アプレットへのポインタです。クライアント・アプレットからBootstrapコンストラクタにISHホストとポートが明示的に渡されない場合、この引数を渡すことができ、これにより、BootstrapオブジェクトはアプレットのHTMLファイルでTOBJADDRの定義を検索します。オブジェクトがnilである場合、またはオブジェクトに格納されているホストが接続と一致しないか、ホスト・アドレス(//hostname:port_number)が有効な形式でない場合に生成されます。このC++メンバー関数(またはJavaメソッド)は、共同クライアント/サーバーの受信ポートをISHに通知するために呼び出します。このメソッドは、GIOP 1.2の双方向機能をサポートしていない共同クライアント/サーバーORB (つまりGIOP 1.0および1.1のクライアントORB)でのみ使用してください。GIOP 1.0および1.1の場合、ISHでは共同クライアント/サーバーごとに1つの受信ポートのみがサポートされます。そのため、register_callback_portメソッドは、接続されている共同クライアント/サーバーごとに1回のみ呼び出すようにしてください。
•
• POAのかわりにOracleWrapper Callbacks APIを使用している場合、双方向の動作を使用するには、GIOP 1.2をサポートするISHを使用していても、常にregister_callback_portメソッドを呼び出す必要があります。
• コールバック・オブジェクトの双方向機能を使用する場合は、register_callback_portメソッドを呼び出してから、コールバック・オブジェクトの参照をサーバーに渡す必要があります。idが前述の名前のいずれでもない場合に生成されます。サーバーでは、SecurityCurrentが渡された場合にもresolve_initial_referencesで Tobj::InvalidNameが生成されます。このC++メンバー関数(またはJavaメソッド)は、FactoryFinder、SecurityCurrent、TransactionCurrent、NotificationService、Tobj_SimpleEventsServiceおよびInterfaceRepositoryの各オブジェクトのCORBAオブジェクト参照を取得します。特定のオブジェクト参照については、_narrow関数を呼び出します。たとえば、FactoryFinderの場合はTobj::FactoryFinder::_narrowを呼び出します。表4-2に、各idで返されるオブジェクト参照を示します。BootstrapオブジェクトがCurrentオブジェクトの所有者でない場合、CORBA::NO_PERMISSIONが生成されます。このC++メンバー関数は、Bootstrapオブジェクトで表されるドメインのCurrentオブジェクトを無効にします。destroy_current()メソッドを呼び出した後、Currentオブジェクトは無効としてマークされます。それ以降に古いCurrentオブジェクトを使用しようとすると、CORBA::BAD_INV_ORDER例外がスローされます。プログラミングでは、すべてのCurrentオブジェクトを解放してからdestroy_current()を呼び出すようにしてください。
注意: アプリケーションでは、destroy_current()を呼び出してから、別のドメインのTransactionCurrentまたはSecurityCurrentのresolve_initial_referencesを呼び出す必要があります。そうしないと、resolve_initial_referencesでCORBA::NO_PERMISSIONが生成されます。HRESULT Initialize(
[in] BSTR host);Oracle TuxedoドメインのIIOPリスナー/ハンドラのホスト名とポート。1つ以上のTCP/IPアドレスを指定できます。複数のアドレスを指定するには、C++マッピングの場合と同様にカンマ区切りリストを使用します。アドレスを指定しない場合は、TOBJADDR環境変数の値が使用されます。
注意: BootstrapコンストラクタまたはTOBJADDRで指定するネットワーク・アドレスは、アプリケーションのUBBCONFIGファイル内のネットワーク・アドレスと正確に一致している必要があります(アドレスの形式と大文字/小文字の区別の両方)。アドレスが一致しない場合、Bootstrapコンストラクタの呼出しは失敗し、見たところ関係のなさそうな次のエラー・メッセージが表示されます。
ERROR: Unofficial connection from client at
<tcp/ip address>/<port-number>
たとえば、ネットワーク・アドレスがISLコマンド行オプション文字列で//TRIXIE:3500として指定された場合、BootstrapコンストラクタまたはTOBJADDRで//192.12.4.6:3500または//trixie:3500を指定すると接続の試行が失敗します。UNIXシステムで大文字/小文字の区別を調べるには、ホスト・システムでuname -nコマンドを使用します。Windowsシステムで正確な大文字/小文字の区別を調べるには、コントロール・パネルでホスト・システムのネットワーク設定を確認します。表4-5に例外を示します。
表4-5 Initializeの例外 指定されたアドレスでOracle Tuxedoドメインと通信できないか、TOBJADDRが定義されていません。 表4-6に例外を示します。
表4-6 CreateObjectの例外 指定されたprogidが有効ではありません。 リクエストされたprogidが前述の有効なパラメータ値のいずれでもありません。 リクエストされたprogidがシステムに登録されていません。 CoCreate Instance()が失敗した リスト4-4に、Bootstrapオブジェクトを使用するVisual Basicクライアントのプログラミング方法を示します。リスト4-4 Visual Basicでのクライアントのプログラミング‘Connect to the Oracle Tuxedo Domain
oBootstrap.Initialize “//host:port”‘Get the FactoryFinder for the Oracle Tuxedo Domain
Set oBSFactoryFinder = oBootstrap.CreateObject(“Tobj.FactoryFinder”)
• 表4-7に、各IDで返されるオブジェクト参照を示します。
表4-7 返されるオブジェクト参照 FactoryFinderオブジェクト(CORBA::FactoryFinder) InterfaceRepositoryオブジェクト(CORBA::Repository) CORBAネーミング・サービス・オブジェクト(CORBA::NameService) (CosNotifyChannelAdmin::EventChannelFactory) POACurrentオブジェクト(CORBA::POACurrent) PrincipalAuthenticatorオブジェクト(SecurityLevel2::PrincipalAuthenticator) RootPOAオブジェクト(CORBA::RootPOA) Oracleシンプル・イベントChannelFactoryオブジェクト(Tobj_SimpleEvents::ChannelFactory)リリース8.0以降のOracle Tuxedo CORBAでは、-ORBInitRefおよび-ORBDefaultInitRefコマンド行オプションがサポートされています。これらのオプションの詳細は、「ORB初期化メンバー関数」を参照してください。この例の場合、FactoryFinderのORB::resolve_initial_referencesを呼び出すと、相互運用可能な初期参照のリクエストがポート2468を使用してmyhostのISL/ISHに送信されます。myhostは、tuxconfigファイルでISL/ISHに指定されたホストと大文字/小文字の区別まで正確に同じでなければなりません。
• INS初期参照メカニズムを使用するOracle Tuxedo CORBA IIOPクライアントでは、Tobj_Bootstrap::resolve_initial_references関数ではなくORB::resolve_initial_references関数を呼び出す必要があります。ORB::resolve_initial_referencesの構文の説明については、「CORBA::ORB::resolve_initial_references」を参照してください。
• INS初期参照メカニズムを使用するOracle Tuxedo CORBA IIOPクライアントでは、Tobj_Bootstrap::list_initial_services関数ではなくORB::list_initial_services関数を使用する必要があります。ORB::list_initial_servicesの構文の説明については、「CORBA::ORB::list_initial_services」を参照してください。
注意: 新しいURL文字列形式は、ORB::string_to_object関数に渡すこともできます。IORスキームは、IOR:hex_octetsという形式の文字列です。スキーム名はIORで、":"の後のテキストはCORBA仕様で定義されます。IOR URLスキームは堅牢であり、オブジェクトの参照に使用されるカプセル化されたトランスポート情報とオブジェクト・キーからクライアントを切り離します。表4-8に、各URL要素のBNF構文をリストします。
表4-8 URL要素のBNF形式 表4-9に、各URL要素の説明を示します。
表4-9 URL要素の説明 NULLで終了しない、文字列化されたオブジェクト・キー。key_stringでは、RFC 2396で規定されているエスケープ規則を使用して、URLの一部として直接使用できないオクテット値を避けてマッピングします。US-ASCII英数字はエスケープされません。この範囲外の文字は、次の文字を除いてエスケープされます。 上の例では、パーサーがURL corbaloc::force.com:1111に達した場合、安全な接続を試行しなかった場合と同様にその内部状態をリセットし、保護されていない接続の試行を開始します。このURLは、ホスト555objs.comでNamingContext型のオブジェクト(オブジェクト・キーはNamingService)を見つけることができるか、または、その場所で動作しているエージェントがNamingContextへの参照を返すことを示します。文字列化された名前a/string/path/to/objは、そのNamingContextのresolve操作の引数として使用されます。corbaname URLはcorbaloc URLと似ていますが、corbaname URLにはネーミング・コンテキストのバインディングを識別する文字列化された名前も含まれている点が異なります。#文字は、文字列化された名前の開始を示します。URLのBNF構文を表4-10にリストします。
表4-10 URLのBNF構文 corbaloc_objは、corbaname URLのネーミング・コンテキストを識別する部分です。構文は、corbaloc URLの場合と同じです。
1. corbaname URLからcorbaloc::<corbaloc_obj>という形式のcorbaloc URLを作成します。
2.
4. この解決プロセスに従うと、ネーミング・サービスに存在しないネーミング・コンテキストのオブジェクト参照を返すことがなくなります。この手法の副次的影響の1つは、ネーミング・サービスのスタブがORBコアの一部であるか、resolve操作のリクエストを送信する内部メカニズムがあることが必要である点です。複雑な手間を避けるため、ネーミング・サービスのスタブをORBコアに埋め込むことをお薦めします。// utility to get the registrar
static UniversityW::Registrar_ptr get_registrar(
CORBA::ORB_ptr orb
)
{リスト4-6に、クライアント・アプリケーションがINSを使用してPrincipalAuthenticatorオブジェクトへのオブジェクト参照を取得する方法の例を示します。完全なサンプル・コードについては、University Sampleのクライアント・アプリケーションを参照してください。リリース8.0以降のOracle Tuxedo CORBAでは、CORBAトランザクション・サービス・インタフェースを使用したトランザクションの開始がサポートされています。クライアントは、ORB::resolve_initial_references(“FactoryFinder”)関数を使用してFactoryFinderへのオブジェクト参照を取得します。次にクライアントは、FactoryFinderを使用して(トランザクションの開始に使用する) TransactionFactoryのリファレンスを取得します。リスト4-7に、クライアント・アプリケーションがINSを使用してTransactionFactoryオブジェクトへのオブジェクト参照を取得する方法の例を示します。完全なサンプル・コードについては、University Sampleのクライアント・アプリケーションを参照してください。
4. create操作で返されたControlオブジェクトから、get_terminatorメソッドを使用してトランザクションのTerminatorインタフェースを取得します。TransactionFactoryは、Oracleの委任型インタフェースではなく、標準のCORBAトランザクション・サービス・インタフェースに準拠したオブジェクトを返します。これは、サード・パーティのORBが、それぞれのORBのresolve_initial_references関数を使用してOracle Tuxedo CORBAサーバーからTransactionFactoryへの参照を取得し、標準のOMG IDLから生成されたスタブを使用して、返されたインスタンスを処理できることを意味します。Oracle Tuxedo 8.0リリース以降では、TransactionFactoryとクライアントのCurrentのアクションが連携されません。つまり、クライアントでは、両方ではなく、2つのメカニズムのいずれかを使用してトランザクションのステータスを制御および取得する必要があります。また、表4-11にリストされているインタフェースと操作のみがサポートされています。OMG IDLで規定されているほかの操作では、CORBA::NO_IMPLEMENT例外が返されます。
表4-11 サポートされているINSインタフェースと操作