|
注意 : | 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 ドメインのオブジェクトのオブジェクト参照を取得します。
リリース 8.0 以降の Tuxedo では、2 つのブートストラップ処理メカニズムがサポートされます。
注意 : | Oracle Tuxedo ソフトウェアに付属の CORBA C++ クライアントでは、Interoperable Naming Service のブートストラップ処理メカニズムを使用できますが、パフォーマンス上の理由により推奨はできません。 |
Oracle ブートストラップ処理メカニズムでは、Bootstrap オブジェクトを使用します。Bootstrap オブジェクトは、クライアントとサーバ両方の (リモート CORBA オブジェクトではなく) ローカル プログラミング オブジェクトです。Bootstrap オブジェクトが作成されるとき、そのコンストラクタは Oracle Tuxedo IIOP リスナ/ハンドラのネットワーク アドレスを必要とします。その情報が提供されると、ブートストラップ処理オブジェクトでは Oracle Tuxedo ドメインの主要なリモート オブジェクトのオブジェクト参照を生成できます。それらのオブジェクト参照は、Oracle Tuxedo ドメインで利用可能なサービスにアクセスするために使用できます。
Bootstrap オブジェクトは、次の Oracle Tuxedo CORBA インタフェースのオブジェクト参照にアクセスする必要のあるクライアントまたはサーバ アプリケーションによって作成されます。
Bootstrap オブジェクトは、IIOP リスナ/ハンドラのアドレスの形式によっては特定の Oracle Tuxedo ドメインへの最初の接続を表す場合があります。ヌル スキーマ 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 では、次のような方法でファクトリを検索できます。
インタフェース リポジトリには、Oracle Tuxedo ドメイン内で実装される CORBA オブジェクトのインタフェース記述が含まれています。動的起動インタフェース (DII) を使用するクライアントでは、インタフェース リポジトリのリファレンスがないと CORBA 要求の構造体を構築できません。
NamingService オブジェクトは、ルートネームスペースのリファレンスを取得するために使用します。このオブジェクトを使用すると、ORB はネームスペースのルートを検索します。
NotificationService オブジェクトは、CosNotification サービス内のイベント チャネル ファクトリ (CosNotifyChannelAdmin::EventChannelFactory) のリファレンスを取得するために使用します。Oracle Tuxedo システムで、EventChannelFactory はノーティフィケーション サービス チャネルの検索に使用します。
Tobj_SimpleEventsService オブジェクトは、Oracle シンプル イベント サービス内のイベント チャネル ファクトリ (Tobj_SimpleEvents::ChannelFactory) のリファレンスを取得するために使用します。Oracle Tuxedo システムで、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 オブジェクトの作成が失敗することはありません。失敗するのではなく、既存のオブジェクトのもう 1 つのリファレンスが渡されます。つまり、クライアント アプリケーションは Current オブジェクトの単一インスタンスの複数のリファレンスを持つことになります。
Current オブジェクトの新しいインスタンスを作成するには、まず Bootstrap オブジェクトの destroy_current()
メソッドを呼び出す必要があります。この呼び出しですべての Current オブジェクトが無効になりますが、Oracle Tuxedo ドメインとのセッションは破棄されません。destroy_current()
を呼び出した後は、既存の Bootstrap オブジェクトを使用して Oracle Tuxedo ドメイン内で Current オブジェクトの新しいインスタンスを作成できます。
別のドメインの Current オブジェクトを取得するには、別の Bootstrap オブジェクトを作成する必要があります。同時に複数の Bootstrap オブジェクトを持つこともできますが、「アクティブ」にできる (Current オブジェクトを関連付けることができる) のは 1 つの Bootstrap オブジェクトだけです。したがって、アプリケーションでは「アクティブ」な Bootstrap オブジェクトの destroy_current()
を呼び出してから別の Bootstrap オブジェクト (アクティブな Bootstrap オブジェクトになる) の新しい Current オブジェクトを取得する必要があります。
注意 : | 複数のドメインのオブジェクトにアクセスする必要がある場合は、オブジェクトをローカル ドメインにインポートするか、複数のドメインにアクセスするようにアプリケーションをコンフィグレーションします。マルチ ドメイン コンフィグレーションの詳細については、『Oracle Tuxedo Domains コンポーネント』の「Configuring Multiple CORBA Domains」を参照してください。 |
サーバとネイティブ クライアントは 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 オブジェクトには、以下の機能と制限があります。
destroy_current()
を呼び出してから、別のドメインの Current オブジェクトを取得する必要があります。別々の Oracle Tuxedo ドメインと接続を確立する複数の Bootstrap オブジェクトを持つこともできますが、Current オブジェクトは 1 組しか有効になりません。既存の Current オブジェクトを破棄しないと、ほかの Current オブジェクトを取得することはできません。 CORBA::NO_PERMISSION
例外が返されます。
Bootstrap オブジェクト アプリケーション プログラミング インタフェース (API) は、まず OMG 定義言語 (IDL) で記述し (移植性のため)、その後に C++ で記述します。C++ の記述では、特定の Oracle Tuxedo ドメインの Bootstrap オブジェクトをビルドするために必要なコンストラクタが追加されます。
表 4-2 は、各 ID で返されるオブジェクト参照を示しています。
表 4-3 は、Tobj モジュールの例外を示しています。
コード リスト 4-1 は、Tobj_bootstrap.h
ファイルでの C++ の宣言を示しています。
#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( );
};
コード リスト 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 インタフェースのマッピングを示しています。
interface DITobj_Bootstrap : IDispatch
{
HRESULT Initialize(
[in] BSTR address);
HRESULT CreateObject(
[in] BSTR progid,
[out, retval] IDispatch** rtrn);
HRESULT destroy_current();
};
このセクションでは、Oracle ブートストラップ処理メカニズムでサポートされる C++ メンバー関数について説明します。
Tobj_Bootstrap(CORBA::ORB_ptr orb, const char* address);
throws Tobj::BAD_PARAM
org.omg.CORBA.SystemException;
address
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 の数字でなければなりません。
TCP/IP アドレスは 1 つまたは複数を指定できます。複数のアドレスは、カンマ区切りのリストを使用して指定します。次に例を示します。
//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 アプリケーションの設定』の「Oracle Tuxedo CORBA リモート クライアント アプリケーションの管理」を参照してください。ただし、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
と同じ接続の遅延がありますが、それに加えて、クライアント アプリケーションがセキュア ソケット レイヤ (SSL) プロトコルを使用して ISL/ISH との初期接続を行います。
表 4-4 は、2 つの URL アドレス形式の違いを示しています。
|
|||
これらの 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}
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 アドレスは一緒に使用しないでください。 |
注意 : | Netscape の埋め込み型 Java ORB および JavaSoft JDK ORB で使用するように提供される Bootstrap オブジェクトでは、corbaloc および corbalocs URL はサポートされていません。 |
注意 : | corbaloc および corbalocs URL アドレス形式の使い方の詳細については、『Tuxedo CORBA アプリケーションのセキュリティ機能』を参照してください。 |
注意 : | Bootstrap コンストラクタまたは TOBJADDR で指定するネットワーク アドレスは、サーバ アプリケーションの UBBCONFIG ファイルのネットワーク アドレスと (大文字/小文字の区別を含めて) 正確に同じでなければなりません。アドレスが一致しない場合、Bootstrap コンストラクタの呼び出しは失敗し、見たところ関係のなさそうな次のエラー メッセージが表示されます。ERROR: クライアントからの非公式の接続 たとえば、ネットワーク アドレスがサーバ アプリケーションの UBBCONFIG ファイルの ISL コマンドライン オプション文字列で (NULL URL アドレス形式を使用して) //TRIXIE:3500 として指定されている場合、Bootstrap コンストラクタまたは TOBJADDR で //192.12.4.6:3500 または //trixie:3500 を指定すると接続の試行は失敗します。UNIX システムで大文字/小文字の区別を調べるには、ホスト システムで uname -n コマンドを使用します。Windows システムで正確な大文字/小文字の区別を調べるには、コントロール パネルでホスト システムのネットワーク設定を確認します。 |
注意 : | 前の注意のエラーは、URL アドレス形式が使用される場合は遅延されます。つまり、ISL/ISH への接続が遅延されるので Bootstrap オブジェクトの作成時にそのエラーは発生しません。 |
ネイティブ クライアントの場合、Tobj_Bootstrap
コンストラクタの address
パラメータは常に (NULL ポインタではなく) 空の文字列でなければなりません。ネイティブ クライアントは、TUXCONFIG
環境変数で指定されたアプリケーションに接続します。アドレスが空でない場合は、コンストラクタによって CORBA::BAD_PARAM
が生成されます。
Bootstrap オブジェクトにアクセスする必要がある場合、サーバでは TP.bootstrap()
を呼び出して TP フレームワークを使用してそのオブジェクト参照を取得しなければなりません。Bootstrap オブジェクトの新しいインスタンスを作成することは避ける必要があります。
applet
(Java メソッドのみに適用)
TOBJADDR
の定義を検索します。
BAD_PARAM
//hostname:port_number
) が有効な形式ではない場合に発生します。
Bootstrap オブジェクトを作成する C++ メンバー関数 (または Java メソッド)。
新しく作成された Bootstrap オブジェクトへのポインタ。
IIOP ハンドラ (ISH) で共同クライアント/サーバの受信ポートを登録します。
void register_callback_port(CORBA::Object_ptr objref);
パラメータ
objref
BAD_PARAM
IMP_LIMIT
説明
この C++ メンバー関数 (または Java メソッド) は、共同クライアント/サーバの受信ポートを ISH に通知するために呼び出します。このメソッドは、GIOP 1.2 の双方向機能をサポートしていない共同クライアント/サーバ ORB (つまり GIOP 1.0 および 1.1 のクライアント ORB) でのみ使用します。GIOP 1.0 および 1.1 の場合、ISH では共同クライアント/サーバごとに 1 つの受信ポートのみをサポートします。このため、register_callback_port
メソッドは接続されている共同クライアント/サーバごとに一度だけ呼び出すようにします。
このメソッドを使用するときには、以下の情報を考慮に入れてください。
register_callback_port
メソッドが共同クライアント/サーバから呼び出されない場合、コールバック ポートは ISH に登録されず、デフォルトで非対称アウトバウンド IIOP が使用されます。この場合は、-O
オプションを使用してサーバの IIOP リスナ (ISL) を起動する必要があります。-O
オプションは、非対称アウトバウンド IIOP を有効にします。非対称アウトバウンド IIOP を有効にしないと、サーバからクライアントの呼び出しが ISL/ISH によって許可されません。register_callback_port
メソッドを呼び出す必要があります。 register_callback_port
メソッドを呼び出してからコールバック オブジェクトのオブジェクト参照をサーバに渡す必要があります。
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
で返されるオブジェクト参照を示しています。
Bootstrap オブジェクトで表されるドメインの Current オブジェクトを破棄します。
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_references
で CORBA::NO_PERMISSION
が生成されます。
Java Oracle ブートストラップ処理 API では、次のメソッドがサポートされています。
このセクションでは、Oracle ブートストラップ処理メカニズムでサポートされているオートメーションのメソッドについて説明します。
Bootstrap オブジェクトを Oracle Tuxedo ドメインに初期化します。
HRESULT Initialize(
[in] BSTR host);
Sub Initialize(address As String)
address
TOBJADDR
環境変数の値が使用されます。
注意 : | Bootstrap コンストラクタまたは TOBJADDR で指定するネットワーク アドレスは、アプリケーションの UBBCONFIG ファイルのネットワーク アドレスと (大文字/小文字の区別を含めて) 正確に同じでなければなりません。アドレスが一致しない場合、Bootstrap コンストラクタの呼び出しは失敗し、見たところ関係のなさそうな次のエラー メッセージが表示されます。ERROR: クライアントからの非公式の接続 たとえば、ネットワーク アドレスが ISL コマンドライン オプション文字列で //TRIXIE:3500 として指定された場合、Bootstrap コンストラクタまたは TOBJADDR で //192.12.4.6:3500 または //trixie:3500 を指定すると接続の試行が失敗します。UNIX システムで大文字/小文字の区別を調べるには、ホスト システムで uname -n コマンドを使用します。Windows システムで正確な大文字/小文字の区別を調べるには、コントロール パネルでホスト システムのネットワーク設定を確認します。 |
表 4-5 は例外を示しています。
Current 環境オブジェクトのインスタンスを作成します。
HRESULT CreateObject(
[in] BSTR progid,
[out, retval] IDispatch** rtrn);
Function CreateObject(progid As String) As Object
progid
作成された環境オブジェクトのインタフェース ポインタの参照。
表 4-6 は例外を示しています。
Oracle Tuxedo ドメインからログアウトし、TransactionCurrent オブジェクトと SecurityCurrent オブジェクトを無効にします。
HRESULT destroy_current();
Sub destroy_current()
このセクションでは、Bootstrap オブジェクトを使用する次のプログラミング例を紹介します。
コード リスト 4-4 は、Bootstrap オブジェクトを使用する Visual Basic クライアントのプログラミング方法を示しています。
‘Bootstrap オブジェクトを宣言
Public oBootstrap As DITobj_Bootstrap
‘FactoryFinder オブジェクトを宣言
Public oBsFactoryFinder As DITobj_FactoryFinder
‘Registrar オブジェクトのファクトリを宣言
Public oRegistrarFactory As DIUniversityB_RegistrarFactory
‘実際の Registrar オブジェクトを宣言
Public oRegistrarFactory As DIUniversityB_RegistrarFactory
....
‘Bootstrap オブジェクトを作成
Set oBootstrap = CreateObject(“Tobj.Bootstrap”)
‘
Oracle Tuxedoドメインに接続
oBootstrap.Initialize “//host:port”
‘
Oracle Tuxedoドメインの FactoryFinder を取得
Set oBSFactoryFinder = oBootstrap.CreateObject(“Tobj.FactoryFinder”)
‘FactoryFinder のメソッド find_one_factory_by_id を使用して
‘Registrar オブジェクトのファクトリを取得
Set oRegistrarFactory = oBSFactoryFinder.find_one_factory_by_id(“RegistrarFactoryID”)
'Registrar オブジェクトを作成
Set oRegistrar = oRegistrarFactory.find_registrar(exc)
リリース 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 ブートストラップ処理メカニズムを使用できます。
注意 : | Oracle Tuxedo ソフトウェアに付属の CORBA C++ クライアントでは、INS ブートストラップ処理メカニズムを使用できますが、パフォーマンス上の理由により推奨はできません。 |
表 4-7 は、各 ID で返されるオブジェクト参照を示しています。
リリース 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
この例で、FactoryFinder
の ORB::resolve_initial_references
を呼び出すと、インターオペラブル初期リファレンスの要求がポート 2468
を使用して myhost
の ISL/ISH に送信されます。myhost
は、tuxconfig
ファイルで ISL/ISH に指定されたホストと大文字/小文字の区別まで正確に同じでなければなりません。
INS ブートストラップ処理メカニズムを使用するには、アプリケーション プログラマは以下の要件を満たす必要があります。
Tobj_Bootstrap::resolve_initial_references
関数ではなく ORB::resolve_initial_references
関数を呼び出す必要があります。ORB::resolve_initial_references
の構文の説明については、「CORBA::ORB::resolve_initial_references」を参照してください。注意 : | Tobj_Bootstrap API は依然としてサポートされており、その振る舞いは従来のまま変更されていません。 |
Tobj_Bootstrap::list_initial_services
関数ではなく ORB::list_initial_services
関数を使用する必要があります。ORB::list_initial_services
の構文の説明については、「CORBA::ORB::list_initial_services」を参照してください。
リリース 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 スキーマは、IOR:
hex_octets
という形式の文字列です。スキーマ名は IOR で、「:」の後のテキストは CORBA 仕様で定義されます。IOR 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 要素を説明しています。
key_string では、RFC 2396 で規定されているエスケープ規則を使用して URL の一部として直接使用できないオクテット値からマッピングします。US-ASCII 英数字はエスケープされません。この範囲外の文字は、次の文字を除いてエスケープされます。
|
|
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
Oracle Tuxedo 8.0 以降では、スキーマの異なる複数の URL のリストをサポートするように、INS の提案で規定されている 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 スキーマは、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 で示してあります。
corbaname URL の解決は、corbaloc URL 処理の単純な拡張として実装されます。その実装を説明するために、次の corbaname URL を使用します。
corbaname:<corbaloc_obj>[“#”<string_name>]
corbaloc::<corbaloc_obj>
形式の corbaloc URL を作成します。CORBA::ORB::string_to_object
を呼び出して CosNaming::NamingContext
オブジェクトを取得し、corbaloc URL をネーミング コンテキストのオブジェクト参照に変換します。<string_name>
を CosNaming::Name
に変換します。CosNaming::Name
を渡して、CosNaming::NamingContext
の resolve オペレーションを呼び出します。CosNaming::NamingContext::resolve
から返されるオブジェクト参照は、呼び出し側に返されなければなりません。
この解決プロセスに従うことで、ネーミング サービスに存在しないネーミング コンテキストのオブジェクト参照を返すことがなくなります。この手法の 1 つの副作用は、ネーミング サービスのスタブが ORB コアの一部であるか、resolve
オペレーションの要求を送信する内部メカニズムがなければならないことです。複雑な手間を避けるため、ネーミング サービスのスタブを ORB コアに埋め込むことをお勧めします。
コード リスト 4-5 は、クライアント アプリケーションが INS を使用して FactoryFinder オブジェクトのオブジェクト参照を取得するしくみを示しています。完全なサンプル コードについては、University Sample のクライアント アプリケーションを参照してください。
// レジストラを取得するユーティリティ
static UniversityW::Registrar_ptr get_registrar(
CORBA::ORB_ptr orb
)
{
// ORB からファクトリ ファインダを取得
CORBA::Object_var v_fact_finder_oref =
orb->resolve_initial_references("FactoryFinder");
// ファクトリ ファインダをナロー変換
Tobj::FactoryFinder_var v_fact_finder_ref =
Tobj::FactoryFinder::_narrow(v_fact_finder_oref.in());
// ファクトリ ファインダを使用して university の
// レジストラ ファクトリを検索する
CORBA::Object_var v_reg_fact_oref =
v_fact_finder_ref->find_one_factory_by_id(
UniversityW::_tc_RegistrarFactory->id()
);
// レジストラ ファクトリをナロー変換
UniversityW::RegistrarFactory_var v_reg_fact_ref =
UniversityW::RegistrarFactory::_narrow(
v_reg_fact_oref.in()
);
// university のレジストラを返す
return v_reg_fact_ref->find_registrar();
}
コード リスト 4-6 は、クライアント アプリケーションが INS を使用して PrincipalAuthenticator オブジェクトのオブジェクト参照を取得するしくみを示しています。完全なサンプル コードについては、University Sample のクライアント アプリケーションを参照してください。
// セキュリティ システムにログオンするユーティリティ
static SecurityLevel2::PrincipalAuthenticator_ptr logon(
CORBA::ORB_ptr orb,
const char* program_name,
UniversityW::StudentId stu_id
)
{
// ORB から直接 Principal Authenticator を取得
CORBA::Object_var v_pa_obj =
orb->resolve_initial_references("PrincipalAuthenticator");
// Principal Authenticator をナロー変換
SecurityLevel2::PrincipalAuthenticator_var v_pa =
SecurityLevel2::PrincipalAuthenticator::_narrow(
v_pa_obj.in());
リリース 8.0 以降の Oracle Tuxedo CORBA では、CORBA トランザクション サービス インタフェースを使用してトランザクションを開始できます。クライアントは、ORB::resolve_initial_references("FactoryFinder")
関数を使用して FactoryFinder のオブジェクト参照を取得します。次にクライアントは、FactoryFinder を使用して (トランザクションの開始に使用する) TransactionFactory のリファレンスを取得します。
コード リスト 4-7 は、クライアント アプリケーションが INS を使用して TransactionFactory オブジェクトのオブジェクト参照を取得するしくみを示しています。完全なサンプル コードについては、University Sample のクライアント アプリケーションを参照してください。
// ORB からファクトリ ファインダを取得
CORBA::Object_var v_fact_finder_oref =
orb->resolve_initial_references("FactoryFinder");
// ファクトリ ファインダをナロー変換
Tobj::FactoryFinder_var v_fact_finder_ref =
Tobj::FactoryFinder::_narrow(v_fact_finder_oref.in());
// FactoryFinder から TransactionFactory を取得
CORBA::Object_var v_txn_fac_oref =
v_fact_finder_ref->find_one_factory_by_id(
"IDL:omg.org/CosTransactions/TransactionFactory:1.0");
// TransactionFactory オブジェクト参照をナロー変換
CosTransactions::TransactionFactory_var v_txn_fac_ref =
CosTransactions::TransactionFactory::_narrow(
v_txn_fac_oref.in());
INS ブートストラップ処理メカニズムを使用したイベントのシーケンスは次のとおりです。
ORB::resolve_initial_references
を使用して FactoryFinder を取得します。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
例外が返されます。