![]() |
![]() |
|
|
| |
CORBA オブジェクトを呼び出す WebLogic Server クライアントの作成
以下の節では、WebLogic Server から BEA Tuxedo CORBA オブジェクトにアクセスするための要件について説明します。
また、WebLogic Enterprise Connectivity を使用して、WebLogic Enterprise バージョン 5.1 で構築した Java オブジェクト(EJB や RMI オブジェクトなど)を呼び出すこともできます。詳細については、WebLogic Server バージョン 6.0 の『WebLogic Enterprise Connectivity ユーザーズ ガイド』の「WLE EJB または RMI オブジェクトへのアクセス」を参照してください。
BEA Tuxedo CORBA オブジェクトを呼び出す WebLogic Server クライアントを実装するには、あらかじめ以下の作業を行っておく必要があります。
samples
\examples
\wlec
ディレクトリに収められている WebLogic Enterprise Connectivity のサンプルを実行します。
WebLogic Server クライアントからアクセスする BEA Tuxedo オブジェクトを持つ BEA Tuxedo ドメインごとに、WLEC 接続プールをコンフィグレーションします。WebLogic Server クライアント用に確立されたセキュリティ コンテキストは WLE 接続プールを介して BEA Tuxedo ドメインに伝播されるので、WLEC 接続プールはセキュリティ コンテキスト伝播機能の基礎であると言えます。
WLEC 接続プールを使用する前に、WL_HOME
\lib
\wleorb.jar
、WL_HOME
\lib
\wlepool.jar
、および TUXDIR
\udataobj
\java
\jdk
\wleclient.jar
を、startAdminWebLogic.sh
ファイルまたは startAdminWebLogic.cmd
ファイルの CLASSPATH
変数に追加します。WLE 5.1 によって提供される EJB を要求する JSP を使用している場合は、WLE 5.1 の wlej2eecl.jar
ファイルの場所を、startAdminWebLogic.sh
ファイルまたは startAdminWebLogic.cmd
ファイルの CLASSPATH
変数に追加します。
セキュリティ コンテキストを伝播するために、新規の WLEC 接続プールを作成します。WLEC 接続プールを作成するには、以下の手順に従います。
tpusradd
コマンドを実行して、WebLogic Server ユーザを BEA Tuxedo ドメインで認可済みのユーザとして定義します。
ISL
コマンドの -E
オプションを設定して、WebLogic Server レルムから伝播されたセキュリティ コンテキストを認識して利用するよう IIOP リスナ/ハンドラをコンフィグレーションします。ISL
コマンドの -E
オプションでは、プリンシパル名を指定する必要があります。プリンシパル名によって、WLEC 接続プールが BEA Tuxedo ドメインにログ インするために使用するプリンシパルが定義されます。プリンシパル名は、WLEC 接続プールを作成するときに [ユーザ名] 属性に定義した名前と一致しなければなりません。
WebLogic Server 環境と BEA Tuxedo CORBA 環境との間で証明書を使用するということは、WebLogic Server 環境から CORBA オブジェクトへの接続を確立するときに、新規の SSL ハンドシェークが開始されるということです。同じ SSL ネットワーク接続を使用して複数のクライアント リクエストをサポートするには、そうした処理を行うように証明書を次のように設定しなければなりません。
TUXDIR
\udataobj
\security
\keys
ディレクトリに入れます。
tpusradd
コマンドを実行して、プリンシパルを BEA Tuxedo のユーザとして定義します。
-E
オプションを使用して UBBCONFIG
ファイルの IIOP リスナ/ハンドラを定義して、プリンシパルが認証用に使用されることを示します。
SEC_PRINCIPAL_NAME
オプションでデジタル証明書を指定し、-S
オプションを使用して、セキュア ポートを BEA Tuxedo ドメインと WebLogic Server セキュリティ レルムとの間で使用することを示します。
BEA Tuxedo CORBA アプリケーションでセキュリティをコンフィグレーションする方法については、『Using Security in CORBA Applications』を参照してください。
この節では、WebLogic Server クライアントから BEA Tuxedo CORBA オブジェクトにアクセスするための手順について説明します。
クライアント スタブは、BEA Tuxedo CORBA オブジェクトの操作に対するプログラミング インタフェースを提供します。クライアント スタブを作成するには、WebLogic Server クライアントからアクセスする BEA Tuxedo CORBA オブジェクト用の OMG IDL(Object Management Group Interface Definition Language)ファイルをコンパイルします。BEA Tuxedo CORBA オブジェクトのクライアント スタブを作成するには、BEA Tuxedo ソフトウェアに含まれている idl
コンパイラを使います。
WebLogic Server の CLASSPATH
環境変数に、BEA Tuxedo CORBA オブジェクトのクライアント スタブが入っているディレクトリが含まれていることを確認します。
以下の Java パッケージを WebLogic Server クライアントにインポートします。
手順 3. WebLogic Server クライアントの BEA Tuxedo ドメインへの接続
各 WLEC 接続プールは、関連付けられている BEA Tuxedo ドメインへのアクセスを可能にする Tobj_Bootstrap
オブジェクトを持っています。WebLogic Enterprise Connectivity は、BootstrapFactory と呼ばれるオブジェクトを提供し、これが特定の BEA Tuxedo ドメインの Tobj_Bootstrap
オブジェクトへのアクセスを提供します。BEA Tuxedo ドメインに接続するには、WebLogic Server クライアントに以下のコードを追加します。
Tobj_Bootstrap
myBootstrap
= Tobj_BootstrapFactory.getClientContext("myPool
");
このコードの説明は以下のとおりです。
getClientContext()
メソッドは、myPool
に関連付けられている Tobj_Bootstrap
オブジェクトを返します。getClientContext()
は、この名前のプールを見つけられない場合には null
を返します。
myPool
は、目的の BEA Tuxedo ドメイン用の WLEC 接続プールの名前です。WLEC 接続プールは、Administration Console で定義する必要があります。
手順 4. BEA Tuxedo CORBA のオブジェクト参照を取得する
WebLogic Server クライアントで FactoryFinder を使用して、BEA Tuxedo CORBA オブジェクトへの参照を取得します。
org.omg.CORBA.Object
myFFObject
=
myBootstrap
.resolve_initial_references("FactoryFinder");
FactoryFindermyFactFinder
=
FactoryFinderHelper.narrow(myFFObject
);
このコードの説明は以下のとおりです。
myBootstrap
は、BEA Tuxedo ドメインの Tobj_Bootstrap
オブジェクトです。
resolve_initial_references()
メソッドは、FactoryFinder オブジェクトのオブジェクト参照を返します。
FactoryFinderHelper
は、FactoryFinder
インタフェースに対する補助機能、特に narrow()
メソッドを提供します。
narrow()
メソッドは、オブジェクト参照をキャストして FactoryFinder オブジェクトを指すようにします。
org.omg.CORBA.Object
myFactoryRef
=
myFactFinder.find_one_factory_by_id(myFactoryHelper
.id());myFactory
=
myFactoryHelper
.narrow(myFactoryRef
);
このコードの説明は以下のとおりです。
myFactFinder
は、FactoryFinder オブジェクトです。
find_one_factory_by_id()
メソッドは、ID 番号に基づいてファクトリ オブジェクト参照を検索して返します。
myFactoryHelper
は、myFactory
インタフェースに対する補助機能、特に narrow()
メソッドを提供します。
narrow()
メソッドは、オブジェクト参照をキャストしてオブジェクト ファクトリを指すようにします。
find()
メソッドを使用して、そのオブジェクトを取得します。たとえば、Simple
というオブジェクトにアクセスする場合は、以下のコードを使用します。
Simple
mySimple
=mySimpleFactory
.find_simple();
このファクトリは、Simple
オブジェクトを検索するための find_simple()
メソッドを提供します。
FactoryFinder オブジェクトについては、BEA Tuxedo のマニュアルの『CORBA C++ Programming Reference』を参照してください。
BEA Tuxedo CORBA オブジェクトには、トランザクションのスコープの中でアクセスできます。以下のコード例では、TransactionCurrent オブジェクトを使用して、トランザクション スコープ内で BEA Tuxedo CORBA オブジェクトにアクセスします。BEA Tuxedo CORBA オブジェクトにアクセスするときには、UserTransaction オブジェクトも使用できます。
トランザクションを開始するには、WebLogic Server クライアントに以下のコードを追加します。
org.omg.CORBA.Object
myTCObject
=
myBootstrap
.resolve_initial_references("TransactionCurrent");
CosTransactions.CurrentmyTransaction
=
CosTransactions.CurrentHelper.narrow(myTCObject
);
このコードの説明は以下のとおりです。
myBootstrap
は、WLEC 接続プールに関連付けられている BEA Tuxedo ドメインの Bootstrap オブジェクトです。
resolve_initial_references()
メソッドは、TransactionCurrent オブジェクトのオブジェクト参照を返します。
CosTransactions.Current
インタフェースは、TransactionCurrent オブジェクトのインタフェースを定義します。これを使用すると、スレッドとトランザクションの関連付けを明示的に管理できるようになります。
CurrentHelper
インタフェースは、Current
に対する補助機能、特に narrow()
メソッドを提供します。
narrow()
メソッドは、オブジェクト参照をキャストして CosTransactions
オブジェクトを指すようにします。
myTransaction
.begin();
begin()
メソッドは、トランザクション コンテキストを作成して、それを前の手順の myTCObject
に関連付けます。myTCObject
は myBootstrap
に関連付けられており、myBootstrap
は特定の WLEC 接続プールに関連付けられているので、myTransaction
は特定の WLEC 接続プールに関連付けられることになります。
手順 6. BEA Tuxedo CORBA オブジェクトとその操作にアクセスする
WLEC 接続プールに関連付けられている BEA Tuxedo ドメインに属する BEA Tuxedo CORBA オブジェクトのメソッドを呼び出します。
トランザクション コンテキスト内のオブジェクトにアクセスする場合は、以下の TransactionCurrent メソッドを使用してそのトランザクション コンテキストの操作とクエリを行うことができます。
トランザクション コンテキスト内の BEA Tuxedo CORBA オブジェクトにアクセスした場合、以下のいずれかの TransactionCurrent メソッドを使用してトランザクションを終了します。
トランザクションに関する詳細情報
この節では、BEA Tuxedo 環境でのトランザクションについてさらに詳しく説明します。
BEA Tuxedo CORBA トランザクション サービスを使用すると、単一のアプリケーション プロセスの複数のスレッドから、別個のトランザクションを同時に開始できます。たとえば、2 つのスレッドが CosTransactions.Current.begin()
と UserTransaction.begin()
を同時に呼び出す場合、どちらのスレッドも、それぞれのトランザクションに対応する別個のトランザクション コンテキストを持ちます。
CORBA トランザクション サービスでは、単一のアプリケーションの複数のスレッドが、同じトランザクションを同時に扱うことはできません。CosTransactions を使用する場合、以下のようにトランザクションの中断と再開を行って、複数のスレッド内でそのトランザクションを使用します。
Current.suspend()
を呼び出して、トランザクションを中断して Control オブジェクトを取得します。
Current.resume()
を呼び出して、そのトランザクションを再開します。
中断されていないトランザクションをスレッドが再開しようとすると、BEA Tuxedo システムは InvalidControl
例外を送出します。
UserTransaction
では、suspend()
と resume()
をサポートしていません。したがって、UserTransaction を使用するときには、複数のスレッドで 1 つのトランザクションを使うことはできません。
WebLogic Enterprise Connectivity コンポーネントでは、単一の WebLogic Server クライアントで複数の WLEC 接続プールを同時にアクティブにできます。CosTransactions.Current.begin()
や UserTransaction.begin()
を呼び出してトランザクション コンテキストを作成すると、BEA Tuxedo システムは、そのトランザクションを WLEC 接続プールに関連付けます。そのトランザクションのスコープ内で行われる呼び出しはすべて、そのトランザクションの WLEC 接続プールに関連付けられているドメイン内に存在するオブジェクトに対するものでなければなりません。
1 つのトランザクションが複数の BEA Tuxedo ドメインにまたがることはできません。別のドメイン内のオブジェクトを呼び出そうとすると、BEA Tuxedo システムは INVALID_TRANSACTION
例外を送出します。
WLEC クライアントがトランザクションを開始または再開すると、WLEC 接続プールのインフラストラクチャは、そのトランザクションのコンテキスト内で送信される要求のための接続を確保します。WebLogic Enterprise Connectivity は、そのトランザクション コンテキスト外の要求を送信するためにこの接続を使うことはありません。WebLogic Enterprise Connectivity は、そのトランザクションがコミット、ロールバック、もしくは中断されるまでその接続を確保します。
注意 : suspend()
と resume()
を使用できるのは CosTransactions だけです。
同時にアクティブにできるトランザクションの数は、プール内で使用できる接続の数によって決まります。スレッドがトランザクションを開始または再開するときに接続が利用できない場合、WebLogic Enterprise Connectivity は NO_RESOURCES
例外を送出します。
各スレッドは、独自のトランザクション コンテキストを備えています。スレッドがトランザクションを開始または再開すると、そのトランザクションはコミット、ロールバック、または中断されるまでアクティブになります。その後に WebLogic Server クライアントを呼び出しても、それらが同じスレッド内で実行される保証はありません。したがって、スレッドでは、トランザクションをコミット、ロールバック、または中断してから、WebLogic Server クライアントの呼び出しを終了することが大切です。
注意 : suspend()
と resume()
を使用できるのは CosTransactions だけです。
必要であれば、次の手順で、WebLogic Server クライアントへの複数の呼び出しで 1 つのトランザクションを使用できます。
WLS クライアントへの次の呼び出しを行わないうちにトランザクションがタイムアウトする可能性があるので、この方法を使用するときには注意してください。
![]() |
![]() |