BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic Enterprise Connectivity ユーザーズ ガイド(非推奨)

 Previous Next Contents PDF で侮ヲ  

CORBA オブジェクトを呼び出す WebLogic Server クライアントの作成

以下の節では、WebLogic Server から BEA Tuxedo CORBA オブジェクトにアクセスするための要件について説明します。

 


始める前に

BEA Tuxedo CORBA オブジェクトを呼び出す WebLogic Server クライアントを実装するには、あらかじめ以下の作業を行っておく必要があります。

 


WLEC 接続プールのコンフィグレーション

WebLogic Server クライアントからアクセスする BEA Tuxedo オブジェクトを持つ BEA Tuxedo ドメインごとに、WLEC 接続プールをコンフィグレーションします。WebLogic Server クライアント用に確立されたセキュリティ コンテキストは WLEC 接続プールを介して BEA Tuxedo ドメインに伝播されるので、WLEC 接続プールはセキュリティ コンテキスト伝播機能の基礎であると言えます。

WLEC 接続プールを使用する前に、WL_HOME/lib/wleorb.jar、 WL_HOME/lib/wlepool.jarTUXDIR/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 接続プールを作成するには、以下の手順に従います。

  1. Administration Console の左ペインで、[サービス|WLEC] ノードを選択します。Administration Console の右ペインで、[新しい WLEC Connection Pool のコンフィグレーション] リンクをクリックします。次の表にある属性を定義します。

    表2-1 [一般] タブの WLEC 接続プールの属性

    属性

    説明

    [名前]

    WLEC 接続プールの名前。この名前は WLEC 接続プールごとにユニークでなければならない。

    [プライマリ アドレス]

    WLEC 接続プールと BEA Tuxedo ドメインとの接続を確立するために使用する IIOP リスナ/ハンドラのアドレスのリスト。各アドレスのフォーマットは、//hostname:port

    アドレスは、UBBCONFIG ファイルに定義されている ISL アドレスと一致しなければならない。アドレスとアドレスの区切りにはカンマを使用する。たとえば、//main1.com:1024, //main2.com:1044 になる。

    SSL プロトコルを使用するよう WLEC 接続プールをコンフィグレーションするには、IIOP リスナ/ハンドラのアドレスに corbalocs プレフィックスを付ける。たとえば、corbalocs://hostname:port になる。

    [フェイルオーバー アドレス]

    [プライマリ アドレス] 属性に定義されているアドレスを使って接続を確立できない場合に使用される IIOP リスナ/ハンドラのアドレスのリスト。アドレスとアドレスの区切りにはカンマを使用する。この属性は省略可能。

    [ドメイン]

    WLEC 接続プールの接続先 BEA Tuxedo ドメインの名前。WLEC 接続プールは、BEA Tuxedo ドメインにつき 1 つしか定義できない。ドメイン名は、BEA Tuxedo ドメインの UBBCONFIG ファイルの RESOURCES セクションの domainid パラメータに一致しなければならない。

    [最小プール サイズ]

    WebLogic Server が起動したときに、WLEC 接続プールに追加する IIOP 接続の数。デフォルトは 1。

    [最大プール サイズ]

    WLEC 接続プールから開始できる IIOP 接続の最大数。デフォルトは 1。


     

  2. [作成] ボタンをクリックします。

  3. WebLogic Server セキュリティ レルム内のユーザのセキュリティ コンテキストを BEA Tuxedo ドメインに伝播します。伝播するには、接続プールの [コンフィグレーション] タブにある [セキュリティ] タブの属性を定義します。次の表では、これらの属性について説明します。

    表2-2 [セキュリティ] タブの WLEC 接続プールの属性

    属性

    説明

    [ユーザ名]

    BEA Tuxedo ユーザ名。この属性は、BEA Tuxedo ドメインのセキュリティ レベルが USER_AUTHACL、または MANDATORY_ACL の場合にのみ指定する。

    [ユーザ パスワード]

    [ユーザ名] 属性に定義したユーザのパスワード。この属性は、[ユーザ名] 属性を定義する場合にのみ指定する。

    [ユーザ ロール]

    BEA Tuxedo ユーザ ロール。この属性は、BEA Tuxedo のセキュリティ レベルが APP_PWUSER_AUTHACL、または MANDATORY_ACL の場合にのみ指定する。

    [アプリケーション パスワード]

    BEA Tuxedo CORBA アプリケーションのパスワード。この属性は、BEA Tuxedo ドメインのセキュリティ レベルが APP_PWUSER_AUTHACL、または MANDATORY_ACL の場合にのみ指定する。

    [最小暗号化レベル]

    BEA Tuxedo ドメインと WebLogic Server との間で使用される SSL の最小暗号化レベル。指定できる値は、0、40、56、128。デフォルト値は 0。ゼロ(0)は、データを署名するが暗号化しないことを示す。40、56、および 128 は暗号キーの長さ(ビット単位)を指定する。最小暗号化レベルが満たされていない場合、BEA Tuxedo ドメインと WebLogic Server との SSL 接続は失敗する。

    [最大暗号化レベル]

    BEA Tuxedo ドメインと WebLogic Server との間で使用される SSL の最大暗号化レベル。指定できる値は 0、40、56、および 128。デフォルト値は 0。ゼロ(0)は、データを署名するが暗号化しないことを示す。40、56、および 128 は暗号キーの長さ(ビット単位)を指定する。最小暗号化レベルが満たされていない場合、BEA Tuxedo ドメインと WebLogic Server との SSL 接続は失敗する。

    [証明書を有効化]

    証明書を使用できるようにするチェックボックス。

    デフォルトでは、証明書は無効。

    [セキュリティ コンテキストを有効化]

    BEA Tuxedo ドメインに渡される WebLogic Server ユーザのセキュリティ コンテキストを渡す場合は、このチェックボックスをオンにする。

    デフォルトでは、セキュリティ コンテキストは無効。


     

  4. 変更を保存するには、[適用] ボタンをクリックします。

  5. [対象] タブをクリックしてサーバを選択します。[適用] をクリックします。

  6. WebLogic Server を再起動します。

  7. tpusradd コマンドを実行して、WebLogic Server ユーザを BEA Tuxedo ドメインで認可済みのユーザとして定義します。

  8. ISL コマンドの -E オプションを設定して、WebLogic Server レルムから伝播されたセキュリティ コンテキストを認識して利用するよう IIOP リスナ/ハンドラをコンフィグレーションします。ISL コマンドの -E オプションでは、プリンシパル名を指定する必要があります。プリンシパル名によって、WLEC 接続プールが BEA Tuxedo ドメインにログ インするために使用するプリンシパルが定義されます。プリンシパル名は、WLEC 接続プールを作成するときに [ユーザ名] 属性に定義した名前と一致しなければなりません。

WebLogic Server 環境と BEA Tuxedo CORBA 環境との間で証明書を使用するということは、WebLogic Server 環境から CORBA オブジェクトへの接続を確立するときに、新規の SSL ハンドシェークが開始されるということです。同じ SSL ネットワーク接続を使用して複数のクライアント リクエストをサポートするには、そうした処理を行うように証明書を次のように設定しなければなりません。

  1. プリンシパルに対応するデジタル証明書を取得して、プライベート キーを BEA Tuxedo の TUXDIR/udataobj/security/keys ディレクトリに入れます。

  2. tpusradd コマンドを実行して、プリンシパルを BEA Tuxedo のユーザとして定義します。

  3. -E オプションを使用して UBBCONFIG ファイルの IIOP リスナ/ハンドラを定義して、プリンシパルが認証用に使用されることを示します。

  4. WebLogic Server の Administration Console で WLEC 接続プールを作成するときに、[ユーザ名] 属性にプリンシパル名を定義します。

  5. IIOP リスナ/ハンドラのデジタル証明書を取得します。

  6. ISL コマンドの SEC_PRINCIPAL_NAME オプションでデジタル証明書を指定し、-S オプションを使用して、セキュア ポートを BEA Tuxedo ドメインと WebLogic Server セキュリティ レルムとの間で使用することを示します。

BEA Tuxedo CORBA アプリケーションでセキュリティをコンフィグレーションする方法については、『CORBA セキュリティ機能の概要』を参照してください。

 


BEA Tuxedo CORBA オブジェクトへのアクセス

この節では、WebLogic Server クライアントから BEA Tuxedo CORBA オブジェクトにアクセスするための手順について説明します。

手順 1. クライアント スタブを作成する

クライアント スタブは、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 オブジェクトのクライアント スタブが入っているディレクトリが含まれていることを確認します。

手順 2. Java パッケージをインポートする

以下の 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");

各要素の説明は次のとおりです。

手順 4. BEA Tuxedo CORBA のオブジェクト参照を取得する

WebLogic Server クライアントで FactoryFinder を使用して、BEA Tuxedo CORBA オブジェクトへの参照を取得します。

  1. 次のように FactoryFinder オブジェクトを取得します。
    org.omg.CORBA.Object myFFObject = 
    myBootstrap.resolve_initial_references("FactoryFinder");
    FactoryFinder myFactFinder =
    FactoryFinderHelper.narrow(myFFObject);

    各要素の説明は次のとおりです。

  2. 次のように、BEA Tuxedo CORBA オブジェクト用のファクトリを取得します。
    org.omg.CORBA.Object myFactoryRef =
    myFactFinder.find_one_factory_by_id(myFactoryHelper.id());
    myFactory =
    myFactoryHelper.narrow(myFactoryRef);

    各要素の説明は次のとおりです。

  3. BEA Tuxedo CORBA オブジェクトの find() メソッドを使用して、そのオブジェクトを取得します。たとえば、Simple というオブジェクトにアクセスする場合は、以下のコードを使用します。
    Simple mySimple = mySimpleFactory.find_simple();

    このファクトリは、Simple オブジェクトを検索するための find_simple() メソッドを提供します。

FactoryFinder オブジェクトについては、BEA Tuxedo のマニュアルの『CORBA プログラミング リファレンス』を参照してください。

手順 5. トランザクションを開始する(オプション)

BEA Tuxedo CORBA オブジェクトには、トランザクションのスコープ内でアクセスできます。以下のコード例では、TransactionCurrent オブジェクトを使用して、トランザクション スコープ内で BEA Tuxedo CORBA オブジェクトにアクセスします。BEA Tuxedo CORBA オブジェクトにアクセスするときには、UserTransaction オブジェクトも使用できます。

トランザクションを開始するには、WebLogic Server クライアントに以下のコードを追加します。

  1. 次のように、TransactionCurrent オブジェクトを取得します。
    org.omg.CORBA.Object myTCObject = 
    myBootstrap.resolve_initial_references("TransactionCurrent");
    CosTransactions.Current myTransaction =
    CosTransactions.CurrentHelper.narrow(myTCObject);

    各要素の説明は次のとおりです。

  2. 次のようにトランザクションを開始します。
    myTransaction.begin();

    begin() メソッドは、トランザクション コンテキストを作成して、それを前の手順の myTCObject に関連付けます。myTCObjectmyBootstrap に関連付けられており、myBootstrap は特定の WLEC 接続プールに関連付けられているので、myTransaction は特定の WLEC 接続プールに関連付けられることになります。

手順 6. BEA Tuxedo CORBA オブジェクトとその操作にアクセスする

WLEC 接続プールに関連付けられている BEA Tuxedo ドメインに属する BEA Tuxedo CORBA オブジェクトのメソッドを呼び出します。

トランザクション コンテキスト内のオブジェクトにアクセスする場合は、以下の TransactionCurrent メソッドを使用してそのトランザクション コンテキストの操作とクエリを行うことができます。

手順 7. トランザクションを終了する(オプション)

トランザクション コンテキスト内の BEA Tuxedo CORBA オブジェクトにアクセスした場合、以下のいずれかの TransactionCurrent メソッドを使用してトランザクションを終了します。

 


トランザクションに関する詳細情報

この節では、BEA Tuxedo 環境でのトランザクションについてさらに詳しく説明します。

マルチスレッド処理

BEA Tuxedo CORBA トランザクション サービスを使用すると、単一のアプリケーション プロセスの複数のスレッドから、別個のトランザクションを同時に開始できます。たとえば、2 つのスレッドが CosTransactions.Current.begin()UserTransaction.begin() を同時に呼び出す場合、どちらのスレッドも、それぞれのトランザクションに対応する別個のトランザクション コンテキストを持ちます。

CORBA トランザクション サービスでは、単一のアプリケーションの複数のスレッドが、同じトランザクションを同時に扱うことはできません。CosTransactions を使用する場合、以下のようにトランザクションの中断と再開を行って、複数のスレッド内でそのトランザクションを使用します。

  1. 第 1 のスレッドでは、Current.suspend() を呼び出して、トランザクションを中断して Control オブジェクトを取得します。

  2. 第 2 のスレッドでは、その Control オブジェクトの Current.resume() を呼び出して、そのトランザクションを再開します。

中断されていないトランザクションをスレッドが再開しようとすると、BEA Tuxedo システムは InvalidControl 例外を送出します。

UserTransaction では、suspend()resume() をサポートしていません。したがって、UserTransaction を使用するときには、複数のスレッドで 1 つのトランザクションを使うことはできません。

複数のアクティブな WLEC 接続プール

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 つのトランザクションを使用できます。

  1. それぞれの呼び出しの終わりに、トランザクションを中断します。

  2. その次の呼び出しで、トランザクションを再開します。

WLS クライアントへの次の呼び出しを行わないうちにトランザクションがタイムアウトする可能性があるので、この方法を使用するときには注意してください。

 

Back to Top Previous Next