ユーザーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容

EJB 転送

AquaLogic Service Bus は、EJB 転送を使用して、WebLogic Server 8.1、9.0、9.1 または 9.2 にデプロイされているステートレス セッション Bean のネイティブな RMI 呼び出しをサポートします。これにより、トランザクション対応の、安全な通信が可能になります。EJB 転送は、AquaLogic Service Bus から EJB を Web サービスとしてエクスポーズする際にも利用できます。

この節の内容は以下のとおりです。

 


はじめに

AquaLogic Service Bus でビジネス サービスを設計し、EJB 転送を使用できます。EJB 転送は、AquaLogic Service Bus コンフィグレーション、管理、モニタ、およびテスト コンソールと完全に統合されています。EJB 転送を使用して構築されたビジネス サービスは、パブリッシュ、サービス コールアウト、およびサービスの呼び出しに使用できます。EJB 転送を使用するプロキシ サービスは作成できません。

EJB は、ツールを使用したり、EJB をホストするアプリケーション サーバのレガシー コードを変更したりすることなく、Web サービスとしてエクスポーズできます。

EJB 転送には以下の機能があります。

トランザクションの整合性

EJB ビジネス サービスをグローバル トランザクションのコンテキスト内で呼び出せます。また、EJB 転送は、EJB を呼び出す前にグローバル トランザクションをサスペンドまたは開始できます。

セキュリティの伝播

メッセージ フローの最初に確立されたセキュリティ コンテキストは、AquaLogic Service Bus クライアントからその他のシステムに伝播されます。つまり、受信した、認証を必要とする AquaLogic Service Bus への SOAP over HTTP 要求は、AquaLogic Service Bus によって認証され、認証されたサブジェクトはその後 EJB サーバに伝播されます。

HTTP トンネリングおよび暗号化された通信

HTTP トンネリングを使用して、ファイア ウォール内の EJB にアクセスできます。セキュリティの強化のために、SSL を使用して EJB サーバとのすべての通信を暗号化できます。

JNDI プロバイダ

EJB 転送は、AquaLogic Service Bus リソースである JNDI プロバイダを使用します。JNDI プロバイダは、リモート サーバにアクセスするための通信プロトコルやセキュリティ資格を定義します。JNDI プロバイダは、複数の EJB ビジネス サービスで再利用できます。これにより、管理者によるリモート EJB サーバ コンフィグレーションの一元的な管理が実現します。
JNDI プロバイダ リソースについては、『AquaLogic Service Bus Console の使い方』の「システムの管理」を参照してください

高性能キャッシング

EJB 転送は高性能キャッシュに基づいて構築されています。そのため、確立された接続を再利用して、EJB スタブのルックアップを最小限に抑えられます。

フェイルオーバおよびロード バランシング

ロード バランシングまたはフェイルオーバ、もしくは両方のために、EJB 転送は、同じ EJB が複数のドメインまたは 1 つのクラスタにデプロイされているシナリオを利用できます。

高度な XML と Java 間のバインディング機能

EJB 転送は、WebLogic Server JAX-RPC スタックを使用して、Java と XML のバインディングを実行します。JAX-RPC スタックは、XML Bean などの高度な Java オブジェクトをサポートする高性能のエンジンです。Java 型がスタックによって認識されない場合、これらの Java 型をサポートできるようにするための拡張メカニズムが提供されます。(コンバータ クラスを使用した) 拡張メカニズムについては、「サポートされる型および Converter クラス」を参照してください。

インテリジェントな再試行

EJB 転送は、EJB の呼び出し中に発生する可能性のある障害の性質に基づいて再試行を決定します。

 


AquaLogic Service Bus からの EJB の呼び出し

AquaLogic Service Bus にビジネス サービスをコンフィグレーションする前に、JNDI プロバイダ リソースおよびクライアント JAR リソースを登録する必要があります。この節では、AquaLogic Service Bus での EJB 転送ビジネス サービスの設計とコンフィグレーションの方法について説明します。内容は以下のとおりです。

JNDI プロバイダ リソースの登録

JNDI プロバイダ リソースにより、リモート WebLogic 8.1 または 9.x ドメインの JNDI ツリーにバインドされている EJB スタブを取得するために使用される通信プロトコルやセキュリティ資格を指定できます (JNDI ツリーの設定方法の詳細については、BEA WebLogic Server ドキュメントの『WebLogic JNDI プログラマーズ ガイド』を参照)。

通常、ターゲット EJB は AquaLogic Service Bus と同じドメイン内にはありません。この場合、JNDI プロバイダ リソースを登録する必要があります。EJB が同じドメイン内にある場合、プロバイダを定義して資格を指定し、スタブ キャッシングを利用できます。ただし、この場合、省略可能です。

JNDI プロバイダには、リモート接続と EJB スタブのための高性能なキャッシング メカニズムがあります。AquaLogic Service Bus から WebLogic Server ドメインへの推奨される通信プロトコルは、t3 または t3s です。メッセージがファイア ウォールを通過する必要がある場合は、HTTP トンネリングを使用できます。HTTP トンネリングの詳細については、「HTTP トンネリングおよび暗号化された通信」を参照してください。

注意 :

JNDI プロバイダの追加

AquaLogic Service Bus への JNDI プロバイダ リソースの登録とコンフィグレーションについては、『AquaLogic Service Bus Console の使い方』の「システムの管理」にある「JNDI プロバイダの追加」を参照してください

EJB クライアント JAR リソースの登録

クライアント JAR を、リソースとして AquaLogic Service Bus に登録する必要があります。その結果、AquaLogic Service Bus コンフィグレーションの一部となり、プロジェクトからエクスポートすることもプロジェクトにインポートすることもできます。

EJB クライアント JAR ファイルには、AquaLogic Service Bus が EJB にアクセスするために必要なインタフェースとクラスが含まれている必要があります。これには、リモート インタフェースとホーム インタフェース、およびメソッドのパラメータ型またはアプリケーションの例外など、クライアントがエクスポーズされる依存型が含まれます。ビジネス サービスにコンバータ クラスが必要な場合は、それらも JAR ファイルに含める必要があります。コンバータ クラスについては、「Converter クラス」を参照してください。

EJB クライアント JAR を使用するときは、以下のガイドラインを考慮してください。

クライアント JAR の追加

AquaLogic Service Bus への JAR リソースの登録とコンフィグレーションについては、『AquaLogic Service Bus Console の使い方』の「JAR」にある「JAR の追加」を参照してください

サービス アカウントの作成 (省略可能)

EJB メソッドが保護されている場合、呼び出しに使用する資格を指定できます。多くの場合、これらの資格は JNDI プロバイダで使用される資格とは異なります。サービス アカウントの追加と使用については、『AquaLogic Service Bus Console の使い方』の「サービス アカウント」を参照してください

JNDI ツリーでの EJB の検索

EJB の JNDI 名がわからない場合は、EJB サーバの JNDI ツリーを参照できます。WebLogic Server Administration Console を使用した JNDI ツリーの参照方法については、以下を参照してください。

EJB ビジネス サービスの作成

この節では、EJB 転送を使用するビジネス サービスの作成について説明します。内容は以下のとおりです。

全般的なコンフィグレーション

  1. AquaLogic Service Bus Console を開き、アクティブなセッションで、左側のナビゲーション パネルから [プロジェクト エクスプローラ] を選択します。[プロジェクト ビュー] ページが表示されます。
  2. ビジネス サービスを作成するプロジェクトを選択します。ビジネス サービスを作成できる [ビジネス サービスの作成] ページが表示されます。
  3. [全般的なコンフィグレーション] ページで、以下の図に示されているように、ビジネス サービスの名前を入力し、[サービスの種類] として [転送型付きのサービス] を選択します。
  4. EJB ビジネス サービスは「転送型付きのサービス」です。つまり、転送のタイプはサービスのコンフィグレーションによって決まります。現時点では、EJB 転送はこの転送のタイプのみとなります。AquaLogic Service Bus の転送 SDK を使用して、その他の転送を追加できます。

    [説明] フィールドの入力は省略可能です。

    図 9-1 ビジネス サービスの作成 - 全般的なコンフィグレーション


    ビジネス サービスの作成 - 全般的なコンフィグレーション

  5. [次へ] をクリックし、転送固有のコンフィグレーションのページを開きます。
  6. [転送コンフィグレーション] ページで、[プロトコル] として [ejb] を選択します
  7. 図 9-2 ビジネス サービスの作成 - 転送コンフィグレーション


    ビジネス サービスの作成 - 転送コンフィグレーション

  8. エンドポイント URI を入力し、[既存の URI] のリストに追加します。URI を構築するには、「JNDI プロバイダの追加」で使用したプロバイダ名と、「JNDI ツリーでの EJB の検索」で特定した JNDI ツリー内での EJB ホーム インタフェースの場所が必要です。
  9. ejb:provider:jndi_name

    EJB がローカルにデプロイされている場合、JNDI プロバイダの名前を提供する必要はありません。この場合、URI の形式は以下のようになります。

    ejb::jndi_name
  10. 任意の AquaLogic Service Bus 転送に関して、[ロード バランシング アルゴリズム]、[再試行回数]、[再試行間隔] を指定し、フェイルオーバのために複数の URI を指定することもできます。「再試行およびフェイルオーバ」を参照してください。
  11. [次へ] をクリックし、EJB 転送固有のコンフィグレーションのページを開きます。

EJB 転送固有のコンフィグレーション

ビジネス サービスの全般的なコンフィグレーションが完了したら、ホーム インタフェースやリモート インタフェースなどの EJB 転送固有の情報を指定します。AquaLogic Service Bus Console の [EJB 転送コンフィグレーション] ページを次の図に示します。

図 9-3 ビジネス サービスの作成 - EJB 転送コンフィグレーション

ビジネス サービスの作成 - EJB 転送コンフィグレーション

EJB 転送をコンフィグレーションするには

  1. (オプション) サービス アカウントを選択します。
  2. EJB メソッドが保護されており、「サービス アカウントの作成 (省略可能)」の手順でサービス アカウントを定義している場合は、[参照] をクリックして適切なサービス アカウントを検索します。

  3. デフォルトでは、[トランザクションをサポートする] オプションが選択されています。これは、EJB がトランザクションをサポートするように指定します。トランザクションを伝播しない、または EJB でトランザクションをサポートしない場合は、[トランザクションをサポートする] の選択を解除します。
  4. EJB 転送でのトランザクション処理については、「トランザクション処理、再試行、およびエラー処理」を参照してください。

  5. クライアント JAR を選択します。「クライアント JAR の追加」の手順で以前に登録したクライアント JAR を参照して選択します。
  6. クライアント JAR を選択すると、ホーム インタフェースのリストがこのページに表示されます。

  7. [ホーム インタフェース] フィールドに表示されているインタフェースのリストからホーム インタフェースを選択します。
  8. リモート インタフェースは、ホーム インタフェースから自動的に推測され、コンフィグレーション ページが更新されます。[リモート インタフェース] フィールドが入力され、その他のオプションが提供されます。これにより、サービスのインタフェースおよびこのビジネス サービスのコンフィグレーションの終了時に生成される WSDL を制御できます。

    図 9-4 ビジネス サービスの作成 - EJB 転送コンフィグレーション (ホーム インタフェースの選択後)


    ビジネス サービスの作成 - EJB 転送コンフィグレーション (ホーム インタフェースの選択後)

EJB ビジネス サービスのインタフェースのコンフィグレーション

EJB ビジネス サービスは転送型付きのサービスです。つまり、転送のタイプはサービスのコンフィグレーションによって決まります。

EJB ビジネス サービスのタイプは SOAP XML サービスと同等です。つまり、EJB ビジネス サービスを他のすべての SOAP XML ビジネス サービスと同様に使用できます。EJB 転送コンフィグレーションを保存すると、WSDL が生成されます。

WSDL は、EJB のインタフェースに基づいて生成されます。[EJB 転送コンフィグレーション] ページは、サービスのインタフェースと生成される WSDL を制御するためのコンフィグレーション オプションを提供します。これを行うには、上の図に示すように [EJB 転送コンフィグレーション] ページのコンフィグレーションを完了します。

  1. [TargetNamespace] - WSDL の対象ネームスペースを指定します。
  2. [スタイル] - [ドキュメントをラップ] または [RPC] を選択できます。
  3. [エンコーディング] - [リテラル形式] または [エンコード形式] を選択します。
  4. 表示されるメソッドは選択した EJB リモート インタフェースのメソッドです。たとえば、次の図は sayHellosort の 2 つのメソッドを表示しています。
  5. 図 9-5 ビジネス サービスの作成 - EJB 転送コンフィグレーション、拡張されたメソッドのコンフィグレーション


    ビジネス サービスの作成 - EJB 転送コンフィグレーション、拡張されたメソッドのコンフィグレーション

  6. メソッド名に関連付けられているチェックボックスのチェックをはずすことで、エクスポーズしないメソッドを除外できます。
  7. 任意のメソッドのデフォルトの操作名を変更できます (デフォルトでは、操作名はメソッド名です)。EJB に同じ名前のメソッドが含まれている場合、ユニークになるように操作名を変更する必要があります。WSDL はユニークな操作名を必要とします。
  8. JAX-RPC スタックでサポートされないパラメータまたは戻り値の型を持つメソッドを除外するか、それらの引数を Converter クラスに関連付ける必要があります。
  9. 次の図は、カスタム メソッド コンフィグレーションの例を示します。

    図 9-6 ビジネス サービスの作成 - EJB 転送コンフィグレーション、カスタマイズされたメソッドのコンフィグレーション


    ビジネス サービスの作成 - EJB 転送コンフィグレーション、カスタマイズされたメソッドのコンフィグレーション

  10. [次へ] をクリックします。サービスを保存し、セッションをアクティブ化します。
注意 : 任意の EJB のメソッド間で資格またはトランザクション設定が異なる場合、任意のビジネス サービスのメソッドをカスタマイズする機能を使用して、メソッドごとのビジネス サービスを作成できます。これにより、トランザクションと資格の詳細な制御が可能になります。

EJB ビジネス サービスの呼び出し

EJB ビジネス サービスは、SOAP XML ビジネス サービスとして使用できます。EJB ビジネス サービスへのパブリッシュ、ルーティング、コールアウトが可能です。トランザクション サポートが必要な場合は、QoS を 「必ず 1 回」に設定します。「トランザクション処理、再試行、およびエラー処理」を参照してください。

テスト コンソールを使用してコンフィグレーションを検証したり、XML 要求の形式を決定したりすることもできます。

 


Web サービスとしての EJB のエクスポーズ

EJB 転送を使用して、EJB を Web サービスとして簡単にエクスポーズできます。

注意 : 既存の EJB ビジネス サービスからプロキシ サービスを作成することはできません。最初に EJB ビジネス サービスから生成された WSDL を取得し、その WSDL に基づいてプロキシ サービスを作成する必要があります。これを行うには、次の手順を実行します。

  1. EJB ビジネス サービスの作成」の手順で、エクスポーズする EJB を参照する EJB ビジネス サービスを作成します。
  2. AquaLogic Service Bus Console のサービスの詳細ページから、EJB ビジネス サービスの WSDL を取得します。
  3. WSDL は JAR ファイルに含まれています。保留中のセッションがない場合にのみ WSDL を取得できます。

  4. JAR から WSDL を抽出し、WSDL リソースとして登録します。WSDL リソースの作成については、『AquaLogic Service Bus Console の使い方』の「WSDL」を参照してください
  5. ビジネス サービスのコンフィグレーションが変更されると、新しい WSDL が生成されます。この場合、新しい WSDL を取得し、WSDL リソースとして再登録する必要があります。

  6. WSDL に基づいて SOAP XML プロキシ サービスを作成します。
  7. プロキシ サービス パイプラインを編集し、EJB ビジネス サービスにルーティングします。

これで、高価な Web サービス ツールキットを購入したり、EJB サーバで煩雑な動作を実行せずに、EJB を Web サービスとして呼び出せます。

 


詳細なトピック

この節では、EJB ビジネス サービスが、設計時のコンフィグレーションの方法に応じて、実行時にどのように動作するかを理解するために、EJB 転送について説明します。内容は以下のとおりです。

トランザクション処理、再試行、およびエラー処理

トランザクション

EJB 転送は、トランザクションを作成、サスペンド、および伝播できます。AquaLogic Service Bus および EJB サーバ間のトランザクションは XA トランザクションです。HTTP トンネリングを使用してトランザクションを使用する、または専用の通信チャネルがあり、EJB が 8.1 サーバにデプロイされている場合は、トランザクション マネージャの [セキュリティの相互運用モード] を [パフォーマンス] に設定する必要があります。セキュリティの相互運用モードの設定とその他のトランザクション コンフィグレーションについては、『WebLogic JTA プログラマーズ ガイド』の「トランザクションのコンフィグレーション」を参照してください

EJB ビジネス サービスの動作を決定する場合、プロキシ サービス パイプラインにトランザクション コンテキストが含まれているかどうか、およびサービスを呼び出すときにパイプラインでどのサービスの品質 (QoS) 設定が指定されているかを考慮する必要があります。

QoS に「ベスト エフォート」が指定されている場合

パイプラインで QoS に「ベスト エフォート」が指定されている場合、トランザクションは EJB に伝播されません。継続中のトランザクションは呼び出しの前にサスペンドされ、呼び出し後に再開されます

QoS に「必ず 1 回」が指定されている場合

パイプラインで QoS に「必ず 1 回」が指定されている場合、および
EJB がトランザクションをサポートしない場合 (つまり、[EJB 転送コンフィグレーション] ページの [トランザクションをサポートする] オプションのチェックがはずされている場合)、トランザクションは EJB に伝播されません。「ベスト エフォート」の場合と同様に、継続中のトランザクションは呼び出しの前にサスペンドされ、呼び出し後に再開されます
または
EJB がトランザクションをサポートする場合 (つまり、EJB 転送コンフィグレーション ページの [トランザクションをサポートする] オプションがチェックされている場合)、EJB はトランザクションのコンテキスト内で呼び出され、すべての継続中のトランザクションは EJB に伝播されます。トランザクションが存在しない場合、トランザクションは、呼び出しの前に作成され、後でコミットされます。

AquaLogic Service Bus services の QoS については、「サービスの品質」を参照してください。

再試行およびフェイルオーバ

EJB ビジネス サービスで再試行またはフェイルオーバがコンフィグレーションされている場合、EJB 転送は以下のタイプの例外を区別します。

再試行とフェイルオーバは、エラーのタイプおよび QoS に基づきます。

QoS に「ベスト エフォート」が指定されている場合

実行時例外またはリモート例外が送出された場合、EJB 転送は再試行またはフェイルオーバを試みます。
JAX-RPC エンジンで例外が発生した場合、エラーはパイプラインで発生し、再試行またはフェイルオーバの試みは行われません。 EJB チェック済み例外が送出された場合、エラーはパイプラインで発生し、再試行またはフェイルオーバの試みは行われません。

QoS に「必ず 1 回」が指定されている場合

実行時例外またはリモート例外が送出され、継続中のトランザクションが (一般的に EJB コンテナによって)「ロールバックのみ」に設定されている場合、EJB コンテナが影響を受け、EJB コンテナまたは EJB のいずれかで致命的なエラーが発生したことを意味します。この場合、再試行またはフェイルオーバの試みは行われず、エラーはパイプラインで発生します。
実行時例外またはリモート例外が送出されたが、継続中のトランザクションが「ロールバックのみ」に設定されていない場合、エラーは EJB コンテナの呼び出しの前に発生し、EJB 転送が再試行またはフェイルオーバを試みることを意味します。この場合、EJB 転送は引き続き「必ず 1 回」のセマンティクスを順守しています JAX-RPC エンジンで例外が発生した場合、EJB 転送が継続中のトランザクションを「ロールバックのみ」に設定するため、エラーはパイプラインで発生し、再試行またはフェイルオーバの試みは行われません EJB チェック済み例外が送出された場合、エラーはパイプラインで発生し、再試行またはフェイルオーバの試みは行われません。

EJB ビジネス サービスへの QoS 仕様のその他の影響については、「トランザクション」を参照してください。

エラー処理

チェック済み例外を送出するときに、EJB 仕様に応じて、継続中のトランザクションを「ロールバックのみ」に指定できます

EJB 開発者によって継続中のトランザクションが「ロールバックのみ」に設定されている場合、トランザクションは、最終的にその作成者 (多くの場合、プロキシ サービス) によってロール バックされます

継続中のトランザクションが「ロールバックのみ」に設定されておらず、チェック済み例外が発生した場合、エラー ハンドラによってパイプラインの EJB チェック済み例外を捕捉することが重要です。それらの例外が捕捉されない場合、パイプライン エラーがプロキシ サービスに逆に伝播されます。次に、一般的にプロキシ サービスは、継続中のトランザクションを (転送の実装に応じて) ロールバックします。これは意図された結果ではない場合があります。

たとえば、以下のメソッドを持つ EJB があると仮定します。

public void withdrawFunds(float amount) throws RemoteException, InsufficientFundsException {...}

また、InsufficientFundsException 例外が送出されたときに、EJB が現在のトランザクションを「ロールバックのみ」に設定しないと仮定します。ほとんどのシナリオにおいて、プロキシ サービスがトランザクションをロール バックするのは不適切です。場合によっては、パイプラインにエラー ハンドラをコンフィグレーションして、エラーを捕捉し、このシナリオを回避する必要があります。

サポートされる型および Converter クラス

EJB 転送は、XML 矢印 Java の変換を行います。変換は、WebLogic Server JAX-RPC エンジンによって実行されます。

EJB 転送は、以下の型をネイティブにサポートしています。

ネイティブにサポートされる型の完全なリストについては、『WebLogic Web サービス プログラマーズ ガイド』の「データ型とデータ バインディング」を参照してください

EJB メソッドは、JAX-RPC エンジンでサポートされない (設計時にエラーが報告される)、また、XML に直接マップしない (実行時にエラーが発生する) パラメータ/戻り値の型を使用できます。頻繁に使用されるが、サポートされていない型は以下のとおりです。

これらの型を XML 矢印 Java の変換に適した型に変換しなくても、カスタム コンバータ クラスを記述できます。EJB 転送はカスタム コンバータ クラスをサポートします。

Converter クラス

Converter クラスは、AquaLogic Service Bus パブリック API. の com.bea.wli.sb.transports.ejb.ITypeConverter Java インタフェースによって定義されるコントラクトを実装し、準拠する Java クラスです。ITypeConverter Java インタフェースとその他の AquaLogic Service Bus API については、AquaLogic Service Bus の Javadoc を参照してください。

EJB ビジネス サービスでコンバータ クラスを使用するには、以下を行う必要があります。

  1. インタフェースを実装およびコンパイルして、コンバータ クラスを作成します。
  2. クライアント JAR にコンバータ クラスを追加します。(「クライアント JAR の追加」を参照してください)。
  3. EJB ビジネス サービスの作成時にメソッド コンフィグレーションをカスタマイズする場合、パラメータ/戻り値の型のいずれか 1 つに移動し、目的のコンバータを選択します。「EJB ビジネス サービスのインタフェースのコンフィグレーション」の手順 7 を参照してください。AquaLogic Service Bus Console は、特定のパラメータ/戻り値の型に適用可能な Client-JAR で使用できるコンバータのリストを表示します。

 


トラブルシューティング

この節では、EJB ビジネス サービスの設計または実行時の問題のトラブルシューティングについて説明します。

デバッグ モードの有効化

EJB 転送は、その他の AquaLogic Service Bus 転送と同じロガーを使用します。デバッグ モードを有効にするには、サーバを起動する前に、ドメイン ディレクトリにある wlidebug.xml ファイルを編集し、カテゴリ wli-sb-transports-debugtrue に設定します。wlidebug.xml ファイルとデバッグ フラグの詳細については、「AquaLogic Service Bus でのデバッグ」を参照してください。

Temp ディレクトリ

設計時に、EJB 転送は、サブフォルダ alsbejbtransport にファイルを生成し、temp ディレクトリに appcgen_ というプレフィックスが付けられたサブフォルダを生成します。それらのフォルダとファイルを削除すると安全です。また、アクティブ化の際の問題を判断するためにそれらを確認すると役に立つ場合があります。

デプロイされたアプリケーション

EJB ビジネス サービスが作成されると、AquaLogic Server にアプリケーションがデプロイされます。このアプリケーションのモニタと調整は WebLogic Server Administration Console を使用して行うことができます。EJB ビジネス サービス アプリケーションの名前には、ALSB EJB が付加され、その後に WSDL 型と自動生成されたサフィックスが続きます。

エラー

EJB ビジネス サービスに関する問題のトラブルシューティングが必要な場合に、以下の項目が役立つことがあります。


  ページの先頭       前  次