目次 前 次 PDF


CORBAブートストラップ処理のプログラミング・リファレンス

CORBAブートストラップ処理のプログラミング・リファレンス
このトピックには次の項が含まれます:
注意:
サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートやマニュアルは提供していません。
ブートストラップ処理が必要な理由
クライアント・アプリケーションがOracle Tuxedoオブジェクトと通信するためには、オブジェクト参照を取得する必要があります。オブジェクト参照がないと、通信できません。この問題を解決するために、クライアント・アプリケーションではブートストラップ処理メカニズムを使用してOracle Tuxedoドメインのオブジェクトへのオブジェクト参照を取得します。
サポートされているブートストラップ処理メカニズム
リリース8.0以降のTuxedoでは、2つのブートストラップ処理メカニズムがサポートされます。
OracleクライアントORBを使用する場合に使用します。
別のベンダーのクライアントORBを使用する場合に使用します。
注意:
Oracleブートストラップ処理メカニズム
Oracleブートストラップ処理メカニズムでは、Bootstrapオブジェクトを使用します。Bootstrapオブジェクトは、クライアントとサーバー両方のローカル・プログラミング・オブジェクトであり、リモートCORBAオブジェクトではありません。Bootstrapオブジェクトが作成される際、そのコンストラクタはOracle Tuxedo IIOPリスナー/ハンドラのネットワーク・アドレスを必要とします。その情報が提供されると、ブートストラップ処理オブジェクトはOracle Tuxedoドメインの主要なリモート・オブジェクトのオブジェクト参照を生成できます。その後、それらのオブジェクト参照を使用して、Oracle Tuxedoドメインで使用可能なサービスにアクセスできます。
Bootstrapオブジェクトの機能
Bootstrapオブジェクトは、次のOracle Tuxedo CORBAインタフェースのオブジェクト参照にアクセスする必要のあるクライアントまたはサーバー・アプリケーションによって作成されます。
Bootstrapオブジェクトは、IIOPリスナー/ハンドラのアドレスの形式によっては特定のOracle Tuxedoドメインへの最初の接続を表す場合があります。NULLスキームUniversal Resource Locator (URL)形式を使用する場合(バージョン5.1より前のOracle WebLogic EnterpriseのリリースとOracle Tuxedoリリース8.0でサポートされている唯一のアドレス形式)、Bootstrapオブジェクトは最初の接続を表します。ただし、このURL形式を使用する場合、Bootstrapオブジェクトが作成されるまで接続は行われません。アドレス形式と接続時期の詳細は、「Tobj_Bootstrap」を参照してください。
Oracle Tuxedo CORBAリモート・クライアントについては、BootstrapオブジェクトはOracle Tuxedo IIOPリスナー/ハンドラのホストとポートを使用して作成されます。ただし、Oracle Tuxedoネイティブのクライアント・アプリケーションとサーバー・アプリケーションの場合、特定のOracle Tuxedoドメインで実行されるため、ホストとポートを指定する必要はありません。IIOPリスナー/ハンドラのホストとポートIDは、Oracle Tuxedoドメインの構成情報に含まれています。
Bootstrapオブジェクトは、その作成後に、特定のOracle Tuxedoドメインにあるオブジェクトのオブジェクト参照に対するリクエストを満たします。異なるBootstrapオブジェクトを使用すると、アプリケーションで複数のドメインを使用できます。
Bootstrapオブジェクトを使用すると、次のオブジェクトのオブジェクト参照を取得できます。
SecurityCurrentオブジェクトは、Oracle Tuxedoドメイン内のセキュリティ・コンテキストを確立するために使用します。クライアントは、SecurityCurrentオブジェクトのprincipal_authenticator属性からPrincipalAuthenticatorを取得できます。
TransactionCurrentオブジェクトは、Oracle Tuxedoトランザクションに参加するために使用します。基本的な操作は次のとおりです。
トランザクションを開始します。その後の操作は、このトランザクションのスコープ内で行われます。
トランザクションを終了します。このクライアント・アプリケーションでのすべての操作が正常に完了しています。
トランザクションを中断します。他のすべての参加リソースにロールバックを指示します。
現在のトランザクションへの参加を一時停止します。この操作は、トランザクションを示すオブジェクトを返し、クライアント・アプリケーションが後でトランザクションを再開できるようにします。
指定したトランザクションの参加を再開します。
FactoryFinderオブジェクトは、ファクトリを取得するために使用します。Oracle Tuxedoシステムでは、ファクトリを使用してアプリケーション・オブジェクトが作成されます。FactoryFinderでは、次のような様々な方法でファクトリを検索できます。
idと種類で構成される名前コンポーネントと一致するファクトリを取得する(find_one_factory)。
インタフェース・リポジトリには、Oracle Tuxedoドメイン内で実装されるCORBAオブジェクトのインタフェース記述が含まれています。動的起動インタフェース(DII)を使用するクライアントがCORBAリクエストの構造体をビルドするには、インタフェース・リポジトリへの参照が必要です。
NamingServiceオブジェクトは、ルート・ネームスペースへの参照を取得するために使用します。このオブジェクトを使用すると、ORBはネームスペースのルートを検索します。
NotificationServiceオブジェクトは、CosNotificationサービス内のイベント・チャネル・ファクトリ(CosNotifyChannelAdmin::EventChannelFactory)への参照を取得するために使用します。Oracle Tuxedoシステムでは、EventChannelFactoryを使用して通知サービス・チャネルが検索されます。
Tobj_SimpleEventsServiceオブジェクトは、Oracleシンプル・イベント・サービス内のイベント・チャネル・ファクトリ(Tobj_SimpleEvents::ChannelFactory)への参照を取得するために使用します。Oracle Tuxedoシステムでは、ChannelFactoryを使用してOracleシンプル・イベント・サービス・チャネルが検索されます。
ブートストラップ処理メカニズムを使用すると、次の6種類のリファレンスを取得できます。
SecurityCurrentオブジェクトは、Oracle Tuxedoドメイン内のセキュリティ・コンテキストを確立するために使用します。クライアントは、SecurityCurrentオブジェクトのprincipal_authenticator属性からPrincipalAuthenticatorを取得できます。
TransactionCurrentオブジェクトは、Oracle Tuxedoトランザクションに参加するために使用します。基本的な操作は次のとおりです。
トランザクションを開始します。その後の操作は、このトランザクションのスコープ内で行われます。
トランザクションを終了します。このクライアント・アプリケーションでのすべての操作が正常に完了しています。
トランザクションを中断します。他のすべての参加リソースにロールバックを指示します。
現在のトランザクションへの参加を一時停止します。この操作は、トランザクションを示すオブジェクトを返し、クライアント・アプリケーションが後でトランザクションを再開できるようにします。
指定したトランザクションの参加を再開します。
FactoryFinderオブジェクトは、ファクトリを取得するために使用します。Oracle Tuxedo CORBAでは、ファクトリを使用してアプリケーション・オブジェクトが作成されます。FactoryFinderでは、次のような様々な方法でファクトリを検索できます。
インタフェース・リポジトリには、Oracle Tuxedoドメイン内で実装されるCORBAオブジェクトのインタフェース記述が含まれています。動的起動インタフェース(DII)を使用するクライアントがCORBAリクエストの構造体をビルドするには、インタフェース・リポジトリへの参照が必要です。ActiveXクライアントは、この特殊なケースです。内部的に、COM/IIOPブリッジの実装はDIIを使用するため、デスクトップ・クライアントにとって透過的であっても、インタフェース・リポジトリへの参照を取得する必要があります。
NotificationServiceオブジェクトは、CosNotificationサービス内のイベント・チャネル・ファクトリ(CosNotifyChannelAdmin::EventChannelFactory)への参照を取得するために使用します。Oracle Tuxedo CORBAでは、EventChannelFactoryを使用して通知サービス・チャネルが検索されます。
Tobj_SimpleEventsServiceオブジェクトは、Oracleシンプル・イベント・サービス内のイベント・チャネル・ファクトリ(Tobj_SimpleEvents::ChannelFactory)への参照を取得するために使用します。Oracle Tuxedo CORBAでは、ChannelFactoryを使用してOracleシンプル・イベント・サービス・チャネルが検索されます。
FactoryFinderオブジェクトとインタフェース・リポジトリ・オブジェクトは、環境オブジェクト・ライブラリで実装されません。ただし、これらはOracle Tuxedoドメインに固有であり、したがって概念的にはSecurityCurrentオブジェクトおよびTransactionCurrentオブジェクトと用途が似ています。
Bootstrapオブジェクトは、クライアント・アプリケーションとOracle Tuxedoドメインの間の関連付け(セッション)を意味します。この関連付けのコンテキスト内で、Bootstrapオブジェクトは他のCurrentオブジェクト(包含されているオブジェクト)、つまりSecurityCurrentおよびTransactionCurrentとの包含関係を強制します。Currentオブジェクトは、そのドメインについてのみ、Bootstrapオブジェクトが存在している間にかぎり有効です。
注意:
新しいURLアドレス形式(corbaloc://hostname:port_number)を使用している場合のSecurityCurrentの解決はローカルの操作です。つまり、クライアントからIIOPリスナー/ハンドラへの接続は行われません。
また、クライアントが持つことができる各Currentオブジェクトのインスタンスは、どの時点でも1つのみです。Currentオブジェクトがすでに存在する場合、別のCurrentオブジェクトを作成しようとしても失敗することはありません。かわりに、既存のオブジェクトへの別の参照が渡されます。つまり、クライアント・アプリケーションは、Currentオブジェクトの1つのインスタンスへの参照を複数持つことができます。
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ドメインの内部にあります。したがって、セッションは確立されません。ただし、同じ包含関係が強制されます。サーバーとネイティブ・クライアントは、//host:portではなく空の文字列を指定して、それらが現在含まれているドメインにアクセスします。
注意:
Bootstrapオブジェクトを使用する場合、クライアント・アプリケーションとサーバー・アプリケーションでは、ORB::resolve_initial_references()メソッドではなくTobj_Bootstrap::resolve_initial_references()メソッドを使用する必要があります。
サポートされているOracleリモート・クライアントの種類
表4-1に、Bootstrapオブジェクトを使用して他の環境オブジェクト(FactoryFinder、SecurityCurrent、TransactionCurrent、InterfaceRepositoryなど)にアクセスできるリモート・クライアントのタイプを示します。これらのクライアントは、Oracle Tuxedo CORBAソフトウェアに付属しています。サード・パーティ製のクライアントORBでは、CORBA Interoperable Naming Serviceを使用する必要があります。
 
機能と制限事項
Bootstrapオブジェクトには、以下の機能と制限があります。
クライアント・アプリケーションには複数のBootstrapオブジェクトが共存できますが、Currentオブジェクト(TransactionとSecurity)を所有できるBootstrapオブジェクトは一度に1つのみです。クライアント・アプリケーションでは、1つのドメインと関連付けられているBootstrapオブジェクトでdestroy_current()を呼び出してから、別のドメインのCurrentオブジェクトを取得する必要があります。別々のOracle Tuxedoドメインと接続を確立する複数のBootstrapオブジェクトを持つこともできますが、Currentオブジェクトは1組しか有効になりません。既存のCurrentオブジェクトを破棄しないと、ほかのCurrentオブジェクトを取得することはできません。
BootstrapオブジェクトAPI
Bootstrapオブジェクト・アプリケーション・プログラミング・インタフェース(API)は、まずOMGインタフェース定義言語(IDL)で記述し(移植性のため)、その後、C++で記述します。C++の記述では、特定のOracle TuxedoドメインのBootstrapオブジェクトをビルドするために必要なコンストラクタが追加されます。
Tobjモジュール
表4-2に、各IDで返されるオブジェクト参照を示します。
 
(CosNotifyChannelAdmin::
EventChannelFactory
)
SecurityCurrentオブジェクト(SecurityLevel2::Current)
OTS Currentオブジェクト(Tobj::TransactionCurrent)
表4-3に、Tobjモジュールの例外を示します。
 
idが表4-2に示されている名前のいずれでもない場合に生成されます。サーバーではSecurityCurrentが渡された場合にもresolve_initial_referencesInvalidNameが生成されます。
idTransactionCurrentまたはSecurityCurrentであり、クライアントの別のBootstrapオブジェクトがCurrentオブジェクトを所有している場合に生成されます。
register_callback_portメソッドが複数回呼び出された場合に生成されます。
C++マッピング
リスト4-1に、Tobj_bootstrap.hファイルのC++宣言を示します。
リスト4-1 Tobj_boostrap.hの宣言
#include <CORBA.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( );
};
 
Javaマッピング
リスト4-2に、Tobj_Bootstrap.javaのマッピングを示します。
リスト4-2 Tobj_Bootstrap.javaのマッピング
package com.beasys;

public class Tobj_Bootstrap {
public Tobj_Bootstrap(org.omg.CORBA.ORB orb,
String address)
throws org.omg.CORBA.SystemException;
public class Tobj_Bootstrap {
public Tobj_Bootstrap(org.omg.CORBA.ORB orb, String address,
java.applet.Applet applet)
throws org.omg.CORBA.SystemException;
public void register_callback_port(orb.omg.CORBA.Object objref)
throws org.omg.CORBA.SystemException;
public org.omg.CORBA.Object
resolve_initial_references(String id)
throws Tobj.InvalidName,
org.omg.CORBA.SystemException;
public void destroy_current()
throws org.omg.CORBA.SystemException;
}
 
オートメーション・マッピング
リスト4-3に、オートメーションBootstrapインタフェースのマッピングを示します。
リスト4-3 オートメーション(デュアル) Bootstrapインタフェースのマッピング
interface DITobj_Bootstrap : IDispatch
{
HRESULT Initialize(
[in] BSTR address);
HRESULT CreateObject(
[in] BSTR progid,
[out, retval] IDispatch** rtrn);
HRESULT destroy_current();
};
 
C++メンバー関数
このセクションでは、Oracleブートストラップ処理メカニズムでサポートされるC++メンバー関数について説明します。
Tobj_Bootstrap
概要
Bootstrapオブジェクトのコンストラクタです。
C++マッピング
Tobj_Bootstrap(CORBA::ORB_ptr orb, const char* address);
throws Tobj::BAD_PARAM
org.omg.CORBA.SystemException;
パラメータ
orb
クライアントのORBオブジェクトへのポインタ。Bootstrapオブジェクトの内部では、orbstring_to_objectメソッドが使用されます。
address
Oracle TuxedoドメインのIIOPリスナー/ハンドラのアドレス。
注意:
複数のTobj_Bootstrapsで同じドメインを指定することはできません。
このアドレスは、クライアントのタイプと必要なセキュリティのレベルに応じて異なる形式で指定します。次のように、3つのタイプのクライアントがあります。
Oracle Tuxedo CORBAでサポートされるリモート・クライアントの説明については、「サポートされているOracleリモート・クライアントの種類」というセクションを参照してください。
リモート・クライアントの場合、addressでは、クライアント・アプリケーションがOracle Tuxedoドメインにアクセスするために使用するIIOPリスナー/ハンドラのネットワーク・アドレスを指定します。
アドレスは、次のいずれかの形式で指定できます。
“//hostname:port_number
“//#.#.#.#:
port_number
“corbaloc://
hostname:port_number
“corbalocs://
hostname:port_number
最初の形式では、ドメインはローカルの名前解決機能(通常はDNS)を使用してhostnameのアドレスを検索します。ホスト名はリモート・マシンでなければならず、ローカルの名前解決機能ではhostnameがそのリモート・マシンのアドレスに明確に解決されなければなりません。
注意:
hostnameは文字で始まる必要があります。
2番目の形式では、#.#.#.#はドット区切りの10進数形式です。ドット区切りの10進数形式では、それぞれの#に0から255の数字を指定します。このドット区切りの10進数は、リモート・マシンのIPアドレスを表します。
最初と2番目のどちらの形式でも、port_numberは、ドメイン・プロセスが受信リクエストをリスニングするTCPポート番号です。port_numberは、0 - 65535の数字でなければなりません。
1つ以上のTCP/IPアドレスを指定できます。複数のアドレスを指定するには、カンマ区切りリストを使用します。次に例を示します。
//m1.acme:3050
//m1.acme:3050,//m2.acme:3050,//m3.acme:3051
複数のアドレスを指定した場合、Oracle Tuxedoソフトウェアは、接続が確立されるまで左から右へ順番にアドレスを試行します。試行中にいずれかのアドレスで構文エラーが検出されると、BAD_PARAM例外がただちに呼出し側に返され、Oracle Tuxedoソフトウェアは接続の試行を中断します。たとえば、上記のカンマ区切りリストの最初のアドレスが//m1.3050である場合は、構文エラーが検出され、接続の試行が中断されます。Oracle Tuxedoソフトウェアがアドレス・リストの最後まで達しても有効なアドレスで接続を試行できない場合、つまりリストのどのアドレスにも接続を確立できない場合は、INVALID_DOMAIN例外が呼出し側に返されます。INVALID_DOMAIN以外の例外が生成された場合、その例外は呼出し側に直ちに返されます。
Oracle Tuxedoでは、ランダムなアドレスの選択もサポートされています。ランダムなアドレスの選択を使用する場合は、アドレス・リストの任意のメンバーを、かっこで囲まれたパイプ(|)区切りのネットワーク・アドレスのグループとして指定できます。例:
(//m1.acme:3050|//m2.acme:3050),//m1.acme:7000
この形式を使用した場合、Oracle Tuxedoシステムでは、かっこで囲まれたアドレスのいずれか(//m1.acme:3050または//m2.acme:3050)がランダムに選択されます。INVALID_DOMAIN以外の例外が生成された場合、その例外は呼出し側に直ちに返されます。選択したアドレスで接続を確立できない場合は、かっこの後にある次の要素で接続が試行されます。接続を確立できないうちに文字列の最後に達してしまった場合は、INVALID_DOMAIN例外が呼出し側にスローされます。
注意:
(//m1.acme:3050||//m2.acme:3050),//r1.acme:7000
パイプ区切りリスト内のNULLアドレスは無効とみなされます。Oracle Tuxedoソフトウェアで無効なアドレスがランダムに選択された場合は、BAD_PARAM例外が呼出し側に返され、Oracle Tuxedoソフトウェアは接続の試行を中断します。
アドレス文字列は、TOBJADDR環境変数またはTobj_Bootstrapコンストラクタのアドレス・パラメータで指定できます。
TOBJADDR環境変数の詳細は、『Oracle Tuxedoアプリケーションの設定』リモート・クライアント・アプリケーションの管理に関する項を参照してください。ただし、Tobj_Bootstrapで指定されたアドレスの方が常にTOBJADDR 環境変数よりも優先されます。TOBJADDR環境変数を使用してアドレス文字列を指定するには、Tobj_Bootstrapaddressパラメータで空の文字列を指定する必要があります。
注意:
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()操作を使用して証明書ベースの認証の使用を指定することでブートストラップ処理プロセスを保護できます。
これらのURLアドレス形式は、Interoperable Naming Service提案の一部としてOMGによって採用されたオブジェクトURLの定義のサブセットです。Oracle Tuxedoソフトウェアでは、Oracle WebLogic Enterpriseバージョン4.2で追加されたランダマイズ機能をサポートするのみでなく、セキュアHTTPのURLに基づいた安全な形式もサポートするように、OMG Interoperable Naming Service提案で規定されたURL形式が拡張されます。
corbalocおよびcorbalocs URLスキームは、TCP/IP中心の環境とDNS中心の環境の両方で簡単に操作される場所を提供します。これらのURLスキームでは、DNS形式のhostnameまたはIPアドレスとport_numberを指定します。次に例を示します。
corbaloc://curly:1024,larry:1022,joe:1999
corbalocs://host1:1024,{host2:1022|host3:1999}
OMG Interoperable Naming Service提案で規定されたURL構文の機能強化として、Oracle WebLogic Enterpriseバージョン5.1ソフトウェアでは、それぞれスキームが異なる複数のURLのリストをサポートするように構文が拡張されています。拡張の例を次に示します。
corbalocs://curly:1024,corbaloc://larry:1111,
corbalocs://ctxobj:3434,mthd:3434,corbaloc://force:1111
上の例では、パーサーがURL corbaloc://force:1111に達した場合、安全な接続を試行しなかった場合と同様にその内部状態をリセットし、保護されていない接続の試行を開始します。
注意:
NULLスキームURLアドレス(//hostname:port_number)とcorbalocおよびcorbalocs URLアドレスを一緒に使用しないでください。
注意:
注意:
corbalocおよびcorbalocs URLアドレス形式の使用の詳細は、『CORBAアプリケーションにおけるセキュリティの使用』を参照してください。
注意:
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の定義を検索します。
例外
BAD_PARAM
オブジェクトがnilである場合、またはオブジェクトに格納されているホストが接続と一致しないか、ホスト・アドレス(//hostname:port_number)が有効な形式でない場合に生成されます。
説明
Bootstrapオブジェクトを作成するC++メンバー関数(またはJavaメソッド)。
戻り値
新しく作成されたBootstrapオブジェクトへのポインタ。
Tobj_Bootstrap::register_callback_port
概要
IIOPハンドラ(ISH)で共同クライアント/サーバーの受信ポートを登録します。
C++マッピング
void register_callback_port(CORBA::Object_ptr objref);
パラメータ
objref
共同クライアント/サーバーによって作成されたオブジェクト参照。
例外
BAD_PARAM
オブジェクトがnilである場合、またはオブジェクトに格納されているホストが接続と一致しない場合に発生します。
IMP_LIMIT
register_callback_portメソッドが複数回呼び出された場合に生成されます。
説明
このC++メンバー関数(またはJavaメソッド)は、共同クライアント/サーバーの受信ポートをISHに通知するために呼び出します。このメソッドは、GIOP 1.2の双方向機能をサポートしていない共同クライアント/サーバーORB (つまりGIOP 1.0および1.1のクライアントORB)でのみ使用してください。GIOP 1.0および1.1の場合、ISHでは共同クライアント/サーバーごとに1つの受信ポートのみがサポートされます。そのため、register_callback_portメソッドは、接続されている共同クライアント/サーバーごとに1回のみ呼び出すようにしてください。
使用上の注意
このメソッドを使用するときには、以下の情報を考慮に入れてください。
register_callback_portメソッドが共同クライアント/サーバーから呼び出されない場合、コールバック・ポートはISHに登録されず、サーバーはデフォルトで非対称アウトバウンドIIOPに設定されます。この場合は、-Oオプションを使用してサーバーのIIOPリスナー(ISL)を起動する必要があります。-Oオプションは、非対称アウトバウンドIIOPを有効にします。非対称アウトバウンドIIOPを有効にしないと、サーバーからクライアントの呼出しがISL/ISHによって許可されません。
コールバック・オブジェクトの双方向機能を使用する場合は、register_callback_portメソッドを呼び出してから、コールバック・オブジェクトの参照をサーバーに渡す必要があります。
戻り値
なし。
Tobj_Bootstrap::resolve_initial_references
概要
CORBAオブジェクト参照を取得します。
C++マッピング
CORBA::Object_ptr resolve_initial_references(
const char* id);
throws Tobj::InvalidName,
org.omg.CORBA.SystemException;
パラメータ
id
このパラメータの値は次のいずれかです。
“FactoryFinder"
“InterfaceRepository"
“NameService"
“NotificationService"
“SecurityCurrent"
“TransactionCurrent"
“Tobj_SimpleEventsService"
例外
InvalidName
idが前述の名前のいずれでもない場合に生成されます。サーバーでは、SecurityCurrentが渡された場合にもresolve_initial_references Tobj::InvalidNameが生成されます。
CORBA::NO_PERMISSION
idがTransactionCurrentまたはSecurityCurrentであり、クライアントの別のBootstrapオブジェクトがCurrentオブジェクトを所有している場合に生成されます。
説明
このC++メンバー関数(またはJavaメソッド)は、FactoryFinder、SecurityCurrent、TransactionCurrent、NotificationService、Tobj_SimpleEventsServiceおよびInterfaceRepositoryの各オブジェクトのCORBAオブジェクト参照を取得します。特定のオブジェクト参照については、_narrow関数を呼び出します。たとえば、FactoryFinderの場合はTobj::FactoryFinder::_narrowを呼び出します。
戻り値
表4-2に、各idで返されるオブジェクト参照を示します。
Tobj_Bootstrap::destroy_current()
概要
Bootstrapオブジェクトで表されるドメインのCurrentオブジェクトを破棄します。
C++マッピング
void destroy_current();
例外
BootstrapオブジェクトがCurrentオブジェクトの所有者でない場合、CORBA::NO_PERMISSIONが生成されます。
説明
このC++メンバー関数は、Bootstrapオブジェクトで表されるドメインのCurrentオブジェクトを無効にします。destroy_current()メソッドを呼び出した後、Currentオブジェクトは無効としてマークされます。それ以降に古いCurrentオブジェクトを使用しようとすると、CORBA::BAD_INV_ORDER例外がスローされます。プログラミングでは、すべてのCurrentオブジェクトを解放してからdestroy_current()を呼び出すようにしてください。
注意:
destroy_current()メソッドは、2つのCurrentオブジェクト(TransactionとSecurity)を現在所有しているドメインのBootstrapオブジェクトで呼び出す必要があります。このメソッドを呼び出すと、セキュリティのlogoffが暗黙的に呼び出され、クライアントによって開始されたトランザクションがすべて暗黙的にロールバックされます。
アプリケーションでは、destroy_current()を呼び出してから、別のドメインのTransactionCurrentまたはSecurityCurrentのresolve­_initial_referencesを呼び出す必要があります。そうしないと、resolve_initial_referencesCORBA::NO_PERMISSIONが生成されます。
戻り値
なし。
Javaのメソッド
Java Oracleブートストラップ処理APIでは、次のメソッドがサポートされています。
オートメーションのメソッド
このセクションでは、Oracleブートストラップ処理メカニズムでサポートされているオートメーションのメソッドについて説明します。
Initialize
概要
BootstrapオブジェクトをOracle Tuxedoドメインに初期化します。
MIDLマッピング
HRESULT Initialize(
[in] BSTR host);
オートメーション・マッピング
Sub Initialize(address As String)
パラメータ
address
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に例外を示します。
 
CreateObject
概要
Current環境オブジェクトのインスタンスを作成します。
MIDLマッピング
HRESULT CreateObject(
[in] BSTR progid,
[out, retval] IDispatch** rtrn);
オートメーション・マッピング
Function CreateObject(progid As String) As Object
パラメータ
progid
作成する環境オブジェクトのprogid。有効なprogidは次のとおりです。
Tobj.FactoryFinder
Tobj.SecurityCurrent
Tobj.TransactionCurrent
戻り値
作成された環境オブジェクトのインタフェース・ポインタの参照。
例外
表4-6に例外を示します。
 
progidでTransactionCurrentまたはSecurityCurrentが指定され、クライアントの別のBootstrapオブジェクトがCurrentオブジェクトを所有している場合。
無効なprogidパラメータ
指定されたprogidが有効ではありません。
リクエストされたprogidが前述の有効なパラメータ値のいずれでもありません。
リクエストされたprogidがシステムに登録されていません。
CoCreate Instance()が失敗した
DestroyCurrent
概要
Oracle Tuxedoドメインからログアウトし、TransactionCurrentオブジェクトとSecurityCurrentオブジェクトを無効にします。
MIDLマッピング
HRESULT destroy_current();
オートメーション・マッピング
Sub destroy_current()
パラメータ
なし。
戻り値
なし。
例外
なし。
Bootstrapオブジェクトのプログラミング例
このセクションでは、Bootstrapオブジェクトを使用する次のプログラミング例を紹介します。
Visual Basicクライアントの例: Bootstrapオブジェクトの使用
リスト4-4に、Bootstrapオブジェクトを使用するVisual Basicクライアントのプログラミング方法を示します。
リスト4-4 Visual Basicでのクライアントのプログラミング
‘Declare the Bootstrap object
Public oBootstrap As DITobj_Bootstrap
‘Declare the FactoryFinder object
Public oBsFactoryFinder As DITobj_FactoryFinder
‘Declare factory for Registrar object
Public oRegistrarFactory As DIUniversityB_RegistrarFactory
‘Declare actual Registrar object
Public oRegistrarFactory As DIUniversityB_RegistrarFactory
....
‘Create the Bootstrap object
Set oBootstrap = CreateObject(“Tobj.Bootstrap”)
‘Connect to the Oracle Tuxedo Domain
oBootstrap.Initialize “//host:port”
‘Get the FactoryFinder for the Oracle Tuxedo Domain
Set oBSFactoryFinder = oBootstrap.CreateObject(“Tobj.FactoryFinder”)
‘Get a factory for the Registrar object
‘using the FactoryFinder method find_one_factory_by_id
Set oRegistrarFactory = oBSFactoryFinder.find_one_factory_by_id(“RegistrarFactoryID”)
'Create a Registrar object
Set oRegistrar = oRegistrarFactory.find_registrar(exc)
 
Interoperable Naming Serviceブートストラップ処理メカニズム
ここでは、次の内容について説明します。
はじめに
リリース8.0以降のOracle Tuxedo ORBでは、CORBA仕様2.4.2の第4章と第13章で規定されているCORBAネーミング・サービス(このマニュアルではInteroperable Naming Serviceと呼ぶ)ブートストラップ処理メカニズムがサポートされています。
このサポートにより、Interoperable Naming Service (INS)ブートストラップ処理メカニズムを実装するORBで、Oracle Tuxedoサーバー側ORBに問い合せて初期オブジェクト(FactoryFinderなど)およびOracle Tuxedo環境に対するPrincipalAuthenticatorへのオブジェクト参照を取得できます。このサポートと、相互運用可能な初期オブジェクト参照のクライアント・サポートにより、クライアントではOracleブートストラップ処理メカニズムではなくINSブートストラップ処理メカニズムを使用できます。
注意:
INSオブジェクト参照
表4-7に、各IDで返されるオブジェクト参照を示します。
 
(CosNotifyChannelAdmin::EventChannelFactory)
PrincipalAuthenticatorオブジェクト(SecurityLevel2::PrincipalAuthenticator)
INSコマンド行オプション
リリース8.0以降のOracle Tuxedo CORBAでは、-ORBInitRefおよび-ORBDefaultInitRefコマンド行オプションがサポートされています。これらのオプションの詳細は、「ORB初期化メンバー関数」を参照してください。
次の例は、Oracle Tuxedo CORBA IIOPクライアントがOracle Tuxedo CORBA IIOPサーバー環境と通信しているものと想定しています。
client_app –ORBid BEA_IIOP –ORBInitRef
FactoryFinder=corbaloc::myhost:2468/FactoryFinder
この例の場合、FactoryFinderORB::resolve_initial_referencesを呼び出すと、相互運用可能な初期参照のリクエストがポート2468を使用してmyhostのISL/ISHに送信されます。myhostは、tuxconfigファイルでISL/ISHに指定されたホストと大文字/小文字の区別まで正確に同じでなければなりません。
INS初期化操作
INSブートストラップ処理メカニズムを使用するには、アプリケーション・プログラマは以下の要件を満たす必要があります。
INS初期参照メカニズムを使用するOracle Tuxedo CORBA IIOPクライアントでは、Tobj_Bootstrap::resolve_initial_references関数ではなくORB::resolve_initial_references関数を呼び出す必要があります。ORB::resolve_initial_referencesの構文の説明については、「CORBA::ORB::resolve_initial_references」を参照してください。
注意:
Tobj_Bootstrap APIは引き続きサポートされており、その動作は変更されていません。
INS初期参照メカニズムを使用するOracle Tuxedo CORBA IIOPクライアントでは、Tobj_Bootstrap::list_initial_services関数ではなくORB::list_initial_services関数を使用する必要があります。ORB::list_initial_servicesの構文の説明については、「CORBA::ORB::list_initial_services」を参照してください。
INSオブジェクトのURLスキーム
リリース8.0以降のOracle Tuxedo CORBAでは、Oracle Tuxedo CORBAサーバー環境にアクセスし、初期オブジェクトへの参照を取得する場所を指定するために使用する追加のUniform Resource Locator (URL)形式がサポートされています。新しいURL形式は、INS仕様の一部としてOMGによって採用されたオブジェクトURLの定義に従うとともに、それを拡張します。INS仕様で規定されたURL形式は、Oracle WebLogic Enterpriseバージョン5.1で最初に提供されたランダマイズ機能をサポートするのみでなく、セキュアHTTPのURLに基づいた安全な形式もサポートするように拡張されています。
CORBA 2.4.2仕様では、仕様に準拠するORBは3つのオブジェクトURLスキームをサポートする必要があると規定されています。それらのスキームは、IOR、corbalocおよびcorbanameとして定義されています。
注意:
新しいURL文字列形式は、ORB::string_to_object関数に渡すこともできます。
IOR URLスキーム
IORスキームは、IOR:hex_octetsという形式の文字列です。スキーム名はIORで、":"の後のテキストはCORBA仕様で定義されます。IOR URLスキームは堅牢であり、オブジェクトの参照に使用されるカプセル化されたトランスポート情報とオブジェクト・キーからクライアントを切り離します。
corbaloc URLスキーム
その長さとバイナリ情報のテキスト・エンコーディングが原因で、IORを非電子的な手段で人が交換するのは困難です。corbalocおよびcorbalocs URLスキームでは、FTPやHTTPの一般的なURLスキームに似た、慣れた形式で文字列化されたオブジェクト参照が提供されます。corbalocおよびcorbalocsで定義されたURLスキームは、TCP/IP中心の環境とDNS中心の環境の両方で簡単に操作されます。corbalocおよびcorbalocs URLの構成要素は次のとおりです。
デフォルトでは、corbaloc URLはIIOP経由でアクセスできるオブジェクトを示し、corbalocs URLはIIOP over SSLを使用してアクセスできるオブジェクトを示します。
表4-8に、各URL要素のBNF構文をリストします。
 
表4-9に、各URL要素の説明を示します。
 
NULLで終了しない、文字列化されたオブジェクト・キー。key_stringでは、RFC 2396で規定されているエスケープ規則を使用して、URLの一部として直接使用できないオクテット値を避けてマッピングします。US-ASCII英数字はエスケープされません。この範囲外の文字は、次の文字を除いてエスケープされます。
key_stringは、CORBA仕様で定義されているGIOPリクエストまたはLocateRequestヘッダーのobject_keyメンバーのオクテット・シーケンスに対応します。
次に、新しいURL形式の使用例を示します。
corbaloc::555xyz.com:1024,555backup.com:1022,555last.com:1999
corbalocs::555xyz.com:1024,{555backup.com:1022|555last.com:1999}
corbaloc::1.2@555xyz.com:1111
corbalocs::1.1@24.128.122.32:1011,1.0@24.128.122.34
INS提案で規定されたURL構文の機能強化として、Oracle Tuxedo 8.0以降では、それぞれスキームが異なる複数のURLのリストをサポートするように構文が拡張されています。拡張の例を次に示します。
corbalocs::555xyz.com:1024,corbaloc::1.2@555xyz.com:1111
corbalocs::ctxobj:3434,mthd:3434,corbaloc::force:1111
上の例では、パーサーがURL corbaloc::force.com:1111に達した場合、安全な接続を試行しなかった場合と同様にその内部状態をリセットし、保護されていない接続の試行を開始します。
corbaname URLスキーム
corbaname URLスキームは、URLでネーミング・サービスのエントリを示せるようにcorbalocスキームの機能を拡張します。corbaname URLを解決するために、ORBコアにネーミング・サービスの実装は必要ありません。corbaname URLの例を次に示します。
corbaname:555objs.com#a/string/path/to/obj
このURLは、ホスト555objs.comでNamingContext型のオブジェクト(オブジェクト・キーはNamingService)を見つけることができるか、または、その場所で動作しているエージェントがNamingContextへの参照を返すことを示します。文字列化された名前a/string/path/to/objは、そのNamingContextのresolve操作の引数として使用されます。
corbaname URLはcorbaloc URLと似ていますが、corbaname URLにはネーミング・コンテキストのバインディングを識別する文字列化された名前も含まれている点が異なります。#文字は、文字列化された名前の開始を示します。
URLのBNF構文を表4-10にリストします。
 
corbaloc_objは、corbaname URLのネーミング・コンテキストを識別する部分です。構文は、corbaloc URLの場合と同じです。
obj_addr_listの説明は、表4-9を参照してください。
obj_addr_listの説明は、表4-9を参照してください。
key_stringの説明は、表4-9を参照してください。
string_nameの説明は、表4-9を参照してください。
corbaname URLの解決は、corbaloc URL処理の単純な拡張として実装されます。その実装を説明するために、次のcorbaname URLを使用します。
corbaname:<corbaloc_obj>["#"<string_name>]
解決は以下のように行われます。
1.
corbaname URLからcorbaloc::<corbaloc_obj>という形式のcorbaloc URLを作成します。
2.
CORBA::ORB::string_to_objectを呼び出してCosNaming::NamingContextオブジェクトを取得し、corbaloc URLをネーミング・コンテキストのオブジェクト参照に変換します。
3.
<string_name>CosNaming::Nameに変換します。
4.
作成されたCosNaming::Nameを渡して、CosNaming::NamingContextでresolve操作を呼び出します。
5.
CosNaming::NamingContext::resolveから返されたオブジェクト参照を呼出し側に返す必要があります。
この解決プロセスに従うと、ネーミング・サービスに存在しないネーミング・コンテキストのオブジェクト参照を返すことがなくなります。この手法の副次的影響の1つは、ネーミング・サービスのスタブがORBコアの一部であるか、resolve操作のリクエストを送信する内部メカニズムがあることが必要である点です。複雑な手間を避けるため、ネーミング・サービスのスタブをORBコアに埋め込むことをお薦めします。
INSを使用したFactoryFinderオブジェクト参照の取得
リスト4-6に、クライアント・アプリケーションがINSを使用してFactoryFinderオブジェクトへのオブジェクト参照を取得する方法の例を示します。完全なサンプル・コードについては、University Sampleのクライアント・アプリケーションを参照してください。
リスト4-5 FactoryFinderオブジェクトを取得するためのサンプル・コード
// utility to get the registrar
static UniversityW::Registrar_ptr get_registrar(
CORBA::ORB_ptr orb
)
{
// Get the factory finder from the ORB:
CORBA::Object_var v_fact_finder_oref =
orb->resolve_initial_references("FactoryFinder");
// Narrow the factory finder :
Tobj::FactoryFinder_var v_fact_finder_ref =
Tobj::FactoryFinder::_narrow(v_fact_finder_oref.in());
// Use the factory finder to find the
// university's registrar factory :
CORBA::Object_var v_reg_fact_oref =
v_fact_finder_ref->find_one_factory_by_id(
UniversityW::_tc_RegistrarFactory->id()
);
// Narrow the registrar factory :
UniversityW::RegistrarFactory_var v_reg_fact_ref =
UniversityW::RegistrarFactory::_narrow(
v_reg_fact_oref.in()
);
// Return the university's registrar :
return v_reg_fact_ref->find_registrar();
}
 
INSを使用したPrincipalAuthenticatorオブジェクト参照の取得
リスト4-6に、クライアント・アプリケーションがINSを使用してPrincipalAuthenticatorオブジェクトへのオブジェクト参照を取得する方法の例を示します。完全なサンプル・コードについては、University Sampleのクライアント・アプリケーションを参照してください。
リスト4-6 PrincipalAuthenticatorオブジェクトを取得するためのサンプル・コード
// utility to log on to the security system
static SecurityLevel2::PrincipalAuthenticator_ptr logon(
CORBA::ORB_ptr orb,
const char* program_name,
UniversityW::StudentId stu_id
)
{
// Get a Principal Authenticator directly from the ORB:
CORBA::Object_var v_pa_obj =
orb->resolve_initial_references("PrincipalAuthenticator");
// Narrow the Principal Authenticator :
SecurityLevel2::PrincipalAuthenticator_var v_pa =
SecurityLevel2::PrincipalAuthenticator::_narrow(
v_pa_obj.in());
 
INSを使用したTransactionFactoryオブジェクト参照の取得
リリース8.0以降のOracle Tuxedo CORBAでは、CORBAトランザクション・サービス・インタフェースを使用したトランザクションの開始がサポートされています。クライアントは、ORB::resolve_initial_references(“FactoryFinder”)関数を使用してFactoryFinderへのオブジェクト参照を取得します。次にクライアントは、FactoryFinderを使用して(トランザクションの開始に使用する) TransactionFactoryのリファレンスを取得します。
リスト4-7に、クライアント・アプリケーションがINSを使用してTransactionFactoryオブジェクトへのオブジェクト参照を取得する方法の例を示します。完全なサンプル・コードについては、University Sampleのクライアント・アプリケーションを参照してください。
リスト4-7 INSを使用するクライアント・アプリケーションのサンプル・コード
// Get the factory finder from the ORB:
CORBA::Object_var v_fact_finder_oref =
orb->resolve_initial_references("FactoryFinder");
// Narrow the factory finder :
Tobj::FactoryFinder_var v_fact_finder_ref =
Tobj::FactoryFinder::_narrow(v_fact_finder_oref.in());
// Get the TransactionFactory from the FactoryFinder
CORBA::Object_var v_txn_fac_oref =
v_fact_finder_ref->find_one_factory_by_id(
"IDL:omg.org/CosTransactions/TransactionFactory:1.0");
// Narrow the TransactionFactory object reference
CosTransactions::TransactionFactory_var v_txn_fac_ref =
CosTransactions::TransactionFactory::_narrow(
v_txn_fac_oref.in());
 
INSブートストラップ処理メカニズムを使用したイベントのシーケンスは次のとおりです。
1.
ORB::resolve_initial_referencesを使用してFactoryFinderを取得します。
2.
3.
4.
create操作で返されたControlオブジェクトから、get_terminatorメソッドを使用してトランザクションのTerminatorインタフェースを取得します。
5.
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例外が返されます。
 
 

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