![]() ![]() ![]() ![]() |
以下の節では、Oracle Service Bus と WebLogic JMS 間、および Oracle Service Bus と WebSphere MQ 間の相互運用性に関連する機能および概念について説明します。
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 を使用した標準的な方法でサービスとしてエクスポーズできます。
Oracle Service Bus は、次の JMS 実装での動作が確認されています。
すべて の Oracle Service Bus のサービス タイプで JMS 転送がサポートされています。プロキシ サービスとビジネス サービスで JMS 転送を使用するようにコンフィグレーションする詳細については、『Oracle Bus Console の使い方』の「プロキシ サービス : 作成と管理」および「ビジネス サービス : 作成と管理」を参照してください。
Oracle Service Bus のサービス タイプと各サービス タイプの転送方式については、『Oracle Service Bus ユーザーズ ガイド』の「Oracle Service Bus でのメッセージ フローの作成」にある「サービス タイプの選択」を参照してください。
WebLogic Server 10.0 JMS については、以下を参照してください。
注意·:· | Oracle Service Bus では、リモート トランザクション サポートのコンフィグレーションに不可欠な MQ Extended Transactional Client がサポートされています。 |
ただし、JMS でのメッセージングは、一方向または非同期の要求/応答のみです。JMS を使用した非同期の要求/応答メッセージングは、HTTP または HTTPS を使用したメッセージングに代わるものです。
非同期の要求/応答メッセージングを使用する利点は次のとおりです。
IBM WebSphere MQ を使用している場合、特定のメインフレームとの対話には非同期の要求/応答メッセージを使用することをお勧めします。非同期サービスは、使用する JMS 要求/応答パターンに応じて相関 ID またはメッセージ ID を返す必要があります。Oracle Service Bus で使用するどちらの ID 形式も、IBM WebSphere MQ との互換性および MQ ネイティブ インタフェースを使用する対象サービスとの互換性があります。詳細については、「JMS 要求/応答のメッセージ ID と相関 ID のパターンについて」を参照してください。
非同期の要求/応答メッセージは、発信転送と着信転送によって処理されます。つまり、転送方式固有のデータである $outbound
と $inbound
を除き、JMS 要求/応答と HTTP 要求/応答のメッセージ フローに違いはありません。
Oracle Service Bus は、同期と非同期の要求/応答のブリッジングをサポートしています。たとえば、HTTP を使用してプロキシ サービスを呼び出すことができ、呼び出されたプロキシ サービスは、JMS 要求/応答ビジネス サービスにルーティングされます。これを同期から非同期へのサービスの切り替えと呼びます。
SOAP は転送方式に依存しないため、SOAP 転送で HTTP の代わりに JMS を使用できます。特に企業顧客の場合、SOAP/JMS 転送が必要となります。Oracle Service Bus は、JMS 要求/応答での SOAP メッセージをサポートしています。また、SOAP ベースの WebLogic Server クライアントおよびサービスとの相互運用もサポートしています。
この節では、次のような SOAP/JMS の相互運用の例を示します。
JMS バインディングを使用して WebLogic Server 9.x および 10.0 のサービスをコンフィグレーションする場合は、WebLogic Server で次の SOAP/JMS URL 形式を使用します。
jms://host:port/contextURI/serviceName?URI=destJndiName
Oracle Service Bus でサービスをコンフィグレーションする場合、URL は次の形式で指定する必要があります。
jms://host:port/factoryJndiName/destJndiName
どちらの形式でも同じ destJndiName
を使用します。factoryJndiName
は、対象 WebLogic Server の既存の QueueConnectionFactory の JNDI 名である必要があります。
Oracle Service Bus から Oracle WebLogic Server サービスを呼び出す場合は、要求をビジネス サービスに送信する前に、メッセージ フロー内で発信変数 ($outbound
) に値 /contextURI/serviceName
の JMS プロパティとして URI を設定する必要があります。このプロパティを設定するには、転送ヘッダ アクションを使用します。
$outbound
の設定については、『Oracle Service Bus ユーザーズ ガイド』の「メッセージ コンテキスト」にある「inbound 変数と outbound 変数」を参照してください。
WebLogic Server 9.x および 10.0 Web Services クライアントから Oracle Service Bus プロキシ サービスを呼び出す場合、URI プロパティは無視されます。ただし、転送ヘッダ アクションのパススルー オプションを使用すると、呼び出されるサービスにパススルーできます。詳細については、『Oracle Service Bus Console の使い方』の「プロキシ サービス : アクション」にある「転送ヘッダ アクションの追加」を参照してください。
Oracle Service Bus で呼び出すことができるのは、バージョン 9.2 以降で実行されている WebLogic 要求/応答サービスのみです。ただし、一方向の JMS サービスも呼び出すことができます。
ドメイン間 JMS 呼び出しの応答キューをコンフィグレーションする場合は、要求側の管理対象サーバごとに個別の応答キューを設定します。次に例を示します。
WLS ドメインと通信する 2 つの Oracle Service Bus クラスタ ドメイン (ドメイン A とドメイン B) があります。この WLS ドメインには、2 つの管理対象サーバがあるとします。ドメイン A に 3 つの管理対象サーバ、ドメイン B に 4 つの管理対象サーバがある場合、ドメイン A とドメイン B に応答を返すには、応答キューとして機能する 7 つ (3 + 4 = 7) の異なるキューを WLS ドメインにコンフィグレーションする必要があります。これらのキューは、(WLS ドメインの両方の管理対象サーバにメンバーを持つ) 分散キューである場合もあります。
注意 : | 異なるリモート ドメインによってホストされている複数のプロキシ サービスから JMS 要求を受信するには、要求側の各ドメインに対応する個別の応答キューのセットを使用して、JMS ビジネス サービスをホストするバックエンドのドメインをコンフィグレーションする必要があります。 |
JMS バインディングを使用して Oracle WebLogic Workshop 8.1 のビジネス サービスをコンフィグレーションする場合は、Oracle WebLogic Workshop で次の SOAP/JMS URL 形式を使用します。
jms://host:port/factoryJndiName/destJndiName?URI=/process/myprocess.jpd
Oracle Service Bus は、常に次の形式で JMS URL を使用します。
jms://host:port/factoryJndiName/destJndiName
Oracle Service Bus から Oracle WebLogic Workshop サービスを呼び出す場合は、メッセージを送信する前に、メッセージ フロー内で発信変数 ($outbound
) に JMS プロパティとしてこの URI を設定する必要があります。このプロパティを設定するには、転送ヘッダ アクションを使用します。詳細については、『Oracle Service Bus Console の使い方』の「プロキシ サービス : アクション」にある「転送ヘッダ アクションの追加」を参照してください。
WebLogic Workshop クライアント (コントロールなど) が Oracle Service Bus プロキシ サービスを呼び出す場合、URI プロパティは無視されます。ただし、転送ヘッダ アクションのパススルー オプションを使用すると、呼び出されるサービスにパススルーできます。
Oracle Service Bus では、WebLogic 8.1 の JMS 要求/応答サービスを呼び出すことはできません。ただし、一方向の JMS サービスは呼び出すことができます。
$outbound
の設定については、『Oracle Service Bus ユーザーズ ガイド』の「メッセージ コンテキスト」にある「inbound 変数と outbound 変数」を参照してください。
JMS バインディングを使用して WebLogic Server 8.1 のビジネス サービスをコンフィグレーションする場合は、WebLogic Server で次の SOAP/JMS URL 形式を使用します。
jms://host:port/factoryJndiName/destJndiName?URI=/contextURI/serviceName
この形式は、前の節で示した Oracle Service Bus JMS URL 形式とは異なります。Oracle Service Bus から Oracle WebLogic Workshop サービスを呼び出す場合は、要求をビジネス サービスに送信する前に、メッセージ フロー内で発信変数 ($outbound
) に JMS プロパティとしてこの URI を設定する必要があります。このプロパティを設定するには、転送ヘッダ アクションを使用します。
WebLogic Server 8.1 Web Services クライアントが Oracle Service Bus プロキシ サービスを呼び出す場合、URI プロパティは無視されます。ただし、転送ヘッダ アクションのパススルー オプションを使用すると、呼び出されるサービスにパススルーできます。詳細については、『Oracle Service Bus Console の使い方』の「プロキシ サービス : アクション」にある「転送ヘッダ アクションの追加」を参照してください。
$outbound
の設定については、『Oracle Service Bus ユーザーズ ガイド』の「メッセージ コンテキスト」にある「inbound 変数と outbound 変数」を参照してください。
複数のドメインを使用する作業では、コンフィグレーションが次の要件に準拠していることを確認します。
ReplyTo
機能を使用するときに、重複した JMS サーバ名が問題になることがある。特定のドメインから送信された ReplyTo
メッセージは、元のメッセージを送信したドメインではなく、そのメッセージを受信した同じドメイン上の JMS サーバに返されます。
WebLogic JMS のコンフィグレーションと管理方法については、以下を参照してください。
WebLogic Server ドメインについては、『ドメインのコンフィグレーションについて』を参照してください。
Oracle Service Bus では、異種のエンドポイント間での相互運用性を確保するため、使用されるコンテンツ タイプ、JMS タイプ、およびエンコーディングをメッセージ フローのコンフィグレーション時にそれぞれ制御できます。JMS タイプは、バイトまたはテキストのいずれかです。詳細については、『Oracle Service Bus ユーザーズ ガイド』の「Oracle Service Bus でのメッセージ フローの作成」にある「コンテンツ タイプ、JMS タイプ、およびエンコーディング」を参照してください。
明示的にエラーを定義する 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
を受け取る可能性があります。
<definitions ... xmlns:s0="http://www.oracle.com/test/">
...
<types>
<xsd:schema targetNamespace="http://www.oracle.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 スタックが正しい例外をスローできるようになっている必要があります。エラーを Oracle Service Bus メッセージ フロー内部で作成する場合は、次の操作を行います。
$body
変数のノードを次の 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>
Oracle Service Bus Console での返信アクションのコンフィグレーションについては、『Oracle Service Bus Console の使い方』の「プロキシ サービス : アクション」を参照してください。
clientgen ツールは、JAX-RPC スタブなど、Web サービスを呼び出すために必要なクライアント側アーティファクトを生成するために使用します。『WebLogic Web サービス リファレンス ガイド』の「Ant タスク リファレンス」を参照してください。
Oracle Service Bus は、WebSphere MQ JMS インタフェースを介して WebSphere MQ に接続します。つまり、Oracle Service Bus は WebSphere MQ JMS クライアントです。
WebSphere MQ は、次の 2 通りの方法で Oracle Service Bus と対話できます。
詳細については、『MQ 転送ユーザーズ ガイド』の「WebSphere JMS MQ インタフェースの使用」を参照してください。
![]() ![]() ![]() |