注意: | 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ドメインへの最初の接続を表す場合があります。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では、次のような方法でファクトリを検索できます。
インタフェース・リポジトリには、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を使用する必要があります。
CORBA C++クライアント・アプリケーションでは、Oracle Tuxedo C++環境オブジェクトを使用してOracle TuxedoドメインのCORBAオブジェクトにアクセスし、Oracle Tuxedoオブジェクト・リクエスト・ブローカ(ORB)を使用してCORBAオブジェクトからのリクエストを処理します。Oracle Tuxedoシステムの開発コマンドを使用すると、このタイプのクライアント・アプリケーションをビルドできます(『Oracle Tuxedoコマンド・リファレンス』を参照)。
|
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の数字でなければなりません。
//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_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アドレス形式の違いを示しています。
|
|||
これらの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アドレス形式の使い方の詳細は、『CORBAアプリケーションにおけるセキュリティの使用』を参照してください。 |
注意: | BootstrapコンストラクタまたはTOBJADDR で指定するネットワーク・アドレスは、サーバー・アプリケーションのUBBCONFIG ファイルのネットワーク・アドレスと(大文字/小文字の区別を含めて)正確に同じでなければなりません。アドレスが一致しない場合、Bootstrapコンストラクタの呼出しは失敗し、見たところ関係のなさそうな次のエラー・メッセージが表示されます。ERROR: Unofficial connection from client at たとえば、ネットワーク・アドレスがサーバー・アプリケーションの 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
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
説明
この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: Unofficial connection from client at たとえば、ネットワーク・アドレスがISLコマンドライン・オプション文字列で //TRIXIE:3500 として指定された場合、BootstrapコンストラクタまたはTOBJADDR で//192.12.4.6:3500 または//trixie:3500 を指定すると接続の試行が失敗します。UNIXシステムで大文字/小文字の区別を調べるには、ホスト・システムでuname -n コマンドを使用します。Windowsシステムで正確な大文字/小文字の区別を調べるには、コントロール・パネルでホスト・システムのネットワーク設定を確認します。 |
表4-5は例外を示しています。
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クライアントのプログラミング方法を示しています。
‘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 TuxedoDomain
oBootstrap.Initialize “//host:port”
‘Get the FactoryFinder for the
Oracle TuxedoDomain
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)
リリース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要素を説明しています。
NULLで終了しない文字列化されたオブジェクト・キー。
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のクライアント・アプリケーションを参照してください。
// 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();
}
リスト4-6は、クライアント・アプリケーションがINSを使用してPrincipalAuthenticatorオブジェクトのオブジェクト参照を取得するしくみを示しています。完全なサンプル・コードについては、University Sampleのクライアント・アプリケーションを参照してください。
// 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());
リリース8.0以降のOracle Tuxedo CORBAでは、CORBAトランザクション・サービス・インタフェースを使用してトランザクションを開始できます。クライアントは、ORB::resolve_initial_references("FactoryFinder")
関数を使用してFactoryFinderのオブジェクト参照を取得します。次にクライアントは、FactoryFinderを使用して(トランザクションの開始に使用する) TransactionFactoryのリファレンスを取得します。
リスト4-7は、クライアント・アプリケーションがINSを使用してTransactionFactoryオブジェクトのオブジェクト参照を取得するしくみを示しています。完全なサンプル・コードについては、University Sampleのクライアント・アプリケーションを参照してください。
// 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ブートストラップ処理メカニズムを使用したイベントのシーケンスは次のとおりです。
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
例外が返されます。