BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   CORBA プログラミング・リファレンス   |   前へ   |   次へ   |   目次

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

 

ここでは、次の内容について説明します。

 


ブートストラップ処理が必要な理由

クライアント・アプリケーションが BEA Tuxedo オブジェクトと通信するためには、オブジェクト・リファレンスを取得する必要があります。オブジェクト・リファレンスがないと、通信はできません。この問題を解決するために、クライアント・アプリケーションではブートストラップ処理メカニズムを使用して BEA Tuxedo ドメインのオブジェクトのオブジェクト・リファレンスを取得します。

 


サポートされているブートストラップ処理メカニズム

リリース 8.0 以降の Tuxedo では、2 つのブートストラップ処理メカニズムがサポートされます。

注記 BEA Tuxedo ソフトウェアに付属の CORBA C++ クライアントおよび Java クライアントでは、インターオペラブル・ネーミング・サービスのブートストラップ処理メカニズムを使用できますが、性能上の理由により推奨はできません。

 


BEA ブートストラップ処理メカニズム

BEA ブートストラップ処理メカニズムでは、Bootstrap オブジェクトを使用します。Bootstrap オブジェクトは、クライアントとサーバ両方の (リモート CORBA オブジェクトではなく) ローカル・プログラミング・オブジェクトです。Bootstrap オブジェクトが作成されるとき、そのコンストラクタは BEA Tuxedo IIOP リスナ/ハンドラのネットワーク・アドレスを必要とします。その情報が提供されると、ブートストラップ処理オブジェクトでは BEA Tuxedo ドメインの主要なリモート・オブジェクトのオブジェクト・リファレンスを生成できます。それらのオブジェクト・リファレンスは、BEA Tuxedo ドメインで利用可能なサービスにアクセスするために使用できます。

Bootstrap オブジェクトの機能

Bootstrap オブジェクトは、次の BEA Tuxedo CORBA インターフェイスのオブジェクト・リファレンスにアクセスする必要のあるクライアントまたはサーバ・アプリケーションによって作成されます。

Bootstrap オブジェクトは、IIOP リスナ/ハンドラのアドレスの形式によっては特定の BEA Tuxedo ドメインへの最初の接続を表す場合があります。ヌル・スキーマ Universal Resource Locator (URL) 形式が使用される場合に (バージョン 5.1 以前の BEA WebLogic Enterprise リリースと BEA Tuxedo リリース 8.0 でサポートされている唯一のアドレス形式)、Bootstrap オブジェクトは最初の接続を表します。ただし、この URL 形式が使用される場合は、Bootstrap オブジェクトが作成されるまで接続は行われません。アドレス形式と接続回数の詳細については、「Tobj_Bootstrap」を参照してください。

BEA Tuxedo CORBA リモート・クライアントについては、Bootstrap オブジェクトは BEA Tuxedo IIOP リスナ/ハンドラのホストとポートを使用して作成されます。しかし、BEA Tuxedo ネイティブのクライアント・アプリケーションとサーバ・アプリケーションでは、ホストとポートを指定する必要はありません (特定の BEA Tuxedo ドメインで実行されるため)。IIOP リスナ/ハンドラのホストとポート ID は、BEA Tuxedo ドメインのコンフィギュレーション情報に含まれています。

Bootstrap オブジェクトは、その作成後に、特定の BEA Tuxedo ドメインにあるオブジェクトのオブジェクト・リファレンスに対する要求を満たします。異なる Bootstrap オブジェクトを使用すると、アプリケーションで複数のドメインを使用できます。

Bootstrap オブジェクトを使用すると、次のオブジェクトのオブジェクト・リファレンスを取得できます。

FactoryFinder オブジェクトとインターフェイス・リポジトリ・オブジェクトは、環境オブジェクト・ライブラリでインプリメントされません。しかし、それらのオブジェクトは BEA Tuxedo ドメインに固有であり、したがって概念的には SecurityCurrent オブジェクトおよび TransactionCurrent オブジェクトと似ています。

Bootstrap オブジェクトは、クライアント・アプリケーションと BEA 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 オブジェクトが無効になりますが、BEA Tuxedo ドメインとのセッションは破棄されません。destroy_current() を呼び出した後は、既存の Bootstrap オブジェクトを使用して BEA Tuxedo ドメイン内で Current オブジェクトの新しいインスタンスを作成できます。

別のドメインの Current オブジェクトを取得するには、別の Bootstrap オブジェクトを作成する必要があります。同時に複数の Bootstrap オブジェクトを持つこともできますが、「アクティブ」にできる (Current オブジェクトを関連付けることができる) のは 1 つの Bootstrap オブジェクトだけです。したがって、アプリケーションでは「アクティブ」な Bootstrap オブジェクトの destroy_current() を呼び出してから別の Bootstrap オブジェクト (アクティブな Bootstrap オブジェクトになる) の新しい Current オブジェクトを取得する必要があります。

注記 複数のドメインのオブジェクトにアクセスする必要がある場合は、オブジェクトをローカル・ドメインにインポートするか、複数のドメインにアクセスするようにアプリケーションをコンフィギュレーションします。マルチ・ドメイン・コンフィギュレーションの詳細については、『BEA Tuxedo Domains コンポーネント』の「Configuring Multiple CORBA Domains」を参照してください。

サーバとネイティブ・クライアントは BEA Tuxedo ドメインの中に存在します。したがって、「セッション」は確立されません。ただし、同じ包含関係が強制されます。サーバとネイティブ・クライアントは、//host:port ではなく空の文字列を指定してそれらが含まれているドメインにアクセスします。

注記 Bootstrap オブジェクトを使用する場合、クライアント・アプリケーションとサーバ・アプリケーションでは ORB::resolve_initial_references() メソッドではなく Tobj_Bootstrap::resolve_initial_references() メソッドを使用する必要があります。

サポートされている BEA リモート・クライアントの種類

表 4-1 は、Bootstrap オブジェクトを使用してほかの環境オブジェクト (FactoryFinder、SecurityCurrent、TransactionCurrent、InterfaceRepository など) にアクセスできるリモート・クライアントの種類を示しています。これらのクライアントは、BEA Tuxedo CORBA ソフトウェアに付属しています。サード・パーティ製のクライアント ORB では、CORBA インターオペラブル・ネーミング・サービスを使用する必要があります。

表4-1 サポートされている BEA リモート・クライアント

クライアント

説明

CORBA C++

CORBA C++ クライアント・アプリケーションでは、BEA Tuxedo C++ 環境オブジェクトを使用して BEA Tuxedo ドメインの CORBA オブジェクトにアクセスし、BEA Tuxedo オブジェクト・リクエスト・ブローカ (ORB) を使用して CORBA オブジェクトからの要求を処理します。BEA Tuxedo システムの開発コマンドを使用すると、このタイプのクライアント・アプリケーションをビルドできます (『BEA Tuxedo コマンド・リファレンス』を参照)。

CORBA Java

CORBA Java クライアント・アプリケーションでは、BEA Tuxedo Java 環境オブジェクトを使用して BEA Tuxedo ドメインの CORBA オブジェクトにアクセスします。ただし、CORBA オブジェクトからの要求の処理には BEA Tuxedo ORB 以外の ORB 製品が使用されます。このタイプのクライアント・アプリケーションは、ORB 製品の Java 開発ツールを使用してビルドします。

ActiveX

BEA Tuxedo オートメーション環境オブジェクトを使用して BEA Tuxedo ドメインの CORBA オブジェクトにアクセスし、ActiveX クライアントを使用して CORBA オブジェクトからの要求を処理します。Application Builder を使用すると、ActiveX クライアント・アプリケーションからアクセスできるように CORBA オブジェクトのバインディングを作成できます。ActiveX クライアント・アプリケーションは、Microsoft Visual Basic、Delphi、PowerBuilder などの開発ツールでビルドします。


 

機能と制限事項

Bootstrap オブジェクトには、以下の機能と制限があります。

 


Bootstrap オブジェクト API

Bootstrap オブジェクト・アプリケーション・プログラミング・インターフェイス (API) は、まず OMG 定義言語 (IDL) で記述し (移植性のため)、その後に C++、Java、および ActiveX で記述します。C++ および Java の記述では、特定の BEA Tuxedo ドメインの Bootstrap オブジェクトをビルドするために必要なコンストラクタが追加されます。

Tobj モジュール

表 4-2 は、各 ID で返されるオブジェクト・リファレンスを示しています。

表4-2 返されるオブジェクト・リファレンス

ID

返されるオブジェクト・リファレンス (C++ クライアント)

返されるオブジェクト・リファレンス (Java クライアント)

FactoryFinder

FactoryFinder オブジェクト (Tobj::FactoryFinder)

FactoryFinder オブジェクト (com.beasys.Tobj.FactoryFinder)

InterfaceRepository

InterfaceRepository オブジェクト (CORBA::Repository)

InterfaceRepository オブジェクト (org.omg.CORBA.Repository)

NameService

CORBA ネーミング・サービス (Tobj::NameService)

CORBA ネーミング・サービス (com.beasys.Tobj.NameService)

NotificationService

EventChannelFactory オブジェクト

(CosNotifyChannelAdmin::
EventChannelFactory
)

EventChannelFactory オブジェクト

(CosNotifyChannelAdmin.
EventChannelFactory
)

SecurityCurrent

SecurityCurrent オブジェクト (SecurityLevel2::Current)

SecurityCurrent オブジェクト (org.omg.SecurityLevel2.Current)

TransactionCurrent

OTS Current オブジェクト (Tobj::TransactionCurrent)

OTS Current オブジェクト (com.beasys.Tobj.
TransactionCurrent
)

Tobj_SimpleEventsService

BEA シンプル・イベント
ChannelFactory オブジェクト (Tobj_SimpleEvents::
ChannelFactory
)

BEA シンプル・イベント ChannelFactory オブジェクト (Tobj_SimpleEvents.ChannelFactory)


 

表 4-3 は、Tobj モジュールの例外を示しています。

表4-3 Tobj モジュールの例外

C++ の例外

Java の例外

説明

Tobj::
InvalidName

com.beasys.Tobj.
InvalidName

id が表 4-2 で指定されたどの名前でもない場合に生成されます。サーバでは、SecurityCurrent が渡された場合にも resolve_initial_referencesInvalidName が生成されます。

Tobj::
InvalidDomain

com.beasys.Tobj.
InvalidDomain

サーバ・アプリケーションで、BEA Tuxedo サーバ環境が起動していない場合に生成されます。

CORBA::
NO_PERMISSION

org.omg.CORBA.
NO_PERMISSION

idTransactionCurrent または SecurityCurrent で、クライアントの別の Bootstrap オブジェクトが Current オブジェクトを所有している場合に生成されます。

BAD_PARAM

org.omg.CORBA.
BAD_PARAM

オブジェクトがニルである場合、またはオブジェクトに格納されているホスト名が接続と一致しない場合に生成されます。

IMP_LIMIT

org.omg.CORBA.
IMP_LIMIT

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;
}

Microsoft デスクトップ・クライアントのマッピング

Bootstrap オブジェクトは、Microsoft デスクトップでインプリメントされるクライアントが使用できるように BEA ActiveX クライアント・ソフトウェアで提供されます。デスクトップ・クライアントでは、次の 2 つのインターフェイスを使用できます。

オートメーションのマッピング

リスト 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++ メンバ関数

この節では、BEA ブートストラップ処理メカニズムでサポートされる 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

BEA Tuxedo ドメインの IIOP リスナ/ハンドラのアドレス。このアドレスは、クライアントの種類と必要なセキュリティのレベルに応じて異なる形式で指定します。クライアントには次の 3 種類があります。

applet (Java メソッドのみに適用)

これは、クライアント・アプレットへのポインタです。クライアント・アプレットから Bootstrap オブジェクトに明示的に ISH ホストとポートが渡されない場合は、この引数を渡すことができます。この引数を渡すと、Bootstrap オブジェクトはアプレットの HTML ファイルで TOBJADDR の定義を検索します。

例外

BAD_PARAM

オブジェクトがニルである場合、あるいはオブジェクトに格納されているホストが接続と一致しないか、ホスト・アドレス (//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

オブジェクトがニルである場合、またはオブジェクトに格納されているホストが接続と一致しない場合に発生します。

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 度だけ呼び出すようにします。

使用上の注意

このメソッドを使用するときには、以下の情報を考慮に入れてください。

戻り値

特にありません。

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 BEA ブートストラップ処理 API では、次のメソッドがサポートされています。

これらのメソッドの詳細については、Javadoc API を参照してください。

オートメーションのメソッド

この節では、BEA ブートストラップ処理メカニズムでサポートされているオートメーションのメソッドについて説明します。

Initialize

概要

Bootstrap オブジェクトを BEA Tuxedo ドメインに初期化します。

MIDL マッピング

HRESULT Initialize(
[in] BSTR host);

オートメーション・マッピング

Sub Initialize(address As String)

パラメータ

address

BEA 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 の例外

HRESULT

説明

意味

ITF_E_NO_PERMISSION_YES

Bootstrap が既に初期化されている

Bootstrap オブジェクトが既に初期化されています。新しい BEA Tuxedo ドメインに接続するには、新しい Bootstrap オブジェクトを作成する必要があります。

E_INVALIDARG

無効なアドレス・パラメータ

指定されたアドレスが有効ではありません。

E_OUTOFMEMOY

メモリの割り当てが異常終了した

必要なメモリを割り当てることができませんでした。

E_FAIL

無効なドメイン

指定されたアドレスで BEA Tuxedo ドメインと通信できないか、TOBJADDR が定義されていません。

<SYSTEM ERROR>

初期オブジェクトが取得不能

Bootstrap オブジェクトを初期化できません。障害の原因であるシステム・エラーは、エラー・オブジェクトの「Number」メンバで返されます。


 

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 は例外を示しています。

表4-6 CreateObject の例外

例外

説明

意味

ITF_E_NO_PERMISSION_YES

Bootstrap オブジェクトの初期化が必要

Bootstrap オブジェクトが初期化されていません。

ITF_E_NO_PERMISSION_NO

パーミッションなし

progid で TransactionCurrent または SecurityCurrent が指定され、クライアントの別の Bootstrap オブジェクトで Current オブジェクトが所有されている場合。

E_INVALIDARG

無効な progid パラメータ

指定された progid が有効ではありません。

E_INVALIDARG

無効な名前

要求された progid が上記の有効なパラメータ値ではありません。

E_INVALIDARG

未知のオブジェクト

要求された progid がシステムに登録されていません。

<SYSTEM ERROR>

CoCreate Instance() が失敗した

Bootstrap オブジェクトが要求されたオブジェクトのインスタンスを作成できませんでした。システム・エラーは、エラー・オブジェクトの「Number」メンバで返されます。


 

DestroyCurrent

概要

BEA Tuxedo ドメインからログアウトし、TransactionCurrent オブジェクトと SecurityCurrent オブジェクトを無効にします。

MIDL マッピング

HRESULT destroy_current();

オートメーション・マッピング

Sub destroy_current()

パラメータ

特にありません。

戻り値

特にありません。

例外

特にありません。

 


Bootstrap オブジェクトのプログラミング例

この節では、Bootstrap オブジェクトを使用する次のプログラミング例を紹介します。

Java クライアントの例: SecurityCurrent オブジェクトの取得

リスト 4-4 は、SecurityCurrent オブジェクトを取得する Java クライアントのプログラミング方法を示しています。

リスト 4-4 SecurityCurrent オブジェクトを取得する Java クライアントのプログラミング

import java.util.*; 
import org.omg.CORBA.*; 
import com.beasys.*; 
class client { 
public static void main(String[] args) 
{ 
Properties prop = null; 
Tobj.PrincipalAuthenticator auth = null; 
String host_port = "//COLORMAGIC:10000"; 
// ホストとポートを設定
if (args.length == 1) host_port = args[0]; 
try { 
// ORB を初期化
ORB orb = ORB.init(args, prop); 
// Bootstrap オブジェクトを作成
Tobj_Bootstrap bs=new Tobj_Bootstrap(orb,host_port); 

// SecurityCurrent を取得
org.omg.CORBA.Object ocur = 
bs.resolve_initial_references("SecurityCurrent"); 
SecurityLevel2.Current cur = 
SecurityLevel2.CurrentHelper.narrow(ocur); 
} 
catch (Tobj.InvalidName e) { 
System.out.println("Invalid name: "+e); 
System.exit(1); 
} 
catch (Tobj.InvalidDomain e) { 
System.out.println("Invalid domain address: "+host_port +" "+e); 
System.exit(1); 
} 
catch (SystemException e) { 
System.out.println("Exception getting security current: "+e); 
e.printStackTrace(); 
System.exit(1); 
} 
} 
}

Visual Basic クライアントの例: Bootstrap オブジェクトの使用

リスト 4-5 は、Bootstrap オブジェクトを使用する Visual Basic クライアントのプログラミング方法を示しています。

リスト 4-5 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")

'BEA Tuxedo ドメインに接続
oBootstrap.Initialize "//host:port"

'BEA Tuxedo ドメインの FactoryFinder を取得
Set oBSFactoryFinder = oBootstrap.CreateObject("Tobj.FactoryFinder")

'Registrar オブジェクトのファクトリを取得
'using the FactoryFinder method find_one_factory_by_id
Set oRegistrarFactory = oBSFactoryFinder.find_one_factory_by_id("RegistrarFactoryID")

'Registrar オブジェクトを作成
Set oRegistrar = oRegistrarFactory.find_registrar(exc)

 


インターオペラブル・ネーミング・サービス・ブートストラップ処理メカニズム

ここでは、次の内容について説明します。

はじめに

リリース 8.0 以降の BEA Tuxedo ORB では、CORBA 仕様 2.4.2 の第 4 章と第 13 章で規定されている CORBA ネーミング・サービス (このマニュアルではインターオペラブル・ネーミング・サービスと呼ぶ) ブートストラップ処理メカニズムがサポートされています。

このサポートにより、インターオペラブル・ネーミング・サービス (INS) ブートストラップ処理メカニズムをインプリメントする ORB で、BEA Tuxedo サーバ側 ORB に問い合わせて初期オブジェクト (FactoryFinder など) および BEA Tuxedo 環境に対する PrincipalAuthenticator のオブジェクト・リファレンスを取得できます。このサポートと、インターオペラブル初期オブジェクト・リファレンスのクライアント・サポートにより、クライアントでは BEA ブートストラップ処理メカニズムではなく INS ブートストラップ処理メカニズムを使用できます。

注記 BEA Tuxedo ソフトウェアに付属の CORBA C++ クライアントおよび Java クライアントでは INS ブートストラップ処理メカニズムを使用できますが、性能上の理由により推奨はできません。

INS オブジェクト・リファレンス

表 4-7 は、各 ID で返されるオブジェクト・リファレンスを示しています。

表4-7 返されるオブジェクト・リファレンス

ID

返されるオブジェクト・リファレンス

FactoryFinder

FactoryFinder オブジェクト (CORBA::FactoryFinder)

InterfaceRepository

InterfaceRepository オブジェクト (CORBA::Repository)

NameService

CORBA ネーミング・サービス・オブジェクト (CORBA::NameService)

NotificationService

EventChannelFactory オブジェクト

(CosNotifyChannelAdmin::EventChannelFactory)

POACurrent

POACurrent オブジェクト (CORBA::POACurrent)

PrincipalAuthenticator

PrincipalAuthenticator オブジェクト (SecurityLevel2::PrincipalAuthenticator)

RootPOA

RootPOA オブジェクト (CORBA::RootPOA)

Tobj_SimpleEventsService

BEA シンプル・イベント ChannelFactory オブジェクト (Tobj_SimpleEvents::ChannelFactory)


 

INS コマンド行オプション

リリース 8.0 以降の BEA Tuxedo CORBA では、-ORBInitRef および -ORBDefaultInitRef コマンド行オプションがサポートされています。これらのオプションの詳細については、ORB 初期化メンバ関数を参照してください。

次の例は、BEA Tuxedo CORBA IIOP クライアントが BEA 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 オブジェクトの URL スキーマ

リリース 8.0 以降の BEA Tuxedo CORBA では、BEA Tuxedo CORBA サーバ環境にアクセスし、初期オブジェクトのリファレンスを取得するための位置を指定するために使用する追加の Uniform Resource Locator (URL) 形式がサポートされています。その新しい URL 形式は、INS 仕様の一部として OMG で採用されたオブジェクト URL の定義に従うとともに、それを拡張します。INS 仕様で規定されている URL 形式は、BEA 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-8 URL 要素の BNF 形式

URL 要素

BNF 形式

<corbaloc>

= "corbaloc::"<obj_addr_list>["/"<key_string>]
[,<corbaloc>|<corbalocs>]

<corbalocs>

= "corbalocs::"<obj_addr_list>["/"<key_string>]
[,<corbaloc>|<corbalocs>]

<obj_addr_list>

= [<obj_raddr_list> | <obj_addr> ","]* <obj_addr>

<obj_raddr_list>

= ["{" <obj_addr> ["|" <obj_addr>]* "}"]

<obj_addr>

= <iiop_prot_addr> | <future_prot_addr>

<iiop_prot_addr

= <iiop_id><iiop_addr>

<iiop_id>

= "//" | <iiop_prot_token>":"

<iiop_prot_token>

= "iiop"

<iiop_addr>

= [<version> <host> [":" <port>]]

<host>

= DNS-style Host Name | ip_address

<version>

= <major> "." <minor> "@" | empty_string

<port>

= number

<major>

= number

<minor>

= number

<key_string>

= <string> | empty_string


 

表 4-9 は、各 URL 要素を説明しています。

表4-9 URL 要素の説明

URL 要素

説明

obj_addr_list

プロトコル ID、バージョン、およびアドレス情報のカンマ区切りのリスト。このリストは、インプリメンテーション定義の方法でオブジェクトのアドレスを指定するために使用します。オブジェクトは、アドレスおよびプロトコルのいずれでもアクセスできます。obj_raddr_list に遭遇した場合は、1 つの要素だけが使用されます。その要素を使用して障害が発生した場合は、カンマ区切りリストの次の要素が使用されます。

obj_raddr_list

中かっこで囲まれ、垂直バーで区切られたリスト。ランダムに選択されるこのオブジェクトのアドレスを定義するために使用します。このリストの 1 つの要素のみが使用されます。

obj_addr

プロトコル ID、バージョン・タグ、およびプロトコル固有のアドレス。右中かっこ「{」、左中かっこ「}」、垂直バー「|」、スラッシュ「/」、およびカンマ「,」は URL のこの構成要素では使用できません。

iiop_prot_addr

IIOP プロトコル ID、バージョン・タグ、および DNS 形式のホスト名と IP アドレスで構成されたアドレス。

iiop_id

IIOP プロトコル corbaloc を示すために認識されるトークン。

iiop_prot_token

IIOP プロトコル・トークン「iiop」。

iiop_addr

単一のアドレス要素。

host

DNS 形式のホスト名または IP アドレス。指定しない場合は、ローカル・ホストと見なされます。

version

「.」で区切られ、「@」が後に続くメジャーおよびマイナーのバージョン番号。バージョンがない場合は、1.0 と見なされます。

ip_address

数値の IP アドレス (ドット区切りの 10 進表記)。

port

IIOP リスナ/ハンドラまたは初期化エージェントがリッスンするポート番号。デフォルト値は 9999 です。

key_string

ヌルで終了しない文字列化されたオブジェクト・キー。key_string では、RFC 2396 で規定されているエスケープ規則を使用して URL の一部として直接使用できないオクテット値からマッピングします。US-ASCII 英数字はエスケープされません。この範囲外の文字は、次の文字を除いてエスケープされます。

";" | "/" | ":" | "?" | "@" | "&" | "=" | "+" | "$" |
"," | "-" | "_" | "." | "!" | "~" | "*" | "" | "(" | ")"

key_string は、CORBA 仕様で定義されている GIOP 要求または LocateRequest ヘッダの object_key メンバのオクテット・シーケンスに対応します。

string_name

IETF (Internet Engineering Task Force) RFC 2396 で定義されている URL エスケープが含まれる文字列化された名前。エスケープ規則は、変更の必要なく URL をさまざまな方法で転送できるようにします。US-ASCII 英数字はエスケープされません。この範囲外の文字は、次の文字を除いてエスケープされます。

";" | "/" | ":" | "?" | "@" | "&" | "=" | "+" | "$" |
"," | "-" | "_" | "." | "!" | "~" | "*" | "" | "(" | ")"


 

次に、新しい 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

BEA 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 スキーマ

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 で示してあります。

表4-10 URL の BNF 構文

URL 要素

書式

説明

<corbaname>

= "corbaname:"<corbaloc_obj>[
"#"<string_name>]

corbaloc_obj は、corbaname URL のネーミング・コンテキストを識別する部分です。構文は、corbaloc URL の場合と同じです。

<corbaloc_obj>

<obj_addr_list>["/"<key_string>]

obj_addr_list の説明については、表 4-9 を参照してください。

<obj_addr_list>

corbaloc URL の定義と同じ

obj_addr_list の説明については、表 4-9 を参照してください。

<key_string>

corbaloc URL の定義と同じ

key_string の説明については、表 4-9 を参照してください。

<string_name>

Stringified Name | empty string

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-6 FactoryFinder オブジェクト取得のコード例

// レジストラを取得するユーティリティ
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(); 
}

INS を使用した PrincipalAuthenticator オブジェクト・リファレンスの取得

リスト 4-7 は、クライアント・アプリケーションが INS を使用して PrincipalAuthenticator オブジェクトのオブジェクト・リファレンスを取得するしくみを示しています。完全なコード例については、University Sample のクライアント・アプリケーションを参照してください。

リスト 4-7 PrincipalAuthenticator オブジェクト取得のコード例

// セキュリティ・システムにログオンするユーティリティ
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());

INS を使用した TransactionFactory オブジェクト・リファレンスの取得

リリース 8.0 以降の BEA Tuxedo CORBA では、CORBA トランザクション・サービス・インターフェイスを使用してトランザクションを開始できます。クライアントは、ORB::resolve_initial_references("FactoryFinder") 関数を使用して FactoryFinder のオブジェクト・リファレンスを取得します。次にクライアントは、FactoryFinder を使用して (トランザクションの開始に使用する) TransactionFactory のリファレンスを取得します。

リスト 4-8 は、クライアント・アプリケーションが INS を使用して TransactionFactory オブジェクトのオブジェクト・リファレンスを取得するしくみを示しています。完全なコード例については、University Sample のクライアント・アプリケーションを参照してください。

リスト 4-8 INS を使用したクライアント・アプリケーションのコード例

// 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 ブートストラップ処理メカニズムを使用したイベントのシーケンスは次のとおりです。

  1. ORB::resolve_initial_references を使用して FactoryFinder を取得しま す。

  2. FactoryFinder を使用して TransactionFactory を取得します。

  3. TransactionFactory の create オペレーションを使用してトランザクションを開 始します。

  4. create オペレーションで返される Control オブジェクトから、 get_terminator メソッドを使用してトランザクションの Terminator イン ターフェイスを取得します。

  5. Terminator の commit または rollback オペレーションを使用してトランザク ションを終了またはアボートします。

TransactionFactory は、BEA の委譲型インターフェイスではなく、標準の CORBA のトランザクション・サービス・インターフェイスに準拠したオブジェクトを返します。これは、サード・パーティの ORB が、それぞれの ORB の resolve_initial_references 関数を使用して BEA Tuxedo CORBA サーバから TransactionFactory のリファレンスを取得し、標準 OMG IDL で生成されたスタブを使用して、返されたインスタンス上で機能できることを意味します。

制限

BEA Tuxedo 8.0 リリースでは、TransactionFactory とクライアントの Current のアクションが調整されません。つまり、クライアントでは 2 つのメカニズムのいずれかを使用してトランザクションのステータスを管理および取得する必要があります。また、インターフェイスとオペレーションは表 4-11 で示されているものしかサポートされていません。OMG IDL で規定されているほかのオペレーションでは、CORBA::NO_IMPLEMENT 例外が返されます。

表4-11 サポートされている INS インターフェイスとオペレーション

インターフェイス

サポートされているオペレーション

TransactionFactory

create

Control

get_terminator
get_coordinator

Terminator

commit
rollback

Coordinator

get_status
rollback_only
get_transaction_name


 

 

back to top previous page next page