JMS と WebSphere MQ の相互運用性ソリューション

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

JMS との相互運用性

以下の節では、BEA AquaLogicTM Service Bus と WebLogic JMS の相互運用性に関連する機能および概念について説明します。

 


JMS の相互運用性の概要

Java API for XML-Remote Procedure Call (JAX-RPC) は、J2EE を使用して Web サービスを構築しデプロイするコア Java API と見なすことができます。JAX-RPC は、XML 型と Java 型とのマッピングの複雑さや、XML SOAP メッセージの処理に関する低レベルの詳細を開発者から切り離すことで、Web サービス アプリケーションを構築するための簡単かつ堅牢なプラットフォームを提供します。JAX-RPC は、次の 2 つのプログラミング モデルを提供することによって、メソッド呼び出しパラダイムを導入します。

JAX-RPC では、SOAP の使用と、他のテクノロジによって構築されたその他の Web サービスとの相互運用性が要求されます。ステートレス セッション EJB、またはビジネス ロジックを実行する Java クラスがすでにある場合、J2EE 1.4 では JAX-RPC を使用した標準的な方法でサービスとしてエクスポーズできます。

AquaLogic Service Bus は、次の JMS 実装での動作が確認されています。

すべての AquaLogic Service Bus のサービス タイプで JMS 転送がサポートされています。プロキシ サービスとビジネス サービスは、JMS 転送を使用するようにコンフィグレーションする必要があります。詳細については、『AquaLogic Service Bus Console の使い方』の「プロキシ サービス」および「ビジネス サービス」を参照してください

AquaLogic Service Bus のサービス タイプと各サービス タイプの転送方式については、BEA AquaLogic Service Bus ユーザーズ ガイドの「AquaLogic Service Bus でのメッセージ フローの作成」にある「サービス タイプの選択」を参照してください

WebLogic Server 9.x JMS については、以下を参照してください。

注意 : AquaLogic Service Bus バージョン 2.5 では、リモート トランザクション サポートのコンフィグレーションに不可欠な MQ Extended Transactional Client が現在サポートされています。

 


非同期の要求/応答メッセージング

メッセージングは次のように分類できます。

ただし、JMS でのメッセージングは、一方向または非同期の要求/応答のみです。JMS を使用した非同期の要求/応答メッセージングは、HTTP または HTTPS を使用したメッセージングに代わるものです。

非同期の要求/応答メッセージングを使用する利点は次のとおりです。

IBM WebSphere MQ を使用している場合、特定のメインフレームとの対話には非同期の要求/応答メッセージを使用することをお勧めします。非同期サービスは、使用する JMS 要求/応答パターンに応じて相関 ID またはメッセージ ID を返す必要があります。AquaLogic Service Bus で使用するどちらの ID 形式も、IBM WebSphere MQ との互換性および MQ ネイティブ インタフェースを使用する対象サービスとの互換性があります。詳細については、「JMS 要求/応答のメッセージ ID と相関 ID のパターンについて」を参照してください。

非同期の要求/応答メッセージは、発信転送と着信転送によって処理されます。つまり、転送方式固有のデータである $outbound$inbound を除き、JMS 要求/応答と HTTP 要求/応答のメッセージ フローに違いはありません。

AquaLogic Service Bus は、同期と非同期の要求/応答のブリッジングをサポートしています。たとえば、HTTP を使用してプロキシ サービスを呼び出すことができ、呼び出されたプロキシ サービスは、JMS 要求/応答ビジネス サービスにルーティングされます。これを同期から非同期へのサービスの切り替えと呼びます。

 


SOAP/JMS 転送の使用

SOAP は転送方式に依存しないため、SOAP 転送で HTTP の代わりに JMS を使用できます。特に企業顧客の場合、SOAP/JMS 転送が必要となります。AquaLogic Service Bus は、JMS 要求/応答での SOAP メッセージをサポートしています。また、SOAP ベースの WebLogic Server クライアントおよびサービスとの相互運用もサポートしています。

JMS は、信頼性の高いメッセージング方法でもあります。

この節では、次のような SOAP/JMS の相互運用の例を示します。

BEA WebLogic Server 9.x との相互運用

JMS バインディングを使用して WebLogic Server 9.x のサービスをコンフィグレーションする場合は、WebLogic Server で次の SOAP/JMS URL 形式を使用します。

jms://host:port/contextURI/serviceName?URI=destJndiName

AquaLogic Service Bus でサービスをコンフィグレーションする場合、URL は次の形式で指定する必要があります。

jms://host:port/factoryJndiName/destJndiName

どちらの形式でも同じ destJndiName を使用します。factoryJndiName は、対象 WebLogic Server の既存の QueueConnectionFactory の JNDI 名である必要があります。

AquaLogic Service Bus から BEA WebLogic Server サービスを呼び出す場合は、要求をビジネス サービスに送信する前に、メッセージ フロー内で発信変数 ($outbound) に値 /contextURI/serviceName の JMS プロパティとして URI を設定する必要があります。このプロパティを設定するには、転送ヘッダ アクションを使用します。

$outbound の設定については、『AquaLogic Service Bus Console の使い方』の「メッセージ コンテキスト」にある「inbound 変数と outbound 変数」を参照してください

WebLogic Server 9.x Web Services クライアントから AquaLogic Service Bus プロキシ サービスを呼び出す場合、URI プロパティは無視されます。ただし、転送ヘッダ アクションのパススルー オプションを使用すると、呼び出されるサービスにパススルーできます。

AquaLogic Service Bus で呼び出すことができるのは、バージョン 9.2 以降で実行されている WebLogic 要求/応答サービスのみです。ただし、一方向の JMS サービスも呼び出すことができます。

BEA WebLogic Workshop 8.1 との相互運用

JMS バインディングを使用して BEA WebLogic Workshop 8.1 のビジネス サービスをコンフィグレーションする場合は、BEA WebLogic Workshop で次の SOAP/JMS URL 形式を使用します。

jms://host:port/factoryJndiName/destJndiName?URI=/process/myprocess.jpd

AquaLogic Service Bus は、常に次の形式で JMS URL を使用します。

jms://host:port/factoryJndiName/destJndiName

AquaLogic Service Bus から BEA WebLogic Workshop サービスを呼び出す場合は、メッセージを送信する前に、メッセージ フロー内で発信変数 ($outbound) に JMS プロパティとしてこの URI を設定する必要があります。このプロパティを設定するには、転送ヘッダ アクションを使用します。

WebLogic Workshop クライアント (コントロールなど) が AquaLogic Service Bus プロキシ サービスを呼び出す場合、URI プロパティは無視されます。ただし、転送ヘッダ アクションのパススルー オプションを使用すると、呼び出されるサービスにパススルーできます。

AquaLogic Service Bus では、WebLogic 8.1 の JMS 要求/応答サービスを呼び出すことはできません。ただし、一方向の JMS サービスは呼び出すことができます。

$outbound の設定については、『AquaLogic Service Bus Console の使い方』の「メッセージ コンテキスト」にある「inbound 変数と outbound 変数」を参照してください

BEA WebLogic Server 8.1 との相互運用

JMS バインディングを使用して WebLogic Server 8.1 のビジネス サービスをコンフィグレーションする場合は、WebLogic Server で次の SOAP/JMS URL 形式を使用します。

jms://host:port/factoryJndiName/destJndiName?URI=/contextURI/serviceName

この形式は、前の節で示した AquaLogic Service Bus JMS URL 形式とは異なります。AquaLogic Service Bus から BEA WebLogic Workshop サービスを呼び出す場合は、要求をビジネス サービスに送信する前に、メッセージ フロー内で発信変数 ($outbound) に JMS プロパティとしてこの URI を設定する必要があります。このプロパティを設定するには、転送ヘッダ アクションを使用します。

WebLogic Server 8.1 Web Services クライアントが AquaLogic Service Bus プロキシ サービスを呼び出す場合、URI プロパティは無視されます。ただし、転送ヘッダ アクションのパススルー オプションを使用すると、呼び出されるサービスにパススルーできます。

$outbound の設定については、『AquaLogic Service Bus Console の使い方』の「メッセージ コンテキスト」にある「inbound 変数と outbound 変数」を参照してください

 


ドメイン、WebLogic、および JMS サーバの命名ガイドライン

複数のドメインを使用する作業では、コンフィグレーションが次の要件に準拠していることを確認します。

JMS サーバ名に関しては次のルールを確認します。

WebLogic JMS のコンフィグレーションと管理方法については、以下を参照してください。

WebLogic Server ドメインについては、『ドメインのコンフィグレーションについて』を参照してください。

 


サービスの JMS タイプの指定

AquaLogic Service Bus では、異種のエンドポイント間での相互運用性を確保するため、使用されるコンテンツ タイプ、JMS タイプ、およびエンコーディングをメッセージ フローのコンフィグレーション時にそれぞれ制御できます。JMS タイプは、バイトまたはテキストのいずれかです。詳細については、BEA AquaLogic Service Bus ユーザーズ ガイドの「AquaLogic Service Bus でのメッセージ フローの作成」にある「コンテンツ タイプ、JMS タイプ、およびエンコーディング」を参照してください

 


WSDL 定義の SOAP エラー メッセージ

明示的にエラーを定義する WSDL を使用している場合、XML エラーのタイプに対し、WebLogic clientgen ツールによって java.lang.Exception というサブクラスが生成されます。WebLogic Server JAX-RPC スタックが SOAP 応答メッセージを検査し、応答メッセージに SOAP エラーが含まれると判断すると、そのエラーを clientgen 生成の例外 Java クラスにマップしようとします。

たとえば、次のコード リストに示す定義が WSDL に含まれる場合、clientgen ツールは java.lang.Exception を拡張した com.bea.test.TheFaultType Java クラスを生成します。このサービス スタブの関連メソッドが呼び出されると、JAX-RPC クライアントが com.bea.test.TheFaultType を受け取る可能性があります。

コード リスト 1-1 WSDL 定義のサンプル
<definitions ... xmlns:s0="http://www.bea.com/test/">
   ...
   <types>
      <xsd:schema targetNamespace="http://www.bea.com/test/">
         ...
         <xsd:complexType name="theFaultType">
            <xsd:sequence>
               <xsd:element name="ID" type="xsd:int" />
               <xsd:element name="message" type="xsd:string" />
            </xsd:sequence>
         </xsd:complexType>
         <xsd:element name="theFault" type="theFaultType" />
      </xsd:schema>
   </types>
   ...
   <message name="theFaultMessage">
      <part element="s0:theFaultPart" name="theFault" />
   </message>
   ...
   <binding ...>
      <operation ...>
         <soap:operation soapAction="..." style="document" />
         <input ...>
            ...
         </input>
         <output ...>
            ...
         </output>
         <fault ...>
            <soap:fault name="theFaultPart" use="literal" />
         </fault>
      </operation>
   </binding>
   ...
</definitions>

SOAP メッセージには正しい形式のエラーが含まれ、JAX-RPC スタックが正しい例外をスローできるようになっている必要があります。エラーを AquaLogic Service Bus メッセージ フロー内部で作成する場合は、次の操作を行います。

  1. $body 変数のノードを次の SOAP のサンプルで置き換えます。
  2. コード リスト 1-2 SOAP のサンプル
    <soap-env:Body> 
          <soap-env:Fault>
             <faultcode
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">soap:Server</faultcode>
             <faultstring>Some literal string</faultstring>
             <detail>
                <test:theFault>
                   <test:ID>Any user defined code</test:Id>
                   <test:message>A specific literal message</test:message>
                </test:theFault>
             </detail>
          </soap-env:Fault>
    </soap-env:Body>

    ここで、

    • soap-env - http://schemas.xmlsoap.org/soap/envelope/ ネームスペースのシステム プレフィックス。
    • test - http://www.bea.com/test/ ネームスペースのプレフィックス。
    • test プレフィックスが AquaLogic Service Bus にとって既知ではない場合は、宣言する必要があります。

  3. 失敗時の返信アクションをコンフィグレーションします。

AquaLogic Service Bus Console での返信アクションのコンフィグレーションについては、『AquaLogic Service Bus Console の使い方』の「プロキシ サービス : アクション」を参照してください。

clientgen ツールは、JAX-RPC スタブなど、Web サービスを呼び出すために必要なクライアント側アーティファクトを生成するために使用します。『WebLogic Web サービス プログラマーズ ガイド』の「Ant タスク リファレンス」を参照してください


  ページの先頭       前  次