MQ バインディングによる SCA-MQ 統合の有効化

WebSphere Integration Developer V6.0.2 の MQ バインディング機能により、SCA と MQ アプリケーション間のインターオペラビリティーが簡素化され、SCA アプリケーションに対するネイティブ MQ メッセージの読み取りと書き込みが容易になります。

Benedict Fernandes (bxf@us.ibm.com), Senior Managing Consultant, IBM Software Services for WebSphere, EMC

Benedict Fernandes は、ノース・カロライナ州 Research Triangle Park にある IBM Software Services for WebSphere の上級マネージング・コンサルタントです。彼は、Carnegie Mellon University から情報ネットワーキングの理学修士号、De La Salle University からコンピューター・サイエンスの理学修士号、およびインドの BITS-Pilani から理学修士号 (技術) を取得しています。



José De Jesús (jdejesus@us.ibm.com), IBM Certified IT Architect, IBM Global Account team, IBM

José De Jesús は、フロリダ州 Boca Raton にある IBM Global Account チームのIBM 認定 IT アーキテクトです。ニューヨークの Fordham University から理学士号、フロリダ州の University of Miami から経営学修士号 (テクノロジー管理専攻) を取得しています。



2008年 2月 06日

概要

サービス・コンポーネント・アーキテクチャー (SCA) アプリケーションは通常、既存のエンタープライズ・リソースを機能的に統合するために開発されます。既存の多くのレガシー・アプリケーションは、IBM® WebSphere® MQ などのメッセージング・テクノロジーに基づいています。WebSphere Integration Developer V6.0.2 に導入された MQ バインディング機能により、SCA と MQ アプリケーション間のインターオペラビリティーが簡素化され、SCA アプリケーションに対するネイティブ MQ メッセージの読み取りと書き込みが容易になります。本書は MQ バインディングについて説明し、SCA および MQ レガシー・アプリケーションに基づいてエンドツーエンド・ソリューションを作成する方法を示します。

基本概念

SCA アプリケーションは、SCA モジュールと呼ばれる WebSphere Integration Developer コンテナーのような抽象物に格納されます。代表的な SCA モジュールは、ビジネス・オブジェクト (BO) インターフェース、エクスポート、インポートなどを装備しています。

  • ビジネス・オブジェクトはユーザー定義のデータ型であり、内部ではサービス・データ・オブジェクト (SDO) フォーマットの XML として表されます。
  • インターフェースはクライアント・コントラクトを表し、サービスに対する入力と出力を規定します。
  • エクスポートおよびインポートは、SCA アプリケーションが外部と相互接続できるようにする SCA の抽象概念です。

SCA コンポーネントが、メッセージ・キューを通してメッセージング・ベースのアプリケーションと通信するには、そのインポートとエクスポートを SCA メッセージング・バインディングで構成しなければなりません。SCA は 3 つのタイプのメッセージング・バインディングをサポートします。

  • Java Messaging Service (JMS) バインディング -- ピュア JMS クライアント (通常は、WebSphere デフォルト・メッセージング・プロバイダーを使用するピュア JMS クライアント) が使用します。
  • MQ JMSバインディング -- 通常、基盤となるメッセージング・プロバイダーとして WebSphere MQ を使用する JMS クライアントが使用します。
  • MQ バインディング -- 通常、レガシー MQ クライアントとも呼ばれるピュア MQ クライアントが使用します。

本書は、MQ バインディングの使用方法に重点を置いています。

エクスポート - MQ バインディングは、WebSphere MQ メッセージング・クライアントからコンポーネントに非同期アクセスを行うときに使用します。インポート - MQ バインディングは、コンポーネントから WebSphere MQ メッセージング・プロバイダーにアクセスするときに使用します。

データ・バインディングは、もう1つの重要な用語です。Data Binding クラスの主な機能は、入力または出力メッセージのスキーマと何らかの対応を持つデータ・フォーマットをブリッジすることです。この場合、Data Binding クラスは、メッセージング・システムから SCA アプリケーションのサービス・データ・オブジェクト (SDO) にネイティブ・フォーマットで渡されるデータを変換し、応答メッセージの場合はこの逆の変換を行います。Data Binding クラスは、あらかじめ定義されたインターフェースを実装し、SCA アプリケーションの境界でエクスポートまたはインポートの一部として構成されます。通常はまた、ビジネス・オブジェクトをインスタンス化して追加します。現在、WebSphere Integration Developer と WebSphere Process Server は、Data Binding クラスの実装言語として Java のみサポートしています。

エンドツーエンド・アプリケーションのシナリオ

図 1
図 1
  1. MQ メッセージング・クライアントは、MQ ローカル・キュー (EXPORTQ) にメッセージを入れます。RFHUTIL ユーティリティーは、メッセージ・プロデューサーとコンシューマーのいずれにも使用できます。
  2. EXPORTQ にメッセージが到着すると、MQ メッセージング・バインディングで構成された SCA エクスポートがメッセージを処理(コンシューム)して、BPEL プロセスを呼び出します。
  3. Data Binding クラスはネイティブ MQ メッセージを読み込んで解析し、すでに定義されている型のビジネス・オブジェクトにそのデータを追加します。
  4. その処理の中で、BPEL は MQ ベースの非同期サービスを呼び出します。
  5. MQ メッセージング・バインディングで構成された SCA インポートは、ビジネス・オブジェクトを XML ストリングとしてシリアライズし、ローカル MQ キュー (IMPORTQ) に入れます。
  6. すると、処理(コンシューム)すべき MQ アプリケーション (この場合は RFHUTIL) がメッセージを処理(コンシューム)できます。

データ

この例では、以下の構造を持つ 70 バイトの固定長フラット・テキスト・メッセージを使用します。

図 2
図 2

アプリケーションに作業を割り当てる場所に関して適切なアーキテクチャー上の決定ができるように、お使いのネイティブ・データ・フォーマットを理解することが重要です。たとえば、お使いのアプリケーションでは、生データが Data Binding クラスではなくコードの BPEL 部分に到達してからでないと解析できないかもしれません。

以下のセクションでは、上記のシナリオを実装するのに必要な詳細ステップを一通り説明します。タスクの全体構造とシーケンスの理解を深めるために、必要なステップを以下に挙げておきます。

  • WebSphere MQ リソースを作成する: キュー・マネージャーおよびキュー
    • WebSphere MQ キュー・マネージャーを作成する
    • WebSphere MQ キューを作成する
    • WebSphere Process Server ベースのビジネス・アプリケーションを作成する - BPEL ビジネス・ロジックを実装する
    • BI モジュール (すべての SCA 成果物のためのコンテナー) を作成する
    • ビジネス・オブジェクトを作成する
    • サービス・インターフェースを作成する
    • BPEL プロセスを作成する
    • メッセージング関連の SCA 成果物を作成する: エクスポート、インポート、データ・バインディング
    • Data Binding クラスを作成する
    • SCA メッセージング・エクスポートを作成する
    • SCA メッセージング・インポートを作成する
  • エンドツーエンドからアプリケーションをテストする
  • RFHUTIL を使用してメッセージを送信およびモニターする

WebSphere MQ リソースを作成する

この例に必要な MQ リソースには、リスナー・ポートをポート 1490 に構成した MQ キュー・マネージャー (QMGR900) と、2 つの MQ ローカル・キュー (EXPORTQ および IMPORTQ) が含まれます。WebSphere MQ Explorer ユーティリティーを使用して、必要な MQ リソースを作成します。ローカル・キュー (EXPORTQ および IMPORTQ) を作成すると、WebSphere MQ Explorer のビューは以下のようになります。

図 3
図 3

MQリソースの作成に関する詳細な説明が必要であれば、 <download_root>/MQBindings/docs/MQResourcesSetup.doc, ファイルを参照してください。このファイルは、以下からダウンロードできます。

WebSphere Process Server BPEL ベースのアプリケーションを作成する

Business Integration パースペクティブの中から、このアプリケーションに必要な成果物を格納するための新しいモジュールを作成します。Business Integration パースペクティブに切り替えるには、Window => Open Perspective => Business Integration を選択します。Business Integration ビューでキャンバスを右クリックして、New => Module を選択します。New Module パネルで Module Name フィールドに MQBindings と入力して、Finish をクリックします。

Business Integration パースペクティブで MQBindings を展開し、Data Types を右クリックして、New => Business Object を選択します。以下に示すように、/com/ibm/issw フォルダーに ProcessBO ビジネス・オブジェクトを作成して Finish をクリックします。

図 4
図 4

すると、ビジネス・オブジェクト・エディターが開きます。Add Attribute をクリックして、orderString と呼ばれる String 属性を 1 つ作成します。

図 5
図 5

このフィールドには、ネイティブの WebSphere MQ 着信メッセージ全体が固定長ストリングとして含まれます。着信メッセージは、さまざまなフォーマットを持つことがあります。Ctrl+S をクリックして保存します。

ProcessBO ビジネス・オブジェクトに対して行ったのと同様に、上記のステップを繰り返して同じ /com/ibm/issw フォルダーに ServiceXBO と呼ばれる追加ビジネス・オブジェクトを作成します。ServiceXBO に必要な属性を以下に示します。

図 6
図 6

Ctrl+S をクリックして保存します。これでビジネス・オブジェクトが作成されたため、 BPELプロセスが使用するサービス・インターフェースを作成できます。ナビゲーション・ツリーで、MQBindings => New => Interfaces のように展開します。Interfaces を右クリックして New Interface パネルを起動します。以下に示すように、インターフェース名とそれに対応するフォルダー/パッケージを入力して Finish をクリックします。

図 7
図 7

インターフェース・エディターに、processOrder と呼ばれる片方向操作を追加します。フィールド名を orderInput に変更して、以下に示すようにそれに関連する型を ProcessBO として選択します。Ctrl+S をクリックして保存します。

図 8
図 8

以前のステップで行ったのと同様に、com/ibm/issw フォルダーに ServiceXInterface と呼ばれる新しいサービス・インターフェースを作成します。インターフェース・エディターに、updateInventory と呼ばれる片方向操作を追加します。フィールド名を orderInput に変更して、それに関連する型を ServiceXBO として選択します。Ctrl+S をクリックして保存します。

図 9
図 9

これで、着信メッセージを処理する BPEL プロセスを作成して、それを出力キューに入れることができます。Business Integration パースペクティブから、新しいビジネス・プロセスを作成します。MQBindings => Business Logic のように展開し、Process を右クリックして New => Business Process を選択します。

以下に示すように、com/ibm/issw フォルダーに OrderProcess と呼ばれる新しい BPEL プロセスを作成して Next をクリックします。

図 10
図 10

Select an existing Interface を選択し、Browse をクリックして OrderProcessInterface を検索し選択します。processOrder 操作が自動的に選択されます。Finish をクリックします。

ビジネス・プロセス・エディターに Java スニペットを追加します。Snippet アクティビティーを選択して、デフォルトの Java スニペット名を Log Input に変更します。Properties View で Detailsタブをクリックして、実装タイプとして Java を選択します。Question ダイアログが表示されたら Yes をクリックします。テキスト・エリアに以下のコード行を入力します。

System.out.println("The Input Order Record is ==> " + OrderInput);

その結果、BPEL は以下のようになります。

図 11
図 11

これまでのステップと同じように、別の Java スニペット・ノードを追加してその名前を Prepare Service Call に変更します。提供されたテキスト・ファイルから、この Java スニペット・コードをカット・アンド・ペーストします。<download_root>/MQBindings/code/PrepareServiceCallX-codeSnippet.txt.

表示されるコンパイル・エラーを処理するには、Snippet ウィンドウ内部を右クリックして Source => Organize Imports を選択します。コンパイル・エラーを解決するには、以下のパッケージを選択します。commonj.sdo.DataObject、com.ibm.websphere.sca.sdo.DataFactory。

このコード・スニペットは、ServiceX を呼び出すための入力を保持するために使用する一時変数 ServiceXBO を使用します。スニペットは、基本的な Java ストリング操作手法を使用して元の着信メッセージから関連データを抽出してから、ServiceX 固有の BO を追加します。

図 12
図 12

残ったコンパイル・エラーを解決するには、theServiceXBO 一時変数を作成して対応するデータ型と関連付けます。BPEL Editor のアウトライン・ビューから Variables セクションのプラス記号をクリックし、変数に theServiceXBO という名前を付けます。

図 13
図 13

Properties ビューで、theServiceXBO が関連付けられたデータ型として表示されることを確認します。その結果、BPEL は以下のようになります。

図 14
図 14

次に、Invoke アクティビティーを BPEL プロセスに追加して、分かりやすくするために名前を Invoke ServiceX に変更します。Invoke アクティビティーは、サービスを呼び出すかコールアウトするように構成しなければなりません。呼び出されたサービスに対応するインターフェース (参照パートナー) を構成しなければなりません。そのために、ServiceXInterface を Navigation ビューから BPEL Process Editor のキャンバスにドラッグ・アンド・ドロップします。

図 15
図 15

上記のドラッグ・アンド・ドロップ操作により、ServiceXInterface が Reference Partners セクションの下に追加されます。

Properties ビューで Details タブを選択し、次に Browse をクリックして ServiceXInterface を選択します。要求された操作として updateInventory が選択されたことを確認してください。Use Data Type Variables チェック・ボックスを選択して、一時変数 theServiceXBO を選択します。その結果、構成は以下のようになります。

図 16
図 16

BPEL プロセス作成の最後のステップとして、終了メッセージを記録する単純な Java スニペット・ノードを追加します。その名前を Log Final に変更します。Log Final ノードを選択したまま、以下の Java コードを入力します。

System.out.println("Exiting OrderProcess Done -- BYE");

最後の BPEL プロセスは以下のようになります。

図 17
図 17

メッセージングに関連する SCA の成果物を作成する

Data Binding クラスを作成するには、Java パースペクティブに切り替えます。Window => Open Perspective => Other => Java => OK を選択します。Package Explorer ビューの中で com.ibm.issw を右クリックして、New => Class を選択します。New Java Class パネルに、Data Binding クラス名である InventoryCustomDataBinding を入力します。次に Finish をクリックします。

前のステップでクラスを作成したときに、このクラスが MQBodyDataBinding クラスを実装することを示すこともできました。ただし、分かりやすくするために、完全な MQ Data Binding クラスの実装を含む、別のソース・ファイルが提供されます。テキスト・エディターで <download_root>/code/InventoryCustomDataBinding.java というテキスト・ファイルを開いて、ワークスペースのスケルトン実装を、提供された Java 実装で置き換えます。MQBodyDataBinding クラスに指定されたメソッドが、アウトライン表示に表示されます。インポート・リストをレビューして、基盤として使用された WebSphere Process Server パッケージについて理解します。Ctrl+S をクリックして保存します。

図 18
図 18

Business Integration パースペクティブに戻って、Navigation ビューから MQBindings => Business Logic => Process => OrderProcess を選択します。以下に示すように、OrderProcess コンポーネントをキャンバスにドラッグ・アンド・ドロップします。

図 19
図 19

OrderProcess コンポーネントを選択し、右クリックして Generate Export => Messaging Binding => MQ Binding を選択します。

MQ Export Binding パネルで、新しく生成された MQ Export を構成します。必要な構成情報には、2 つの主なカテゴリーがあります。それは、WebSphere MQ 構成情報と Data Binding クラス仕様です。キュー・マネージャー名、ホスト、チャネル、ポートなどの WebSphere MQ 情報は、すでに構成したキュー・マネージャー設定に対応します。実稼働環境では、これは WebSphere MQ 管理者から入手できます。この例は片方向通信フローなので、Receive Destination Queue のみ指定する必要があります。これは、内部 SCA MDB が listen し、オプションで構成された Data Binding クラスが呼び出された後、関連する SCA コンポーネントにメッセージを送信するキューです。

MQ Export を構成するための最後のステップとして、データ変換セクションのプロパティーを追加しなければなりません。プルダウン・メニューから Request SerializationType の値を User Supplied に設定します。次に Browse をクリックして InventoryCustomBinding クラスを選択します。最終的な構成は以下のようになります。

図 20
図 20

OK をクリックして MQ Export の構成を完了します。新しく作成された MQ Export がアセンブリー・ダイアグラムに表示されます。MQ Export の名前を OrderProcessExport に変更します。

図 21
図 21

SCA エクスポートとインポートは、SCA アプリケーションの外部アクセス・ポイントであることを思い出してください。これまでのステップで、SCA Export を MQ メッセージング・バインディングで構成しました。このため、アプリケーションは MQ ベースのメッセージング・クライアントからメッセージ (インバウンド) を受信できます。ここでアウトバウンド通信パスを構成して、SCA アプリケーションが非同期メッセージを MQ ベースのメッセージング・クライアントに送信できるようにする必要があります。

アイコンのパネルから Import を選択し、それをキャンバスにドロップして名前を ServiceXImport に変更します。ServiceXImport を選択し、その上に表示される Interface アイコンをクリックして新しいインターフェースを追加します。Add Interface パネルから ServiceXInterface を選択します。ビジネス・オブジェクトを定義した後、最初に ServiceXInterface を構成したことを思い出してください。OK をクリックします。ServiceXImport コンポーネントを右クリックして、Generate Binding => Messaging Binding => MQ Binding を選択します。

MQ Import の構成は MQ Export の構成と似ており、2 つの主なタスクは、MQ トランスポートに固有の情報の構成とデータ変換に固有の情報の指定です。

以下のように MQ Import のプロパティーを入力します。この例では、単純にビジネス・オブジェクトをシリアライズして、構成した出力キュー (この場合は IMPORTQ) に送信します。したがって、望ましい Request Serialization タイプとして Serialized as XML を選択して、終了したら OK をクリックします。

図 22
図 22

Assembly Diagram タブで OrderProcess コンポーネントからワイヤーを選択して、それを ServiceXImport に接続します。すると、ワイヤリングされたコンポーネントがすべて表された、最終バージョンのアセンブリー・ダイアグラムが表示されます。

図 23
図 23

エンドツーエンドでアプリケーションをテストする

これで、アプリケーションを WebSphere Process Server にデプロイする準備が整いました。Servers タブで WebSphere Process Server V6 を右クリックして、Add and remove projects を選択します。アプリケーションをデプロイするには、MQBindingsApp をクリックしてから Add => Finish を選択し、サーバー・ステータスが Started に変わるまで待ちます。いつものように Server Console をモニターして、開始エラーがないことを確認します。これで、アプリケーションをテストする準備が整いました。

テスト・プロセスを開始するには、前に作成した MQ リソースを使用します。RFHUTIL ユーティリティー・プログラムでテキスト・ファイルからファイルを読み取り、キュー・マネージャー QMGR900 が管理する EXPORTQ ローカル・キューに、データをメッセージとして送信します。EXPORTQ キューにメッセージが到着すると、BPEL プロセスが活動状態になってメッセージが処理(コンシューム)されます。BPEL プロセスは、実行中に別のメッセージを発信 MQ キュー (IMPORTQ) に入れて、非同期サービスを呼び出します。

RFHUTIL ユーティリティー・プログラムを開始します。以下のステップ 1 と 2 に示すように、キュー・マネージャー QMGR900 と EXPORTQ キューをポイントします。次に Read File をクリックして、本書が提供する data.txt ファイルを unzip したディレクトリーをポイントします。Write Q をクリックすると、メッセージが EXPORTQ に送信されます。

図 24
図 24

RFHUTIL 画面の Data タブの内容を表示して、データを検査することもできます。すでに説明したように、メッセージを EXPORTQ キューに入れると、メッセージは BPEL プロセスによって処理(コンシューム)され、変換されて IMPORTQ キューに送信されます。メッセージを EXPORTQ キューに入れるたびに、IMPORTQ キューのメッセージ数が 1 つずつ増えます。IMPORTQ と EXPORTQ キューの深さを調べるには、WebSphere MQ Explorer を使用します。Start => WebSphere MQ => WebSphere MQ Explorer をクリックして、以下に示すように Current queue length フィールドを調べます。RFHUTIL 画面の Data タブの内容を表示して、IMPORTQ のシリアライズされた XML データ・メッセージを表示することによってデータを検査することもできます。

図 25
図 25

以下に示すように、RFHUTIL ユーティリティーを使用して IMPORTQ のメッセージの内容を調べることができます。QMGR900 がキュー・マネージャーとして選択され、IMPORTQ がカレント・キューとして選択されていることを確認します。Read Q をクリックしてキューからメッセージを読み取ります。すると、メッセージが IMPORTQ から物理的に削除されます。

図 26
図 26

メッセージの実際の内容を検査するには、Data タブを選択してから XML ボタンを選択します。これは、Serialize as XML オプションを指定して SCA Import を構成しているために、メッセージ出力が XML として宛先キューに送信されるからです。

図 27
図 27

結論

本書では、WebSphere Integration Developer V6.0.2 での MQ バインディング機能の背後にある概念について説明し、SCA と MQ アプリケーションの統合を有効にするのに必要な実装ステップと成果物を示しました。

謝辞

著者は、Peter Xu、Debasish Banerjee、および Robert Drelles が貴重なフィードバックを寄せてくれたことに謝意を表します。


ダウンロード

内容ファイル名サイズ
コード・サンプルMQBindingsArticleArtifacts.zip234KB

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=347854
ArticleTitle=MQ バインディングによる SCA-MQ 統合の有効化
publish-date=02062008