| Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド 10g (10.1.3.1.0) B31889-01 |
|
![]() 戻る |
![]() 次へ |
この章では、外部サービスとしてOracle BPEL Process ManagerおよびOracle Enterprise Service Busと連携して動作する、Oracle Application Server Adapter for MQSeries(MQSeriesアダプタ)の使用方法を説明します。 この章には、次の項が含まれます。
メッセージ・キューイングは、非同期プログラム間通信のためのテクニックです。 分散システム上の独立したアプリケーションの相互通信を可能にすることによりアプリケーションを統合できます。 あるアプリケーションがキュー・マネージャ所有のキューにメッセージを送信し、別のアプリケーションがキューからメッセージを取り出します。 各アプリケーションが異なる時期に実行されていたり一時的に使用できなくなっても、アプリケーション間の通信は維持されます。
次のリストに、メッセージ・キューイングの基本的な概念を示します。
メッセージングは、2つのエンティティがメッセージを送受信して通信できるようにするメカニズムです。 メッセージングには、同期および非同期という2つのタイプがあります。 同期メッセージングでは、メッセージ送信者はメッセージをメッセージ・キューに置き、リプライを待機してから独自の処理を再開します。 非同期メッセージングでは、メッセージ送信者はリプライを待機せずに独自の処理を進めます。
メッセージは、あるプログラムから別のプログラム宛に送信される構造化データです。
メッセージ・キューは、アプリケーションでメッセージが格納されるオブジェクトです。 アプリケーションでは、メッセージをキューに蓄積し、キューからメッセージを取得できます。 キューはキュー・マネージャにより管理されます。
キュー・マネージャは、Application Program Interface(API)を介してアプリケーションにメッセージ・サービスとキューイング・サービスを提供します。 キューへのアクセスを提供するのみでなく、メッセージ・チャネルを介して別のキュー・マネージャにメッセージを転送します。
メッセージ・チャネルは、2つのキュー・マネージャ間の通信パスを提供します。 キュー・マネージャはメッセージ・チャネルで接続されます。 メッセージ・チャネルによるメッセージの転送送信方向は一方向のみです。
転送キューは、リモート・キュー・マネージャ宛のメッセージを一時的に格納するために使用されます。
メッセージがきわめて大きい場合は、セグメントと呼ばれる複数の小型メッセージに分割できます。 各セグメントにはグループIDとオフセットがあります。 メッセージのすべてのセグメントは、同じグループIDを持ちます。メッセージの最終セグメントはフラグでマークされます。
メッセージ・グループは、同じグループIDを持つ一連の関連メッセージで構成されます。メッセージ・グループ内の各メッセージには、メッセージ順序番号が付いています。 メッセージ・グループ内の最後のメッセージはフラグでマークされます。
クラスタは、論理的に関連付けられたキュー・マネージャのグループです。
図6-1に示すように、エンキューとはメッセージをキューに蓄積することで、デキューとはキューからメッセージを取得することです。
リクエスト/リプライ相互作用では、プログラムは別のプログラムにリプライを求めるメッセージを送信します。 リクエスト・メッセージには、リプライの送信先情報が含まれています。 受信側プログラムは、リクエスト・メッセージへのレスポンスとしてリプライ・メッセージを送信します。 図6-2にリクエスト/リプライ相互作用を示します。
Messaging and Queuing Series(MQSeries)は、IBM社が開発した製品および規格の集合です。 MQSeriesは、保証付きメッセージ配信、セキュリティおよび優先度ベースのメッセージングを提供するキューイング・インフラストラクチャとなります。
図6-3に、MQSeriesアプリケーションとMQSeriesサーバー間の通信プロセスを示します。 MQSeriesクライアントにより、アプリケーションからリモート・マシン上のキュー・マネージャに接続できます。
MQSeriesの各キューはキュー・マネージャに属しています。 キュー・マネージャには一意の名前があり、Message Queue Interface(MQI)チャネルを介してアプリケーションにメッセージ・サービスとキューイング・サービスを提供します。 また、キュー・マネージャは作成されたキューへのアクセスを提供し、メッセージ・チャネルを介してメッセージを他のキュー・マネージャに転送します。
MQSeriesでは、データはメッセージ形式で送信されます。 送信側アプリケーションではメッセージを作成し、APIコールを使用してキューに送信します。 メッセージは、受信側アプリケーションの受信準備ができるまでキューに保持されます。 受信側アプリケーションでは、APIコールを使用してキューからメッセージを取得します。
メッセージをリモート・キューに送信する場合は、リモート・キュー定義をローカルに定義する必要があります。 リモート・キュー定義は、宛先キュー名と転送キュー名で構成されます。
図6-4に、MQSeriesメッセージのメッセージ構造を示します。
MQSeriesメッセージは、図6-4に示すパートで構成されます。
Oracle BPEL Process ManagerとOracle Enterprise Service Busには、MQSeriesアダプタが組み込まれています。 MQSeriesアダプタにより、アプリケーションはMQSeriesキュー・マネージャに接続し、MQSeriesメッセージをキューに蓄積したりキューから削除できます。
この項には、次の項目が含まれます。
MQSeriesアダプタは、すべてのネイティブMQSeries機能を提供します。 Oracle Application Server Adapter for Java Message Service(JMSアダプタ)をMQSeriesプロバイダとともに構成することはできますが、提供されるのはMQSeriesで提供されるJMS機能のみで、ネイティブMQSeries機能は提供されません。 次のリストに、JMS Adapter for MQSeriesを上回るMQSeriesアダプタのメリットを示します。
MQSeriesアダプタは、肯定アクション通知(PAN)および否定アクション通知(NAN)をサポートしています。
MQSeriesアダプタは、送信時の確認、着信時の確認、例外レポートおよび有効期限レポートなどのレポート・メッセージをサポートしています。
MQSeriesアダプタは、不要なメッセージや破損したメッセージのデッドレター・キューへの送信をサポートしています。
MQSeriesアダプタには、グループに属するメッセージのフィルタリングなど、高度なフィルタ・オプションが用意されています。
MQSeriesアダプタは高速で、使用が容易です。
MQSeriesアダプタは、自動的にOracle BPEL Process Managerと統合されます。 Oracle JDeveloperでパートナ・リンクまたはMQアダプタ・サービスを作成する際に、「アダプタ構成ウィザード」が起動します。
このウィザードを使用すると、図1-3に示すように、MQSeriesアダプタや、その他のOracleASアダプタを選択および構成できます。アダプタ構成ウィザードでは、図1-4に示すように、サービス名の入力を求められます。 構成が完了すると、Oracle JDeveloperの「アプリケーション・ナビゲータ」セクションに同じ名前のWSDLファイルが作成されます。このWSDLファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。
「アダプタ構成ウィザード」の「操作」ウィンドウで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のウィンドウが表示され、構成情報の入力を求められます。
表6-1に実行可能な操作をリスト表示し、これらの操作に関する情報が説明されている項を示します。
表6-1 Oracle BPEL Process Managerについてサポートされている操作
MQSeriesアダプタは、自動的にOracle Enterprise Service Busと統合されます。JDeveloper ESB DesignerでMQアダプタ・サービスを作成すると、図1-2に示すように「アダプタ構成ウィザード」が起動します。
このウィザードでMQSeriesアダプタを選択して構成できます。 構成が完了すると、Oracle JDeveloperの「アプリケーション・ナビゲータ」セクションに同じ名前のWSDLファイルが作成されます。このWSDLファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。
「アダプタ構成ウィザード」の「操作」ウィンドウで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のウィンドウが表示され、構成情報の入力を求められます。 表6-2に実行可能な操作をリスト表示し、指定する必要のある構成情報が説明されている項を示します。
表6-2 Oracle Enterprise Service Busについてサポートされている操作
| 操作 | 参照先 |
|---|---|
|
メッセージのエンキュー |
|
|
メッセージのデキュー |
|
|
リクエスト-レスポンス |
第6.3.1.6項「同期リクエスト-レスポンス(Oracle Enterprise Service Busがサーバーの場合) |
この項では、MQSeriesアダプタの次の概念について説明します。
MQSeriesアダプタは、次のメッセージング・シナリオをサポートしています。
|
注意: MQSeriesアダプタは、XAトランザクションをサポートしていません。 |
このシナリオでは、MQSeriesアダプタはキュー・マネージャにより管理されている特定のキューに接続してメッセージを書き込みます。 Oracle BPEL Process ManagerまたはOracle Enterprise Service Busから送信されるアウトバウンド・メッセージの場合、MQSeriesアダプタでは次の操作が実行されます。
Oracle BPEL Process ManagerまたはOracle Enterprise Service Busからのメッセージが受信されます。
設計時の指定に従ってXMLコンテンツがフォーマットされます。
メッセージのプロパティ(優先度、有効期限、メッセージ・タイプおよび永続性など)が設定されます。 これらのプロパティは、「アダプタ構成ウィザード」で選択した内容に基づきます。
メッセージ・プロパティの詳細は、第6.3.2.1項「メッセージ・タイプ」を参照してください。
設計時に「アダプタ構成ウィザード」で指定したキューにメッセージが送信されます。
図6-5に、「アダプタ構成ウィザード」ウィンドウで選択する必要のある操作タイプを示します。
図6-6に、「MQにメッセージを蓄積」操作タイプを選択した後に表示されるウィンドウを示します。
このウィンドウで次のプロパティを指定できます。
キュー名: MQSeriesアダプタがメッセージをエンキューするキューの名前。 これは必須フィールドです。
キュー・マネージャ(オプション): キューが属しているキュー・マネージャの名前。 このフィールドはオプションで、メッセージをリモート・キューにエンキューする場合に使用する必要があります。
メッセージの書式: メッセージのフォーマット。
|
注意: メッセージをエンキューする場合は、特定のフォーマットに必要な各種の必須値を正しく指定していることを確認してください。 |
優先度: 0(最低)から9(最高)までのメッセージの優先度。
永続性: メッセージの永続性。 メッセージの永続性を、宛先キューで定義されているデフォルトの優先度属性から取得するように指定することも可能です。
有効期限: メッセージの有効期限。 有効期限が経過したメッセージは破棄されます。
これらのプロパティの詳細は、第6.3.2項「メッセージ・プロパティ」を参照してください。
次に表示される「アダプタ構成ウィザード」のウィンドウは、図6-7の「メッセージ」ウィンドウです。 このウィンドウでは、トランスレーション用のXMLスキーマ定義(XSD)ファイルを選択できます。
ネイティブ・フォーマット・トランスレーションが不要な場合(JPGまたはGIF画像を処理中の場合など)は、「ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする)」チェック・ボックスを選択します。ファイルはBase64エンコーディングで渡されます。
トランスレーションにはXSDファイルが必要です。 新しいスキーマの定義、または既存のデータ型定義(DTD)やCOBOLコピーブックの変換を行う場合は、「ネイティブ・フォーマットのスキーマの定義」を選択します。これにより、ネイティブ・フォーマット・ビルダー・ウィザードが起動されます。 このウィザードは、カンマ区切り値(CSV)、固定長、DTDおよびCOBOLコピーブックなどのファイル・フォーマットを使用したネイティブ・スキーマ・ファイルの作成を支援します。 ネイティブ・スキーマ・ファイルの作成後、「スキーマ・ファイルのURL」および「スキーマ要素」フィールドが入力された「メッセージ」ウィンドウが表示されます。詳細は、第7.1項「ネイティブ・フォーマット・ビルダー・ウィザードを使用したネイティブ・スキーマ・ファイルの作成」を参照してください。
このシナリオでは、MQSeriesアダプタはキュー・マネージャにより管理されている特定のキューに接続し、そのキューからメッセージを削除します。 Oracle BPEL Process ManagerまたはOracle Enterprise Service Busに送信されるインバウンド・メッセージの場合、MQSeriesアダプタでは次の操作が実行されます。
設計時に指定したキューに接続されます。
メッセージの着信時にキューからメッセージがデキューされます。
設計時に定義したトランスレーション・ロジックに基づいて、メッセージが読み取られて変換されます。
メッセージがXMLメッセージとしてOracle BPEL Process ManagerまたはOracle Enterprise Service Busにパブリッシュされます。
図6-8に、「アダプタ構成ウィザード」で選択する必要のある操作タイプを示します。
図6-6に、「MQからメッセージを取得」操作タイプを選択した後に表示されるウィンドウを示します。
このウィンドウで次のプロパティを指定できます。
キュー名: MQSeriesアダプタがメッセージをデキューするキューの名前。 これは必須フィールドです。
キュー・マネージャ(オプション): キューが属しているキュー・マネージャの名前。このフィールドはオプションです。
次に表示される「アダプタ構成ウィザード」のウィンドウは、図6-7の「メッセージ」ウィンドウです。このウィンドウでは、トランスレーション用のXSDスキーマ・ファイルを選択できます。
メッセージ発行操作のスキーマの指定と同様に、このウィンドウでは次のタスクを実行できます。
ネイティブ・フォーマット・トランスレーションの要不要の指定
トランスレーション用のXSDスキーマ・ファイルの選択
CSV、固定長、DTDおよびCOBOLコピーブックなどのファイル形式からXSDファイルの作成が可能なネイティブ・フォーマット・ビルダー・ウィザードの起動
「メッセージ」ウィンドウの詳細は、第6.3.1.1項「メッセージのエンキュー」を参照してください。
このシナリオでは、Oracle BPEL Process Managerがリクエスト・メッセージを送信し、非開始のreceiveアクティビティを使用して対応するレスポンスを受信します。 invokeアクティビティによりアダプタのアウトバウンド起動が開始され、リクエストが送信されます。 MQSeriesアダプタにより次の操作が実行されます。
Oracle BPEL Process Managerからのメッセージが受信されます。
設計時に「アダプタ構成ウィザード」で指定したXMLコンテンツがフォーマットされます。
リクエスト・メッセージのプロパティと相関スキームが設定されます。
設計時に指定したキューにメッセージが送信されます。 サード・パーティ・アプリケーションはメッセージを受信して処理し、レスポンスを生成してから、リクエスト・メッセージで指定されたreplyToキューにレスポンス・メッセージをエンキューします。 レスポンス・メッセージの相関IDとメッセージIDは、リクエスト・メッセージで指定された相関スキームに基づいて生成されます。
MQSeriesアダプタにより、キューからメッセージがデキューされます。
レスポンスがBPELプロセスの非開始のreceiveアクティビティに送信されます。 レスポンスが正しいBPELインスタンスに確実に送信されるように、相関スキームが使用されます。
図6-10に、このシナリオのサンプルBPELプロセスを示します。
図6-10 クライアントとしてのOracle BPEL Process Managerのサンプル

図6-11に、「アダプタ構成ウィザード」で選択する必要のある操作タイプを示します。
図6-12に、「MQにメッセージを送信し、リプライ/レポートを取得」操作タイプを選択した後に表示されるウィンドウを示します。
このウィンドウで次のプロパティを指定できます。
メッセージ・タイプ: メッセージのタイプ。 通常メッセージまたはリクエスト・メッセージを送信できます。
レポートの取得: なんらかのレポートが必要な場合は、このオプションを選択します。 レポートのタイプは、図6-13に示す次のウィンドウで指定できます。
キュー名: MQSeriesアダプタがメッセージをエンキューするキューの名前。 これは必須フィールドです。
キュー・マネージャ(オプション): キューが属しているキュー・マネージャの名前。このフィールドはオプションです。
メッセージの書式: メッセージのフォーマット。
優先度: 0(最低)から9(最高)までのメッセージの優先度。
永続性: メッセージの永続性。
有効期限: メッセージの有効期限。 有効期限が経過したメッセージは破棄されます。
これらのプロパティの詳細は、第6.3.2項「メッセージ・プロパティ」および第6.3.5項「レポート・メッセージ」を参照してください。
「MQにメッセージを送信し、リプライ/レポートを取得」ウィンドウで「次へ」をクリックすると、「レポート」ウィンドウ(図6-13)または「レスポンス」ウィンドウ(図6-13)が表示されます。
図6-13に示す「レポート」ウィンドウが表示されるのは、図6-12に示した「MQにメッセージを送信し、リプライ/レポートを取得」ウィンドウで「レポートの取得」オプションを選択した場合のみです。
このウィンドウで次のレポート・タイプを選択できます。
着信時の確認
送信時の確認
例外レポート
有効期限レポート
これらのレポート・タイプの詳細は、第6.3.5項「レポート・メッセージ」を参照してください。
「レポート」ウィンドウで「次へ」をクリックすると、図6-14に示す「レスポンス」ウィンドウが表示されます。
「レスポンス」ウィンドウで次のプロパティを指定できます。
キュー名: レスポンスの送信先キューの名前。 これは必須フィールドです。
キュー・マネージャ(オプション): キューが属しているキュー・マネージャの名前。このフィールドはオプションです。
相関スキーム: MQSeriesアダプタが使用する必要のある相関スキーム。 相関スキームの詳細は、第6.3.3項「相関スキーム」を参照してください。
「レスポンス」ウィンドウで「次へ」をクリックすると、図6-15に示す「メッセージ」ウィンドウが表示されます。 このウィンドウでは、レスポンス・メッセージとリクエスト・メッセージのトランスレーションに使用するXSDスキーマ・ファイルを選択できます。
このウィンドウで次のタスクを実行できます。
ネイティブ・フォーマット・トランスレーションの要不要の指定
トランスレーション用のXSDスキーマ・ファイルの選択
CSV、固定長、DTDおよびCOBOLコピーブックなどのファイル形式からXSDファイルの作成が可能なネイティブ・フォーマット・ビルダー・ウィザードの起動
「メッセージ」ウィンドウの詳細は、第6.3.1.1項「メッセージのエンキュー」を参照してください。
このシナリオでは、Oracle BPEL Process Managerがリクエストを受信して処理し、replyアクティビティを使用してレスポンスを同期的に送信します。 MQSeriesアダプタにより次の操作が実行されます。
メッセージの着信時にキューからリクエスト・メッセージがデキューされます。
設計時に定義したトランスレーション・ロジックに基づいて、メッセージが読み取られて変換されます。
メッセージがXMLメッセージとしてOracle BPEL Process Managerにパブリッシュされます。 Oracle BPEL Process Managerでは、リクエストが処理されてレスポンスがMQSeriesアダプタに送信されます。
Oracle BPEL Process Managerからのレスポンス・メッセージが受信されます。
設計時の指定に従ってXMLコンテンツがフォーマットされます。
メッセージのプロパティ(優先度、有効期限、メッセージ・タイプおよび永続性など)が設定されます。 これらのプロパティは、「アダプタ構成ウィザード」で選択した内容に基づきます。
設計時に「アダプタ構成ウィザード」で指定したキューにメッセージが送信されます。
図6-16に、このシナリオのサンプルBPELプロセスを示します。
図6-16 同期リクエスト-レスポンスのサンプル(Oracle BPEL Process Managerがサーバーの場合)

図6-17に、「アダプタ構成ウィザード」で選択する必要のある操作タイプを示します。
図6-18に、「MQからメッセージを取得し、リプライ/レポートを送信」操作タイプを選択した後に表示されるウィンドウを示します。 このウィンドウでは、MQSeriesアダプタによりメッセージがデキューされるキューの名前を指定します。
「MQからメッセージを取得し、リプライ/レポートを送信」ウィンドウで「次へ」をクリックすると、図6-19に示す「レスポンス」ウィンドウが表示されます。
「レスポンス」ウィンドウで次のプロパティを指定できます。
レスポンス・フォールバック・キュー名: 通常メッセージに対するレスポンスの送信先キュー。
|
注意: レスポンス・フォールバック・キューには、キュー・マネージャのプライマリ・キューを指定する必要があります。 |
レスポンス・フォールバック・キュー・マネージャ: レスポンス・フォールバック・キューが属しているキュー・マネージャの名前。
優先度: メッセージの優先度。
永続性: メッセージの永続性。
有効期限: メッセージの有効期限。
これらのプロパティの詳細は、第6.3.2項「メッセージ・プロパティ」を参照してください。
「レスポンス」ウィンドウで「次へ」をクリックすると、図6-15に示す「メッセージ」ウィンドウが表示されます。 このウィンドウで次のタスクを実行できます。
ネイティブ・フォーマット・トランスレーションの要不要の指定
トランスレーション用のXSDスキーマ・ファイルの選択
CSV、固定長、DTDおよびCOBOLコピーブックなどのファイル形式からXSDファイルの作成が可能なネイティブ・フォーマット・ビルダー・ウィザードの起動
「メッセージ」ウィンドウの詳細は、第6.3.1.1項「メッセージのエンキュー」を参照してください。
Oracle BPEL Process Managerがリクエスト-レスポンス相互作用を開始すると、BPELプロセスはリクエストをインバウンド・メッセージとして受信し、処理してからinvokeアクティビティを介してレスポンスを送信します。 非同期リクエスト-リプライのシナリオでは、MQSeriesアダプタにより次の操作が実行されます。
メッセージの着信時にキューからメッセージがデキューされます。
設計時に定義したトランスレーション・ロジックに基づいて、メッセージが読み取られて変換されます。
メッセージがXMLメッセージとしてOracle BPEL Process Managerにパブリッシュされます。 Oracle BPEL Process Managerでは、リクエストが処理されてレスポンスがMQSeriesアダプタに送信されます。
Oracle BPEL Process Managerからのメッセージが受信されます。
設計時の指定に従ってXMLコンテンツがフォーマットされます。
メッセージのプロパティ(優先度、有効期限、メッセージ・タイプおよび永続性など)が設定されます。 これらのプロパティは、「アダプタ構成ウィザード」で選択した内容に基づきます。
設計時に「アダプタ構成ウィザード」で指定したキューにメッセージが送信されます。
図6-20に、このシナリオのサンプルBPELプロセスを示します。
図6-20 非同期リクエスト-レスポンスのサンプル(Oracle BPEL Process Managerがサーバーの場合)

図6-21に、「アダプタ構成ウィザード」で選択する必要のある操作タイプを示します。
図6-18に、「MQからメッセージを取得し、リプライ/レポートを送信」操作タイプを選択した後に表示されるウィンドウを示します。 このウィンドウでは、MQSeriesアダプタによりメッセージがデキューされるキューの名前を指定します。
「MQからメッセージを取得し、リプライ/レポートを送信」ウィンドウで「次へ」をクリックすると、図6-19に示す「レスポンス」ウィンドウが表示されます。
「レスポンス」ウィンドウで次のプロパティを指定できます。
レスポンス・フォールバック・キュー名: リクエスト・メッセージでreplyToキューが指定されていない場合のリプライの送信先キュー。
レスポンス・フォールバック・キュー・マネージャ: レスポンス・フォールバック・キューが属しているキュー・マネージャの名前。
優先度: メッセージの優先度。
永続性: メッセージの永続性。
有効期限: メッセージの有効期限。
これらのプロパティの詳細は、第6.3.2項「メッセージ・プロパティ」を参照してください。
「レスポンス」ウィンドウで「次へ」をクリックすると、図6-15に示す「メッセージ」ウィンドウが表示されます。 このウィンドウで次のタスクを実行できます。
ネイティブ・フォーマット・トランスレーションの要不要の指定
トランスレーション用のXSDスキーマ・ファイルの選択
CSV、固定長、DTDおよびCOBOLコピーブックなどのファイル形式からXSDファイルの作成が可能なネイティブ・フォーマット・ビルダー・ウィザードの起動
「メッセージ」ウィンドウの詳細は、第6.3.1.1項「メッセージのエンキュー」を参照してください。
非同期リクエスト-リプライ相互作用では、インバウンド・メッセージ・ヘッダーからアウトバウンド・メッセージ・ヘッダーに次のプロパティをマップする必要があります。
MsgID
CorrelID
CorrelationScheme
ReplyToQ
これらのプロパティはassignアクティビティを使用してマップできます。
このシナリオでは、Oracle Enterprise Service Busがリクエストを受信して処理し、レスポンスを同期的に送信します。 MQSeriesアダプタにより次の操作が実行されます。
メッセージの着信時にキューからリクエスト・メッセージがデキューされます。
設計時に定義したトランスレーション・ロジックに基づいて、メッセージが読み取られて変換されます。
メッセージがXMLメッセージとしてOracle Enterprise Service Busにパブリッシュされます。Oracle Enterprise Service Busはリクエストを処理し、MQSeriesアダプタにレスポンスを送信します。
Oracle Enterprise Service Busからのレスポンス・メッセージが受信されます。
設計時の指定に従ってXMLコンテンツがフォーマットされます。
メッセージのプロパティ(優先度、有効期限、メッセージ・タイプおよび永続性など)が設定されます。 これらのプロパティは、「アダプタ構成ウィザード」で選択した内容に基づきます。
設計時に「アダプタ構成ウィザード」で指定したキューにメッセージが送信されます。
図6-22に、「アダプタ構成ウィザード」で選択する必要のある操作タイプを示します。
図6-22 サーバーとしてのOracle Enterprise Service Bus: 同期リクエスト-レスポンス相互作用

これ以降のウィンドウは、すべて第6.3.1.4項「同期リクエスト-レスポンス(Oracle BPEL Process Managerがサーバーの場合)で説明したウィンドウと同様です。
MQSeriesアダプタは、次のメッセージ・プロパティをサポートしています。
MQSeriesアダプタは、次の4タイプのメッセージをサポートしています。
通常メッセージは、あるプログラムから別のプログラムに送信されますが、レスポンスは期待されません。
リクエスト・メッセージは、あるプログラムから別のプログラムに送信され、レスポンスが必要です。
リプライ・メッセージは、リクエスト・メッセージに対するレスポンスとしてプログラムにより送信されます。
レポート・メッセージは、受信側プログラムから送信側プログラムに、メッセージ配信の成功または失敗の確認として送信されます。 レポート・メッセージはすべてのメッセージ・タイプ(通常メッセージ、リクエスト・メッセージまたはリプライ・メッセージ)について生成できます。
MQSeriesアダプタでサポートされている確認メッセージの詳細は、第6.3.5項「レポート・メッセージ」を参照してください。
図6-6のように、「アダプタ構成ウィザード」を介して送信メッセージのフォーマットを指定できます。 次のメッセージ・フォーマットがサポートされています。
フォーマット名なし(デフォルト)
コマンド・サーバー・リクエスト/リプライ・メッセージ
タイプ1コマンド・リプライ・メッセージ
タイプ2コマンド・リプライ・メッセージ
デッドレター・ヘッダー
イベント・メッセージ
プログラム可能なコマンド・フォーマットによるユーザー定義メッセージ
文字のみで構成されるメッセージ
トリガー・メッセージ
転送キュー・ヘッダー
図6-6のように、「アダプタ構成ウィザード」を介して送信メッセージの有効期限を指定できます。 メッセージの有効期限後は、キュー・マネージャによりメッセージが破棄されます。
メッセージに有効期限通知が設定されている場合は、メッセージが破棄されるときに通知が生成されます。 この通知は、replyToQueueパラメータで指定されたキューに送信されます。 デフォルトでは、expiryフィールドにNEVERが設定されます。
図6-6のように、「アダプタ構成ウィザード」を介して送信メッセージの優先度を指定できます。 優先度の範囲は0(最低)から9(最高)までです。 また、メッセージの優先度を、宛先キューで定義されているデフォルトの優先度属性から取得するように指定することも可能です。 デフォルトでは、メッセージ優先度としてAS_Q_DEFが設定されます。
図6-6のように、「アダプタ構成ウィザード」を介して送信メッセージの永続性を指定できます。 メッセージの永続性が設定されていない場合は、キュー・マネージャの再起動時またはシステム障害の発生時にメッセージが消失します。 メッセージの永続性をtrueに設定すると、システム障害が発生したりキュー・マネージャが再起動してもメッセージは消失しません。 メッセージの永続性を、宛先キューで定義されているデフォルトの優先度属性から取得するように指定することも可能です。 永続メッセージは、ログ・ファイルとキュー・データ・ファイルに書き込まれます。 障害後にキュー・マネージャが再起動すると、これらの永続メッセージが各ファイルからリカバリされます。
|
注意: 前述のメッセージ・プロパティはすべて、実行時にメッセージ・ヘッダーを介して指定できます。 これらのプロパティにはassignアクティビティを使用して値を割り当てることができます。 |
リクエスト-リプライ相互作用でリクエストにレスポンスをマッピングするには、相関付けが必要です。 各MQSeriesリクエスト・メッセージには、メッセージIDと相関IDが含まれています。アプリケーションは、Oracle BPEL Process Managerからリクエスト・メッセージを受信すると、レスポンス・メッセージに対して定義されている相関スキームをチェックします。 アプリケーションでは、相関スキームに基づいてレスポンス・メッセージのメッセージIDと相関IDが生成されます。
図6-23に示す「アダプタ構成ウィザード」の「レスポンス」ウィンドウでは、レスポンス・メッセージの相関スキームを指定できます。
図6-23に示す「メッセージID」ボックスには、レスポンス・メッセージのメッセージIDについて次のオプションが用意されています。
レスポンス・メッセージの新規メッセージIDの生成
リクエスト・メッセージのメッセージIDを使用
同様に、図6-23に示す「相関ID」ボックスには、レスポンス・メッセージの相関IDについて次のオプションが用意されています。
リクエスト・メッセージのメッセージIDを使用
リクエスト・メッセージの相関IDを使用
MQSeriesアダプタでは、メッセージを複数のキューにエンキューできます。 これはアダプタWSDLファイルのDistributionListパラメータを使用して指定できます。次に例を示します。
DistributionList="Queue1Name,QueueManger1Name; Queue2Name,QueueManger2Name"
キュー名とキュー・マネージャ名の値ペアをセミコロン(;)で区切る必要があります。 キュー・マネージャ名はオプションです。
MQSeriesアダプタでは、送信メッセージに各種の確認メッセージを設定できます。 これらの確認メッセージはレポート・メッセージと呼ばれます。 レポート・メッセージが生成されるのは、その生成基準が満たされる場合のみです。 メッセージをキューにエンキューするときに、複数タイプのレポート・メッセージをリクエストできます。 レポート・メッセージをリクエストする場合は、レポート・メッセージの送信先となるキュー名を指定する必要があります。 このキューはreplyToキューと呼ばれます。 レポート・メッセージは、キュー・マネージャ、メッセージ・チャネルまたはアプリケーションで生成できます。
MQSeriesアダプタは、次のメッセージ・レポートをサポートしています。
「着信時の確認」(COA)メッセージは、メッセージがターゲット・キュー・マネージャに送信されたことを示します。 COAメッセージはキュー・マネージャにより生成されます。 このメッセージ・レポートは、図6-13に示した「アダプタ構成ウィザード」ウィンドウの「レポート」ウィンドウで選択できます。
「送信時の確認」(COD)メッセージは、メッセージが受信側アプリケーションにより受信されたことを示します。 CODメッセージはキュー・マネージャにより生成されます。 このメッセージ・レポートは、図6-13に示した「レポート」ウィンドウで選択できます。
例外レポートが生成されるのは、メッセージを指定の宛先キューに送信できない場合です。 例外レポートは、メッセージ・チャネルにより生成されます。 このメッセージ・レポートは、図6-13に示した「アダプタ構成ウィザード」ウィンドウの「レポート」ウィンドウで選択できます。
有効期限レポートは、メッセージが送信可能になる前に指定の有効期限が経過したために、メッセージが破棄されたことを示します。 有効期限レポートは、キュー・マネージャにより生成されます。 このメッセージ・レポートは、図6-13に示した「アダプタ構成ウィザード」ウィンドウの「レポート」ウィンドウで選択できます。
肯定アクション通知(PAN)は、リクエストが正常に処理されたことを示します。 つまり、メッセージでリクエストされたアクションが正常に実行されたことを意味します。 このタイプのレポートは、アプリケーションにより生成されます。
否定アクション通知(NAN)は、リクエストが正常に処理されなかったことを示します。 つまり、メッセージでリクエストされたアクションが正常に実行されなかったことを意味します。 このタイプのレポートは、アプリケーションにより生成されます。
PANとNANを除き、前述のすべてのレポート・メッセージについて、オリジナル・メッセージの全体または一部を含めるか、まったく含めないかを指定できます。 「アダプタ構成ウィザード」で次のオプションから1つ選択できます。
オリジナル・メッセージのデータなし
オリジナル・メッセージの最初の100バイトのデータ
オリジナル・メッセージ全体
MQSeriesアダプタでは、インバウンド相互作用中にメッセージを優先度でフィルタできます。 FilterByPriorityパラメータで優先度を指定すると、MQSeriesアダプタではFilterByPriorityパラメータで指定したのと同じ優先度を持つメッセージの有無がキュー内でチェックされます。 次の例に、FilterByPriorityパラメータの設定方法を示します。
FilterByPriority= "2"
MQSeriesアダプタでは、メッセージを宛先キューに配信できなかった場合に実行するアクションを指定できます。 次のいずれかのアクションを指定できます。
メッセージをデッドレター・キューに蓄積
これはデフォルト・アクションです。 宛先キューに配信できなかったメッセージはデッドレター・キューに蓄積されます。 送信者からリクエストされた場合は、レポート・メッセージが生成されます。 次の例に示すように、アダプタWSDLファイルでOnDeliverFailureパラメータの値としてDeadLetterQueueを指定します。
OnDeliverFailure="DeadLetterQueue"
メッセージの破棄
これは、宛先キューに配信できないメッセージを破棄する必要があることを示します。 送信者からリクエストされた場合は、レポート・メッセージが生成されます。 次の例に示すように、アダプタWSDLファイルでOnDeliverFailureパラメータの値としてDiscardを指定します。
OnDeliverFailure="Discard"
MQSeriesアダプタでは、インバウンド相互作用とアウトバウンド相互作用の両方でメッセージのセグメンテーションがサポートされています。 セグメンテーションが必要になるのは、メッセージ・サイズがキュー・マネージャに指定されたメッセージ・サイズよりも大きい場合です。 物理メッセージは2つ以上の論理メッセージに分割されます。 すべての論理メッセージには、同じグループIDと順序番号およびオフセットが付きます。
インバウンド相互作用の場合、セグメンテーションは本来MQSeriesアダプタでサポートされています。 MQSeriesアダプタでは、すべての論理メッセージが順序番号順にデキューされてから、単一メッセージがXMLとしてOracle BPEL Process ManagerまたはOracle Enterprise Service Busにパブリッシュされます。
アウトバウンド相互作用の場合は、必要に応じてSegmentIfRequiredパラメータを設定して送信メッセージをセグメント化できます。次に例を示します。
SegmentIfRequired="true"
メッセージは、サイズがキューに設定された上限を超える場合などの制約に基づいてセグメント化されます。
MQSeriesアダプタでは、インバウンド相互作用とアウトバウンド相互作用の両方でメッセージのグループ化がサポートされています。 グループに属するメッセージは、完全なメッセージでも物理メッセージの論理セグメントでもかまいません。
インバウンド相互作用の場合、グループ化は本来MQSeriesアダプタでサポートされています。 MQSeriesアダプタでは、同じグループに属しているまたは同じグループIDを持つメッセージがすべて順序番号順にデキューされ、単一メッセージがXMLとしてOracle BPEL Process ManagerまたはOracle Enterprise Service Busにパブリッシュされます。
|
注意: インバウンド・メッセージが不透明(Opaque)スキーマを持つ場合、メッセージのグループ化はサポートされません。 |
アウトバウンド相互作用の場合、グループ化はヘッダーを介してサポートされます。 すべてのメッセージについて同じグループIDを生成し、順序番号も指定する必要があります。 グループ内のメッセージは、last-msg-in-groupフラグでマークする必要があります。 Oracle BPEL Process Managerでは、assignアクティビティを使用してこれらのプロパティを設定できます。 たとえば、同じグループの一部として3件のメッセージを送信するとします。
第1メッセージについて、assignアクティビティを介して次のプロパティを設定します。
IsMsgInGroup: このプロパティをtrueに設定する必要があります。
GroupId: グループIDは、キュー・マネージャに生成させるか、独自に指定できます。キュー・マネージャにグループIDを生成させる場合は、GroupIdをGENERATE_GROUP_IDとして設定します。
MsgSeqNumber: このプロパティを1に設定する必要があります。
IsLastMsgInGroup: このプロパティをfalseに設定する必要があります。
図6-24にassignアクティビティのダイアログ・ボックスを示します。
第2メッセージの場合は、図6-25に示すように、最初に第1メッセージのGroupIdを、メッセージ・ヘッダーから第2のメッセージ・ヘッダーにコピーします。
次に、assignアクティビティを介して次のプロパティを設定します。
IsMsgInGroup: このプロパティをtrueに設定する必要があります。
MsgSeqNumber: このプロパティを2に設定する必要があります。
IsLastMsgInGroup: このプロパティをfalseに設定する必要があります。
最後のメッセージの場合も、第1および第2メッセージと同様にGroupidを割り当ててから、次のプロパティを指定する必要があります。
IsMsgInGroup: このプロパティをtrueに設定する必要があります。
MsgSeqNumber: このプロパティを3に設定する必要があります。
IsLastMsgInGroup: このプロパティをtrueに設定する必要があります。
MQSeriesアダプタは、CICSサーバーからのメッセージの送受信をサポートします。 インバウンド方向では、CICSサーバーからのインバウンド・メッセージは通常メッセージと同様にデキューされます。 アウトバウンド方向では、メッセージにCICSフォーマットを使用する必要があります。 次の例に、アウトバウンドCICSメッセージ・フォーマットのサンプル・スキーマ・ファイルを示します。
<?xml version="1.0" ?><schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/cics_mqcih"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
nxsd:version="NXSD"
nxsd:encoding="UTF8"
nxsd:stream="bytes"
nxsd:byteOrder="bigEndian"
xmlns:nxsd_extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions"
<element name="MSGForMQCICSBridge">
<complexType>
<sequence>
<element name="MQCIH">
<complexType>
<sequence>
<!--
MQCHAR4 StrucId;
Structure identifier
-->
<element name="StrucId" type="string"
nxsd:style="fixedLength" nxsd:length="4" nxsd:padStyle="tail"/>
<!--
MQLONG Version;
Structure version number 1 or 2
-->
<element name="Version" type="string"
nxsd:style="integer" nxsd_extn:octet="4"
nxsd_extn:align="0" nxsd_extn:sign="unticked" />
<!--
MQLONG StrucLength;
Length of MQCIH structure V1=164 V2=180
-->
<element name="StrucLength" type="string"
nxsd:style="integer" nxsd_extn:octet="4"
nxsd_extn:align="0" nxsd_extn:sign="unticked" />
<!--
MQLONG Encoding;
Reserved
-->
<element name="Encoding" type="string"
nxsd:style="integer" nxsd_extn:octet="4"
nxsd_extn:align="0" nxsd_extn:sign="unticked" />
<!--
MQLONG CodedCharSetId;
Reserved -->
<element name="CodedCharSetId" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQCHAR8 Format;
MQ Format name
-->
<element name="Format" type="string"
nxsd:style="fixedLength" nxsd:length="8" />
<!--
MQLONG Flags;
Reserved
-->
<element name="Flags" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG ReturnCode;
Return code from bridge
-->
<element name="ReturnCode" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG CompCode;
MQ completion code or CICS EIBRESP
-->
<element name="CompCode" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG Reason;
MQ reason or feedback code, or CICS EIBRESP2
-->
<element name="Reason" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG UOWControl;
Unit-of-work control
-->
<element name="UOWControl" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG GetWaitInterval;
Wait interval for MQGET call issued by bridge
-->
<element name="GetWaitInterval" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="ticked" />
<!--
MQLONG LinkType;
Link type
-->
<element name="LinkType" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG OutputDataLength;
Output commarea data length
-->
<element name="OutputDataLength" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="ticked" />
<!--
MQLONG FacilityKeepTime;
Bridge facility release time
-->
<element name="FacilityKeepTime" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG ADSDescriptor;
Send/receive ADS descriptor
-->
<element name="ADSDescriptor" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG ConversationalTask;
Whether task can be conversational
-->
<element name="ConversationalTask" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG TaskEndStatus;
Status at end of task
-->
<element name="TaskEndStatus" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQBYTE Facility[8];
BVT token value. Initialise as required.
-->
<element name="Facility" type="string"
nxsd:style="integer" nxsd_extn:octet="8" nxsd_extn:align="0"
nxsd _extn:sign="unticked" />
<!--
MQCHAR4 Function;
MQ call name or CICS EIBFN function name
-->
<element name="Function" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 AbendCode;
Abend code
-->
<element name="AbendCode" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR8 Authenticator;
Password or passticket
-->
<element name="Authenticator" type="string"
nxsd:style="fixedLength" nxsd:length="8" />
<!--
MQCHAR8 Reserved1;
Reserved
-->
<element name="Reserved1" type="string"
nxsd:style="fixedLength" nxsd:length="8" />
<!--
MQCHAR8 ReplyToFormat;
MQ format name of reply message
-->
<element name="ReplyToFormat" type="string"
nxsd:style="fixedLength" nxsd:length="8" />
<!--
MQCHAR4 RemoteSysId;
Remote sysid to use
-->
<element name="RemoteSysId" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 RemoteTransId;
Remote transid to attach
-->
<element name="RemoteTransId" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 TransactionId;
Transaction to attach
-->
<element name="TransactionId" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 FacilityLike;
Terminal emulated attributes
-->
<element name="FacilityLike" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 AttentionId;
AID key
-->
<element name="AttentionId" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 StartCode;
Transaction start code
-->
<element name="StartCode" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 CancelCode;
Abend transaction code
-->
<element name="CancelCode" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR4 NextTransactionId;
Next transaction to attach
-->
<element name="NextTransactionId" type="string"
nxsd:style="fixedLength" nxsd:length="4" />
<!--
MQCHAR8 Reserved2;
Reserved
-->
<element name="Reserved2" type="string"
nxsd:style="fixedLength" nxsd:length="8" />
<!--
MQCHAR8 Reserved3;
Reserved
-->
<element name="Reserved3" type="string"
nxsd:style="fixedLength" nxsd:length="8" />
<!--
MQLONG CursorPosition;
Cursor position
-->
<element name="CursorPosition" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG ErrorOffset;
Error offset
-->
<element name="ErrorOffset" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG InputItem;
Input item
-->
<element name="InputItem" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
<!--
MQLONG Reserved4;
Reserved
-->
<element name="Reserved4" type="string"
nxsd:style="integer" nxsd_extn:octet="4" nxsd_extn:align="0"
nxsd_extn:sign="unticked" />
</sequence>
</complexType>
</element>
<!--
Application data
-->
<element name="ApplicationData" type="string"
fixed="Nothing" />
</sequence>
</complexType>
</element>
</schema>
MQSeriesアダプタを使用するための設定の前提条件は、次のとおりです。
IBM WebSphere MQサーバーがインストール済で稼働している必要があります。
キュー・マネージャ、キューおよびチャネルを作成する必要があります。
MQSeriesアダプタを構成するには、次の手順を実行します。
この項で説明する手順は、MQSeriesアダプタの使用前に1度のみ実行します。 次の手順に従って、MQSeriesアダプタのクラスパスにcom.ibm.mq.jarを追加します。
com.ibm.mq.jarファイルを任意のフォルダにコピーします。
次の例に示すように、com.ibm.mq.jarのパスを指定してserver.xmlファイルに新規共有ライブラリを作成します。
<shared-library name="oracle.mqseries" version="10.1.3">
<code-source path="C:\ORAHOME\bpel/lib/com.ibm.mq.jar"/>
</shared-library>
server.xmlファイルの場所は、インストール・タイプに応じて異なります。 表6-3に、インストール・タイプおよび対応するserver.xmlファイルの場所を示します。
oc4j-ra.xmlファイルを変更して、次の例に示すように新規の共有ライブラリを含めます。
<imported-shared-libraries>
<import-shared-library name="oracle.bpel.common"/>
<import-shared-library name="oracle.xml"/>
<import-shared-library name="oracle.mqseries"/>
</imported-shared-libraries>
oc4j-ra.xmlファイルの場所は、インストール・タイプに応じて異なります。 表6-4に、インストール・タイプおよび対応するoc4j-ra.xmlファイルの場所を示します。
表6-4 oc4j-ra.xmlファイルの場所
| インストール・タイプ | ファイルの場所 |
|---|---|
|
SOA Basic Installation |
|
|
Oracle Enterprise Service Bus on Oracle Application Server Middle tier |
|
|
Oracle BPEL Process Manager on Oracle Application Server Middle tier |
|
サーバーを再起動します。
oc4j-ra.xmlファイル内で次のパラメータの値を指定します。
|
注意: MQSeriesキューのプロパティは、次のリストに従って設定する必要があります。
|
<connector-factory location="eis/MQ/MQSeriesAdapter" connector-name="MQSeriesAdapter">
<config-property name="hostName" value="localhost"/>
<config-property name="portNumber" value="1414"/>
<config-property name="queueManagerName" value="QM"/>
<config-property name="channelName" value="MYCHANNEL"/>
<config-property name="userID" value=""/>
<config-property name="password" value=""/>
<config-property name="clientEncoding" value=""/>
<config-property name="hostOSType" value=""/>
<connection-pooling use="private">
<property name="waitTimeout" value="300" />
<property name="scheme" value="fixed_wait" />
<property name="maxConnections" value="50" />
<property name="minConnections" value="0" />
</connection-pooling>
<security-config use="none">
</security-config>
</connector-factory>
この項には、次の項目が含まれます。
この使用例では、インバウンドのMQSeriesアダプタがMQSeriesキューtest_inからメッセージをデキューして、BPELプロセスにパブリッシュします。 受信MQSeriesメッセージがBPEL receiveアクティビティで消費され、同じメッセージがBPELアクティビティを介してMQSeriesキューtest_outに送信されます。 この使用例は、次の項で構成されています。
この例は、基本的なBPELコンストラクト(アクティビティやパートナ・リンクなど)と、BPELプロセスを作成およびデプロイするOracle JDeveloper環境をよく理解していることを前提としています。
第6.4項「MQSeriesアダプタの構成」の指定に従ってMQSeriesアダプタを構成し、2つのキューtest_inおよびtest_outを作成する必要があります。
メッセージのスキーマを定義するには、address-csv.xsdファイルが必要です。 このファイルは、次のディレクトリからコピーできます。
ORAHOME\bpel\samples\tutorials\121.FileAdapter\FlatStructure
Oracle JDeveloperで次の手順を実行し、メッセージをキューにエンキューするアダプタ・サービスを作成します。
「アプリケーション・ナビゲータ」で、「アプリケーション」を右クリックして「新規アプリケーション」を選択します。 「アプリケーションの作成」ダイアログ・ボックスが表示されます。
「アプリケーション名」フィールドにEnqueueDequeueと入力して「OK」をクリックします。 「プロジェクトの作成」ダイアログ・ボックスが表示されます。
「取消」をクリックします。
「アプリケーション・ナビゲータ」で、「EnqueueDequeue」を右クリックして「新規プロジェクト」を選択します。 「新規ギャラリ」ダイアログ・ボックスが表示されます。
「カテゴリ」から「General」と「Projects」を順番に選択します。
「項目」から「BPELプロセス・プロジェクト」を選択して「OK」をクリックします。 「BPELプロジェクト作成ウィザード - プロジェクトの設定」ダイアログ・ボックスが表示されます。
図6-26に示すように次の操作を実行します。
「名前」フィールドにSimple_Dequeue_Enqueueと入力します。
「テンプレート」リストから「空のBPELプロセス」を選択します。
「終了」をクリックします。
図6-26 「BPELプロジェクト作成ウィザード - プロジェクトの設定」ダイアログ・ボックス

Schemaフォルダを作成し、このフォルダにaddress-csv.xsdファイルをコピーします。
SchemaフォルダをSimple_Dequeue_Enqueueプロジェクト・ディレクトリのbpelサブディレクトリに移動します。
「コンポーネント・パレット」から設計領域に「PartnerLink」アクティビティをドラッグします。 「パートナ・リンクの作成」ダイアログ・ボックスが表示されます。
「名前」フィールドにInboundと入力し、図6-27に示す「アダプタ・サービスの定義」アイコンをクリックします。
「アダプタ構成ウィザード」の「ようこそ」ウィンドウで「次へ」をクリックします。 「アダプタ・タイプ」ウィンドウが表示されます。
「MQアダプタ」を選択して「次へ」をクリックします。 「サービス名」ウィンドウが表示されます。
「サービス名」フィールドにinboundServiceと入力して「次へ」をクリックします。 「MQ Series接続」ウィンドウが表示されます。
図6-28のように、実行時接続のJNDI名を指定して「次へ」をクリックします。
「操作タイプ」ウィンドウで「MQからメッセージを取得」を選択して「次へ」をクリックします。
図6-29に示すように「キュー名」フィールドにtest_inと入力して「次へ」をクリックします。 MQSeriesアダプタにより、このキューからメッセージがデキューされます。
「メッセージ」ウィンドウで「参照」をクリックします。 「タイプの選択」ダイアログ・ボックスが表示されます。
図6-30に示すように、「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番に選択して「OK」をクリックします。
「メッセージ」ウィンドウで「次へ」をクリックします。
「終了」をクリックします。 図6-31に示す「パートナ・リンクの作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
次の手順を実行し、メッセージをキューからデキューするアダプタ・サービスを作成します。
「コンポーネント・パレット」から設計領域に「PartnerLink」アクティビティをドラッグします。 「パートナ・リンクの作成」ダイアログ・ボックスが表示されます。
「名前」フィールドにOutboundと入力し、図6-27に示す「アダプタ・サービスの定義」アイコンをクリックします。
「アダプタ構成ウィザード」の「ようこそ」ウィンドウで「次へ」をクリックします。「アダプタ・タイプ」ウィンドウが表示されます。
「MQアダプタ」を選択して「次へ」をクリックします。 「サービス名」ウィンドウが表示されます。
「サービス名」フィールドにoutboundServiceと入力して「次へ」をクリックします。 「MQ Series接続」ウィンドウが表示されます。
図6-28のように、実行時接続のJNDI名を指定して「次へ」をクリックします。 「操作タイプ」ウィンドウが表示されます。
「MQにメッセージを蓄積」を選択して「次へ」をクリックします。
「キュー名」フィールドにtest_outと入力します。 MQSeriesアダプタにより、このキューにメッセージがエンキューされます。 図6-32のように、他のフィールドはデフォルトのままにしておきます。
「次へ」をクリックします。 「メッセージ」ウィンドウが表示されます。
「参照」をクリックします。 「タイプの選択」ダイアログ・ボックスが表示されます。
図6-30に示すように、「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番に選択して「OK」をクリックします。
「次へ」をクリックします。
「終了」をクリックします。 図6-33に示す「パートナ・リンクの作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
次の手順に従って、MQSeriesアダプタからメッセージを受信したときにBPELプロセス・インスタンスをインスタンス化するreceiveアクティビティを作成します。
「コンポーネント・パレット」から「アクティビティをここにドロップ」セクションに「Receive」アクティビティをドラッグします。
receiveアクティビティをinboundServiceパートナ・リンクに結合します。 「編集 Receive」ダイアログ・ボックスが表示されます。
「名前」フィールドにReadMsgと入力します。
「変数」フィールドの横にある「変数の自動作成」アイコンをクリックします。 図6-34に示す「変数の作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。 ReadMsg_Dequeue_InputVariable変数が作成されます。
「インスタンスの作成」を選択します。 図6-35に示す「編集 Receive」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
次の手順に従って、メッセージをパートナ・リンクに送信してアウトバウンド・キューにエンキューさせるinvokeアクティビティを作成します。
「コンポーネント・パレット」からreceiveアクティビティの下に「Invoke」アクティビティをドラッグします。
invokeアクティビティをoutboundServiceパートナ・リンクに結合します。 「編集 Invoke」ダイアログ・ボックスが表示されます。
「名前」フィールドにWriteMsgと入力します。
「変数」フィールドの横にある「変数の自動作成」アイコンをクリックします。 「変数の作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。 WriteMsg_Enqueue_InputVariable変数が作成されます。
「OK」をクリックします。
次の手順に従ってassignアクティビティを作成します。
「コンポーネント・パレット」から、ReadMsgアクティビティとWriteMsgアクティビティの間に「Assign」アクティビティをドラッグします。
assignアクティビティをダブルクリックします。
「コピー操作」タブで、「作成」をクリックして「コピー操作」を選択します。 「コピー操作の作成」ダイアログ・ボックスが表示されます。
図6-36のように、「From」グループで「変数」、「プロセス」、「変数」、「ReadMsg_Dequeue_InputVariable」、「Root-Element」、「ns3:Root-Element」を順番に選択します。
図6-36のように、「To」グループで「変数」、「プロセス」、「変数」、「WriteMsg_Enqueue_InputVariable」、「Root-Element」、「ns3:Root-Element」を順番に選択します。
「OK」をクリックします。 図6-37に示すassignアクティビティのダイアログ・ボックスが表示されます。
「OK」をクリックします。 Oracle JDeveloperが図6-38のように表示されます。
次の手順に従って、このシナリオの実行時テストを行います。
「アプリケーション」ウィンドウで「アプリケーション」をクリックし、「Simple_Dequeue_Enqueue」を右クリックします。
アプリケーションをデプロイします。
次のテキスト・メッセージをtest_inキューに入れます。
Name,Street1,Street2,City,State,Country;
同じテキストがtest_outキューに書き込まれます。 図6-39に、データが書き込まれたサンプルtest_outキューを示します。
この使用例では、インバウンドのMQSeriesアダプタがMQSeriesのインバウンド・キューtest_inからリクエスト・メッセージをデキューして、BPELプロセスにパブリッシュします。 MQSeriesアダプタは、BPELプロセスからのレスポンスを待機します。 レスポンスを受信すると、MQSeriesアダプタはリクエスト・メッセージのreplyToキューで指定されたMQSeriesキューにレスポンス・メッセージをエンキューします。 この使用例は、次の項で構成されています。
この例は、基本的なBPELコンストラクト(アクティビティやパートナ・リンクなど)と、BPELプロセスを作成およびデプロイするOracle JDeveloper環境をよく理解していることを前提としています。
第6.4項「MQSeriesアダプタの構成」の指定に従ってMQSeriesアダプタを構成し、2つのキューtest_inおよびtest_outを作成する必要があります。
メッセージのスキーマを定義するには、address-csv.xsdおよびaddress-fixedLength.xsdファイルが必要です。 この2つのファイルは、次のディレクトリからコピーできます。
ORAHOME\bpel\samples\tutorials\121.FileAdapter\FlatStructure
Oracle JDeveloperで次の手順を実行して、インバウンド・キューからリクエスト・メッセージをデキューして、レスポンス・メッセージをアウトバウンド・キューにエンキューするパートナ・リンクを作成します。
「アプリケーション・ナビゲータ」で、「アプリケーション」を右クリックして「新規アプリケーション」を選択します。 「アプリケーションの作成」ダイアログ・ボックスが表示されます。
「アプリケーション名」フィールドにSyncReqResと入力して「OK」をクリックします。 「プロジェクトの作成」ダイアログ・ボックスが表示されます。
「取消」をクリックします。
「アプリケーション・ナビゲータ」で、「SyncReqRes」を右クリックして「新規プロジェクト」を選択します。 「新規ギャラリ」ダイアログ・ボックスが表示されます。
「カテゴリ」から「General」と「Projects」を順番に選択します。
「項目」から「BPELプロセス・プロジェクト」を選択して「OK」をクリックします。 「BPELプロジェクト作成ウィザード - プロジェクトの設定」ダイアログ・ボックスが表示されます。
次の手順を実行します。
「名前」フィールドにSync_Req_Resと入力します。
「テンプレート」ボックスから「空のBPELプロセス」を選択します。
「終了」をクリックします。
Schemaフォルダを作成し、このフォルダにaddress-csv.xsdファイルをコピーします。
SchemaフォルダをSync_Req_Resプロジェクト・ディレクトリのbpelサブディレクトリに移動します。
「コンポーネント・パレット」から設計領域に「PartnerLink」アクティビティをドラッグします。 「パートナ・リンクの作成」ダイアログ・ボックスが表示されます。
「名前」フィールドにinbound_req_resと入力し、図6-27に示す「アダプタ・サービスの定義」アイコンをクリックします。 「アダプタ構成ウィザード」の「ようこそ」ウィンドウが表示されます。
「次へ」をクリックします。 「アダプタ・タイプ」ウィンドウが表示されます。
「MQアダプタ」を選択して「次へ」をクリックします。 「サービス名」ウィンドウが表示されます。
「サービス名」フィールドにinboundServiceと入力して「次へ」をクリックします。 「MQ Series接続」ウィンドウが表示されます。
図6-28のように、「MQ Series接続のJNDI名」フィールドで実行時接続のJNDI名を指定して「次へ」をクリックします。 「操作タイプ」ウィンドウが表示されます。
「MQからメッセージを取得し、リプライ/レポートを送信」を選択します。
図6-17のように、「同期」オプションを選択して「次へ」をクリックします。 「MQからメッセージを取得し、リプライ/レポートを送信」ウィンドウが表示されます。
「キュー名」フィールドにtest_inと入力して「次へ」をクリックします。 図6-19に示す「レスポンス」ウィンドウが表示されます。
「レスポンス・フォールバック・キュー名」フィールドでレスポンス・フォールバック・キューの名前を指定して「次へ」をクリックします。 図6-15に示す「メッセージ」ウィンドウが表示されます。
「メッセージ・スキーマの取得」グループで「参照」をクリックします。 「タイプの選択」ダイアログ・ボックスが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番に選択して「OK」をクリックします。
「メッセージ・スキーマの送信」グループで「参照」をクリックします。 「タイプの選択」ダイアログ・ボックスが表示されます。
「メッセージ」ウィンドウで「参照」をクリックします。 「タイプの選択」ダイアログ・ボックスが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-fixedLength.xsd」および「Root-Element」を順番に選択して「OK」をクリックします。
「メッセージ」ウィンドウで「次へ」をクリックします。
「終了」をクリックします。
「パートナ・リンクの作成」ダイアログ・ボックスで、図6-40のように「マイ・ロール」ボックスから「Dequeue_role」を選択します。
図6-40 同期リクエスト-レスポンスの使用例の「パートナ・リンクの作成」ダイアログ・ボックス

「OK」をクリックします。
次の手順に従って、MQSeriesアダプタからメッセージを受信したときにBPELプロセス・インスタンスをインスタンス化するreceiveアクティビティを作成します。
「コンポーネント・パレット」から「アクティビティをここにドロップ」セクションに「Receive」アクティビティをドラッグします。
receiveアクティビティをinboundServiceパートナ・リンクに結合します。 「編集 Receive」ダイアログ・ボックスが表示されます。
「名前」フィールドにReadMsgと入力します。
「変数」フィールドの横にある「変数の自動作成」アイコンをクリックします。 「変数の作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。 ReadMsg_DequeueEnqueue_InputVariable変数が作成されます。
「インスタンスの作成」を選択します。 図6-35に示す「編集 Receive」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
次の手順に従って、inboundServiceパートナ・リンクにレスポンスを送信するreplyアクティビティを作成します。
「コンポーネント・パレット」からReadMsgアクティビティの下に「Reply」アクティビティをドラッグします。
replyアクティビティをinboundServiceパートナ・リンクに結合します。 「編集 Reply」ダイアログ・ボックスが表示されます。
「名前」フィールドにReplyMsgと入力します。
「変数」フィールドの横にある「変数の自動作成」アイコンをクリックします。 「変数の作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。 ReplyMsg_DequeueEnqueue_OutputVariable変数が作成されます。 図6-42に示す「編集 Reply」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
次の手順に従って、ReadMsg_DequeueEnqueue_InputVariable変数をReplyMsg_DequeueEnqueue_OutputVariable変数にマップします。
「コンポーネント・パレット」から、ReadMsgアクティビティとReplyMsgアクティビティの間に「Transform」アクティビティをドラッグします。
「Transform」アクティビティをダブルクリックします。
「ソース変数」ボックスで「ReadMsg_DequeueEnqueue_InputVariable」を選択します。
「ターゲット変数」ボックスで「ReplyMsg_DequeueEnqueue_OutputVariable」を選択します。
「マッピングの作成」アイコンをクリックします。 「Transformation_1.xsl」ウィンドウが開きます。
「<ソース>」パネルのtns:Address要素を「<ターゲット>」パネルのAddress要素へドラッグします。 図6-43に示す「自動マップ・プリファレンス」ダイアログ・ボックスが表示されます。
「祖先名を考慮した要素の一致」の選択を解除して「OK」をクリックします。
「コンポーネント・パレット」から、concat関数を「<ソース>」パネルのStreet1ノードへドラッグします。
Street2ノードをconcat関数に結合します。 図に示す「Transformation_1.xsl」ウィンドウが表示されます。
「Transformation_1.xsl」ウィンドウを閉じます。
次の手順に従って、このシナリオの実行時テストを行います。
「アプリケーション・ナビゲータ」で、「アプリケーション」をクリックして「Sync_Req_Res」を右クリックします。
アプリケーションをデプロイします。
次のテキスト・メッセージをtest_inキューに入れます。
Name,Street1,Street2,City,State,Country;
同じテキストが次のフォーマットでtest_outキューに書き込まれます。
Name,Street1Street2,City,State,Country;
Oracle Enterprise Service BusおよびOracle BPEL Process Managerのアダプタの概念に関する理解と実務的な知識を深めるために、一連のデモンストレーション、アクティビティと概念に関する参考資料およびチュートリアルが用意されています。
これらのサンプルは、Samplesフォルダにあります。
また、アダプタ・チュートリアルの更新版は次の場所にあります。
http://www.oracle.com/technology/products/integration/adapters/dev_support.html#tutorials