Integration コントロールを使用する

     前  次    目次     
ここから内容

MQSeries コントロール

サンプル : ワークフロー内での SSL のコンフィグレーション

注意 : MQSeries コントロールは、WebLogic Integration の使用許諾を受けた場合にのみ、BEA Workshop for WebLogic Platform で使用できます。

MQSeries は、複数のプラットフォームで動作する IBM のミドルウェア製品です。MQSeries を使用すると、アプリケーション間でメッセージを転送できます。送信側アプリケーションはメッセージをキューに入れ、受信側アプリケーションはキューからメッセージを取得します。送信側アプリケーションと受信側アプリケーションが同じプラットフォーム上にある必要はありません。また、送信側アプリケーションと受信側アプリケーションは別々の時刻に実行できます。送り先キューにメッセージが確実に配信されるようにするために必要なストレージ、ログ、および通信の詳細は、すべて MQSeries によって管理されます。

免責事項

BEA WebLogic Integration と共に MQSeries コントロールおよびイベント ジェネレータを使用しても、「ダイナミック ライブラリ」 を含む MQSeries コントロールを使用する権限が付与されるわけではありません。MQSeries コントロールおよびイベント ジェネレータのユーザがこのような IBM 製品を使用するためには、有効なライセンスを IBM から取得する必要があります。

 


この節に含まれるトピック

概要 : MQSeries コントロール

WebLogic Integration における MQSeries コントロールの機能について説明します。

MQSeries コントロールを追加する際の前提条件

新しい MQSeries コントロールを作成する前に行う必要のあるタスクについて説明します。

MQSeries コントロールの新しいインスタンスを作成およびコンフィグレーションする

新しい MQSeries コントロールを作成およびコンフィグレーションする方法について説明します。

MQSeries コントロールの出口の実装を使用する

MQSeries コントロールの出口機能を実装する方法について説明します。

トランザクション管理について

MQSeries コントロールでサポートされるトランザクション管理のモードについて説明します。

メッセージ記述子を使用する

メッセージのメッセージ記述子の属性を設定および取得する方法について説明します。

メッセージの送受信

メッセージを送信および受信するためのメソッドについて説明します。

MQSeries メッセージ記述子のフォーマットを使用する

組み込みの MQSeries フォーマットでメッセージを送信するためのメソッドについて説明します。

動的なプロパティを設定する

MQSeries コントロールのプロパティを実行時に変更する方法について説明します。

MQSeries コントロールで SSL をコンフィグレーションする

MQSeries コントロールで、SSL を使用してサーバサイドおよびクライアントサイドの認証をコンフィグレーションする方法について説明します。

MQSeries コントロール 8.1 SP3 の JCX ファイルを移行する

MQSeries コントロール バージョン 8.1 SP3 を使用して作成した JCX ファイルをバージョン 9.2 に移行する方法について説明します。

MQSeries イベント ジェネレータを使用する

MQSeries イベント ジェネレータについて簡単に説明し、詳細情報の参照先を示します。

概要 : MQSeries コントロール

MQSeries コントロールを使用すると、WebLogic Integration ビジネス プロセスで MQSeries キューを使用してメッセージを送受信できます。MQSeries コントロールを使用して、バイナリ、XML、および文字列のメッセージを送受信できます。MQSeries コントロールをコンフィグレーションするときに、MQSeries コントロールのプロパティを指定できます。また、実行時に動的に指定することも可能です。MQSeries のビジネス オペレーションに対するトランザクション境界を設定することもできます。

MQSeries コントロールは WebLogic Integration で提供される他のコントロールを補完するものであり、他の WebLogic Integration ビジネス プロセスと一緒に使用できます。ビジネス プロセスにコントロール インスタンスを追加する方法については「ビジネス プロセスでコントロールを使用する」を参照してください。

MQSeries イベント ジェネレータを使用すると、特定の MQSeries キューをポーリングして、メッセージを受信したかどうかを確認できます。詳細については、「MQSeries イベント ジェネレータを使用する」を参照してください。

MQSeries コントロールを追加する際の前提条件

MQSeries コントロールを BEA Workshop for WebLogic Platform に追加する前に、以下のタスクを完了しておく必要があります。

  1. WebSphere MQSeries クライアントをマシンにインストールします。
  2. MQSeries クライアントのインストール先にある com.ibm.mq.jar ファイルを、システムの CLASSPATH 環境変数に追加します。
  3. 必要に応じて、apacheLog4jCfg.xml ファイルに以下のコードを追加して、MQSeries コントロールのロギングを有効にします。
  4. <category name="com.bea.control.MQControl">
    <!-- 注意 : WLI の開発ライセンスがない場合はこの優先順位レベルを変更しないこと -->
    <!-- デバッグレベルのログ情報は、障害の原因を突き止めるための唯一の手段となることが多い-->
    <priority value="warn"/>
    <appender-ref ref="SYSLOGFILE"/>
    <appender-ref ref="SYSERRORLOGFILE" />
    </category>

    MQSeries コントロールはメッセージのロギングに Workshop のデバッガを使用します。

    注意 : ログ レベルを変更する方法については、コントロールのドキュメントを参照してください。
  5. BEA Workshop for WebLogic Platform で、MQSeries クライアントのインストール先にある com.ibm.mq.jar ファイルを、MQSeries コントロールが使用されるアプリケーションのライブラリ フォルダにインポートします。

これで、新しい MQSeries コントロールを追加してメッセージを送受信できるようになりました。

MQSeries コントロールの新しいインスタンスを作成およびコンフィグレーションする

新しい MQSeries コントロールのインスタンスを作成およびコンフィグレーションしてビジネス プロセスに追加できます。ここでは以下について説明します。

新しい MQSeries コントロールを追加するには

新しい MQSeries コントロールを追加する方法について説明します。

MQSeries コントロールの一般的な設定を指定するには

プール サイズや SSL など、MQSeries コントロールの一般的な設定をコンフィグレーションする方法について説明します。

MQSeries コントロールの接続の設定を指定するには

MQSeries コントロールの接続の設定をコンフィグレーションする方法について説明します。

MQSeries コントロールの出口を指定するには

MQSeries コントロールの出口をコンフィグレーションする方法と、MQSeries コントロールの出口の実装を使用する方法について説明します詳細については、「MQSeries コントロールの出口の実装を使用する」を参照してください。
新しい MQSeries コントロールを追加するには

WebLogic Integration に新しい MQSeries コントロールを追加するには、以下の手順を実行します。

  1. [パッケージ・エクスプローラー] ペインで、MQ Series コントロールを追加するビジネス プロセス (Process.java ファイル) をダブルクリックします。ビジネス プロセスがデザイン ビューに表示されます。
  2. データ パレットサンプル ワークフロー内での SSL のコンフィグレーション例 をクリックし、ドロップダウン リストから Integration コントロールを選択して、アプリケーションの統合に使用するコントロールのリストを表示します。
注意 : [データ パレット] ビューが BEA Workshop for WebLogic Platform に表示されない場合は、メニュー バーから [ウィンドウArrow symbolビューの表示Arrow symbolデータ パレット] をクリックします。
  1. MQSeries コントロールを選択します。
  2. [コントロールの挿入 - MQSeries] ダイアログ ボックスが表示されます。

注意 : 初めてコントロール ファイルを作成する場合は、[MQ Series jar ファイルを検索します。] ダイアログ ボックスが表示されます。MQSeries のインストール先にある com.ibm.mq.jar ファイルを検索して、[開く] をクリックします。
  1. [Insert control: MQSeries] ダイアログ ボックスで、以下の情報を入力します。
    • [フィールド名] に、ビジネス プロセスから新しい MQSeries コントロール インスタンスにアクセスするときに使用する変数の名前を入力します。有効な Java 識別子を入力する必要があります。
    • [挿入位置] で、フィールド名をプロセス ファイルに挿入するポイントをドロップダウン リストから選択します。
    • これをコントロール ファクトリにするかどうかを決定し、[これを実行時に複数のインスタンスを作成できるコントロール ファクトリにする] チェック ボックスをチェックするか、チェックをはずします。コントロール ファクトリの詳細については、「コントロール ファクトリ : コントロールをまとめて管理する」を参照してください。
    • [次へ] をクリックします。
    • [コントロールの作成] ウィザードが表示されます。

  2. [コントロールの作成] ウィザードで、以下の情報を入力します。
    • [名前] フィールドに新しいコントロール拡張ファイルの名前を入力します。
    • 現在のプロジェクトのプロパティに設定されているようにコメントを追加するかどうかを決定し、[コメントの生成] チェック ボックスをチェックするか、チェックをはずします。
    • [次へ] をクリックします。
    • [コントロールの挿入 - MQSeries] ダイアログ ボックスが表示されます。

  3. 次のように Insert control: MQSeries ダイアログ ボックスで以下の設定をコンフィグレーションします。
  4. [終了] をクリックします。
MQSeries コントロールの一般的な設定を指定するには

MQSeries コントロールの接続の設定を指定するには、以下のタスクを実行します。

  1. [接続タイプ] ドロップダウン リストから、確立する接続のタイプ (BINDINGS または TCP) を選択します。接続タイプに BINDINGS を使用すると、ローカル システム上のキュー マネージャへの接続のみを取得できます。接続タイプに TCP を使用すると、リモートのキュー マネージャとの接続も取得できます。
  2. [MQ プール サイズ] テキスト ボックスに、MQSeries 接続プールで保持される MQSeries 接続の数を入力します。
  3. [接続タイムアウト (秒)] フィールドに、接続がタイムアウトするまでの秒数を入力します。
  4. [MQ 認可が必要] ドロップダウン リストから、[はい] または [いいえ] を選択します。MQ 認可は TCP モードの場合にのみ使用できます。MQ 認可を取得するには、[認可] タブで MQSeries のユーザ名とパスワードを入力する必要があります。
  5. デフォルトでは [暗黙的トランザクションが必要] オプションが選択されています。これを選択した場合、MQSeries コントロールは Put および Get ごとにトランザクションを暗黙的に処理します。明示的なトランザクション境界の設定は必要ありません。このオプションを選択しない場合は、トランザクション境界を明示的に設定する必要があります。詳細については、「トランザクション管理について」を参照してください。
  6. [デフォルト キュー名] フィールドに、MQSeries コントロールがメッセージの送受信に使用するデフォルト キュー名を入力します。
  7. MQSeries コントロールのこのインスタンスで、SSL (一方向) を使用したサーバサイド認証を有効にする場合は、[SSL 認証が必要] を選択します。
  8. MQSeries コントロールのこのインスタンスで、SSL (双方向) を使用したクライアントサイド認証も有効にする場合は、[双方向 SSL が必要] を選択します。
MQSeries コントロールの接続の設定を指定するには

MQSeries コントロールの TCP/IP の設定を指定するには、[接続] タブで、以下のタスクを実行します。

  1. [接続] タブの [キュー マネージャ名] フィールドで、接続の取得先となるキュー マネージャの名前を入力します。
注意 : TCP/IP 設定は、TCP 接続タイプを設定した場合にのみ指定してください。
  1. [ホスト] フィールドに、接続先のキュー マネージャをホストするマシン名を入力します。
  2. [ポート] フィールドに、キュー マネージャを接続に利用できるポート番号を入力します。
  3. [チャネル] フィールドに、キュー マネージャにコンフィグレーションされた MQSeries サーバの接続チャネルを入力します
  4. [CCSID] フィールドに、接続を確立するときに使用されるコード化文字セットを入力します。CCSID は主にインターナショナライゼーションをサポートする目的で使用されます。
  5. [テスト接続] ボタンをクリックして入力した値を検証し、キュー マネージャに接続できるかどうかを確認します。
注意 : [TCP 設定の接続] タブは、TCP 接続モードを選択した場合にのみ有効になります。
警告 : コントロールに対して SSL オプションを選択した場合は、[テスト接続] ボタンをクリックしないでください。ボタンをクリックすると、接続に失敗します。
MQSeries コントロールの認可の設定を指定するには

MQ 認可のユーザ名とパスワードを指定するには、以下のタスクを実行します。

  1. [MQ ユーザ名] フィールドに MQ ユーザ名を入力します。
  2. [MQ ユーザ パスワード] フィールドに MQ パスワードを入力します。
MQSeries コントロールの出口を指定するには

MQSeries コントロールの出口を指定するには、以下を実行します。

  1. [出口] タブの [送信出口クラス] フィールドに、MQSeries MQSendExit インタフェースを実装するクラスの完全修飾名を入力します。
  2. [受信出口クラス] フィールドに、MQSeries MQReceiveExit インタフェースを実装するクラスの完全修飾名を入力します。
  3. [セキュリティ出口クラス] フィールドに、MQSeries MQSecurityExit インタフェースを実装するクラスの完全修飾名を入力します。
  4. 詳細については、「MQSeries コントロールの出口の実装を使用する」を参照してください。

    注意 : [出口] タブは、TCP 接続モードを選択した場合にのみ有効になります。このタブのフィールドは必須ではありません。

MQSeries コントロールのコントロール ファイル

MQSeries コントロールの新しいインスタンスを作成すると、プロジェクト内に新しいコントロール ファイルが作成されます。以下は、MQSeries コントロールのコントロール ファイルの例です。

package processes;
import com.bea.jpd.ProcessDefinition;
import com.bea.jpd.JpdContext;
import org.apache.beehive.controls.api.bean.Control;
@com.bea.wli.jpd.Process(process = 
"<process name=\"Process\">" + 
"  <clientRequest name=\"Client Request\" method=\"clientRequest\"/>" + 
"</process>")
public class Process implements ProcessDefinition {
	@com.bea.wli.jpd.Context
	JpdContext context;
	static final long serialVersionUID = 1;
	@Control
	private ServiceBrokerCntrl ServiceBrokerControl;
	@Control
	private MQSeriesCntrl MQControl;
	public void clientRequest() {
        //#START: CODE GENERATED - PROTECTED SECTION - このメソッドのこのコメントより前であれば、安全にコードを追加できる。#//
        // トランスフォームを入力する
        // パラメータの割り当て
        //#END  : CODE GENERATED - PROTECTED SECTION - このメソッドのこのコメントより後であれば、安全にコードを追加できる。#//
    }
}

MQSeries コントロール ファイルの内容は、[Insert Control: MQSeries Control] ダイアログ ボックスで選択した設定によって異なります。上記の例は、TCP 接続タイプを選択して一方向 SSL を使用するように設定した場合に生成されたものです。

MQSeries コントロールの出口の実装を使用する

MQSeries コントロールを使用すると、独自の送信出口、受信出口、およびセキュリティ出口を作成できます

出口を実装するには、適切なインタフェースを実装する新しい Java クラスを定義する必要があります。WebSphere MQ パッケージでは 3 つの出口インタフェースが定義されています。

注意 : ユーザ出口は TCP 接続でのみサポートされます。バインディング接続ではサポートされません。
注意 : ユーザ出口は、MQSeries キュー マネージャと MQSeries クライアント アプリケーションとの間で転送されるデータを変更するために使用します。このデータは MQSeries ヘッダの形式であり、キューに入れたりキューから受信される実際のメッセージの内容は含まれていません。

MQSeries の出口の実装を使用する

MQSeries の出口を実装するには、以下を実行します。

  1. 送信出口、受信出口、およびセキュリティ出口に対応する com.ibm.mq.MQSendExitcom.ibm.mq.MQReceiveExit、および com.ibm.mq.MQSecurity インタフェースを実装する Java クラスを作成します。以下にその例を示します。
  2. package com.bea.UserExit;
    import com.ibm.mq.*;
    public class MQUserExit implements MQSendExit, MQReceiveExit, MQSecurityExit {
    public MQUserExit()
    {
    }
    public byte[] sendExit(MQChannelExit channelExit,MQChannelDefinition channelDefnition,byte[] agentBuffer)
    {
    return agentBuffer;
    }
    public byte[] receiveExit(MQChannelExit channelExit,MQChannelDefinition channelDefnition,byte[] agentBuffer)
    {
    return agentBuffer;
    }
    public byte[] securityExit(MQChannelExit channelExit,MQChannelDefinition channelDefnition,byte[] agentBuffer)
    {
    return agentBuffer;
    }
    }

    これらのインタフェースは、必要に応じて、1 つのクラスに実装することも、別々のクラスに実装することもできます。

    MQSendExit の場合、agentBuffer パラメータには送信するデータが保持されます。MQReceiveExit または MQSecurityExit の場合、agentBuffer パラメータには受信したデータが保持されます。

    MQSendExit と MQSecurityExit の場合、出口のコードでは、サーバに送信するバイト配列を返す必要があります。受信出口の場合、出口のコードでは、WebSphere MQ Client for Java に解釈させる変更済みデータを返す必要があります。

  3. 用意したクラスを mquserexits.jar などの Jar ファイルにまとめます。
  4. その Jar ファイルを WebLogic のクラスパスに配置します。WebLogic ドメイン ディレクトリにある setDomainEnv.cmd ファイルを直接編集して、CLASSPATH に Jar ファイル名を追加します。これを行うには、setDomainEnv.cmd ファイルで以下のコードを見つけます。
  5. set Pre_CLASSPATH=

    このコードに以下の行を追加します。

    ;%EXIT_DIR%\mquserexits.jar

    Jar ファイル名を含むコードを CLASSPATH に追加する前に、Jar ファイルが格納されているディレクトリを以下のように定義できます。

    set EXIT_DIR=D:\UserExits

トランザクション管理について

MQSeries コントロールでは、2 つのトランザクション管理モードがサポートされます。どちらのモードも、基底の MQSeries の syncpoint 機能を使用します。以下の 2 つのトランザクション管理モードがあります。

暗黙的なトランザクション管理

デフォルトでは、暗黙的なトランザクション管理が選択されています。このモードが有効になっている場合、MQSeries コントロールは MQSeries の Get 関数または Put 関数ごとにトランザクションを処理します。以下の図は、暗黙的なトランザクションが MQSeries コントロールでどのように処理されるのかを示したものです。

サンプル : ワークフロー内での SSL のコンフィグレーション

暗黙的なトランザクション管理を使用すると、トランザクション ユニットの一部として複数の Get 関数と Put 関数を一緒にグループ化することができなくなります。それぞれの Get 関数と Put 関数がトランザクション境界内で個別に処理されます。

明示的なトランザクション管理

MQSeries コントロールをコンフィグレーションするときに暗黙的なトランザクション管理を使用しない場合には、明示的なトランザクション管理が有効になります。明示的なトランザクション モードでは、MQSeries コントロール関数の Begin および Commit (または Rollback) を使用して、トランザクション境界を明示的に設定する必要があります。

以下の図は、明示的なトランザクション管理を使用してワークフローを作成するプロセスを示したものです。

サンプル : ワークフロー内での SSL のコンフィグレーション

メッセージ記述子を使用する

メッセージ記述子は、送信または受信されるメッセージのプロパティを表す属性です。メッセージのプロパティには、メッセージのタイプ、メッセージ ID、メッセージの優先順位などがあります。MQSeries コントロールでサポートされるすべてのメッセージ記述子の詳細なリストについては、「表 10-1 MQMDHeaders XML ドキュメントの要素」を参照してください。

MQSeries コントロールを使用すると、putMessage 関数を使用してメッセージを送信するときに各メッセージのメッセージ記述子を設定できます。キューから取リ出すメッセージのメッセージ記述子を取得することもできます。この機能は、putMessage 関数および getMessage 関数への入力として提供される MQMDHeaders ドキュメントを利用してサポートされます。MQMDHeaders ドキュメントは XMLBean を使用して表現され、MQSchemas.jar ファイルに格納されている MQMDHeaders スキーマに準拠します。

MQMDHeaders XML ドキュメントの以下の要素を MQMD パラメータの一部として設定できます。

表 10-1 MQMDHeaders XML ドキュメントの要素
要素名
説明
有効な値
関連する操作
MessageType
メッセージのタイプ
8 - データグラム
1 - 要求
2 - 応答
MQSeries で指定したアプリケーション定義またはシステム定義の範囲内であれば、他の正の整数も許可される。
Put 関数の要求、Put 関数の応答、Get 関数の応答
MessageId
メッセージの ID
16 進文字列
Put 関数の要求、Put 関数の応答、Get 関数の要求、Get 関数の応答
CorrelationId
メッセージの相関 ID
16 進文字列
Put 関数の要求、Put 関数の応答、Get 関数の要求、Get 関数の応答
GroupMessage
グループ メッセージを送受信するために必要な要素
 
Put 関数の要求、Put 関数の応答、Get 関数の要求、Get 関数の応答
GroupId
メッセージのグループ ID
16 進文字列
Put 関数の要求、Put 関数の応答、Get 関数の要求、Get 関数の応答
Priority
メッセージの優先順位
0 ~ 9
Put 関数の要求、Put 関数の応答、Get 関数の応答
Format
メッセージのフォーマット
有効な組み込み MQSeries フォーマットまたはユーザ定義のフォーマットを表す文字列値。文字列値は MQC.MQFMT_* の形式で表される。
Put 関数の要求、Put 関数の応答、Get 関数の応答
CharacterSet
メッセージの文字セット
有効な MQSeries 文字セット
Put 関数の要求、Put 関数の応答、Get 関数の応答
Persistence
メッセージの永続性のプロパティ
0 - 非永続的メッセージ
1 - 永続的メッセージ
Put 関数の要求、Put 関数の応答、Get 関数の応答
Segmentation
メッセージの分割のプロパティ
0 - 分割は許可されない
1 - 分割は許可される
Put 関数の要求
Expiry
メッセージの有効期限
正の整数または -1 (無期限)
Get 関数の要求、Put 関数の応答、Get 関数の応答
UserId
メッセージのユーザ ID
文字列
Put 関数の要求、Put 関数の応答、Get 関数の応答
MessageSequenceNumber
メッセージのメッセージ連続番号
0 以外の正の整数
Put 関数の要求、Put 関数の応答、Get 関数の要求、Get 関数の応答
GroupOptions
Put 関数の要求で、入れられるメッセージがグループ メッセージである場合にのみ使用。Get 関数の応答では、取得されるメッセージがグループ メッセージである場合にのみ指定される。
 
Put 関数の要求、Get 関数の応答
IsLastMessage
グループ メッセージの最後のメッセージを識別。この要素にはブール値を指定。
True または False
Put 関数の要求、Get 関数の応答
ReportOptions
メッセージを送信するときに設定されるレポート オプションを指定。
 
Put 関数の要求
COA
到着時の確認
COA レポート オプション
COA - COA レポートのみで、元のメッセージのデータなし。
COAWithData - COA レポートと元のメッセージの先頭の 100 バイト。
COAWithFullData - COA レポートと元のメッセージのすべてのデータ。
COA、COAWithData、COAWithFullData、なし
Put 関数の要求
COD
配信の確認
COD レポート オプション
COD - COD レポートのみで、元のメッセージのデータなし。
CODWithData - COD レポートと元のメッセージの先頭の 100 バイト。
CODWithFullData - COD レポートと元のメッセージのすべてのデータ。
COD、CODWithData、CODWithFullData、なし
Put 関数の要求
Exception
例外レポート オプション
Exception - 例外レポートのみで、元のメッセージ データなし。
ExceptionWithData - 例外レポートと元のメッセージの先頭の 100 バイト。
ExceptionWithFullData - 例外レポートと元のメッセージのすべてのデータ。
Exception、ExceptionWithData、ExceptionWithFullData、なし
Put 関数の要求
Expiration
有効期限レポート オプション
Expiration - 有効期限レポートのみで、元のメッセージ データなし。
ExpirationWithData - 有効期限レポートと元のメッセージの先頭の 100 バイト。
ExpirationWithFullData - 有効期限レポートと元のメッセージのすべてのデータ。
Expiration、ExpirationWithData、ExpirationWithFullData、なし
Put 関数の要求
Feedback
メッセージのフィードバック
正の整数
Put 関数の要求、Put 関数の応答、Get 関数の応答
ReplyToQueueName
レポートまたは応答 (リクエスト メッセージの場合のみ) の送信先キュー。
有効なキュー名を表す文字列
Put 関数の要求、Put 関数の応答、Get 関数の応答
ReplyToQueueManager
キューへの応答を含むキュー マネージャ
有効なキュー マネージャ名を表す文字列
Put 関数の要求、Put 関数の応答、Get 関数の応答
WaitInterval
メッセージを取得するまでの経過時間 (ミリ秒単位)
正の整数。-1 の場合は無限に待機。
Get 関数の要求
ApplicationIdData
 
文字列値
Put 関数の要求、Put 関数の応答、Get 関数の応答
ApplicationOriginData
 
文字列値
Put 関数の要求、Put 関数の応答、Get 関数の応答
PutApplType
メッセージを入れたアプリケーションのタイプ
正の整数値
Put 関数の要求、Put 関数の応答、Get 関数の応答
PutApplName
メッセージを入れたアプリケーションの名前
文字列値
Put 関数の要求、Put 関数の応答、Get 関数の応答
PutDateTime
メッセージを入れた日時
文字列値
Put 関数の応答、Get 関数の応答
AccountingToken
メッセージの会計情報
バイト配列
Put 関数の要求、Put 関数の応答、Get 関数の応答
Version
メッセージ記述子のバージョン情報
2 または 1
Put 関数の要求、Put 関数の応答、Get 関数の応答
MessageConsumption
getMessage 関数のメッセージ消費オプション
Browse - キューからメッセージを取得 (メッセージは削除されない)。
Delete - 取得後にメッセージをキューから削除する。
Browse、Delete
Get 関数の要求
MQGMO_CONVERT
Get 操作中にメッセージでデータ変換が必要かどうかを指定。
EBCDIC 文字セットのメッセージを取得する場合は、この要素を True に設定する必要がある。
True または False
Get 関数の要求

表 10-2 MQMDHeaders ドキュメントの属性
属性名
要素
説明
関連する操作
waitForAllMsgs
GroupMessage
グループ メッセージを取得する際に使用し、グループのすべてのメッセージがキューに入るまで、そのグループのメッセージは取得されないことを指定。この属性は通常、グループの最初のメッセージを取得するときにだけ指定される。
True または False
Get 関数の要求、Get 関数の応答
logicalOrder
GroupMessage
グループ メッセージを取得する際に使用し、グループのメッセージは、キュー内の順序に関係なく、メッセージ連続番号の順序で取得されることを指定。このオプションはグループのすべてのメッセージを取得するときに指定される。
True または False
Get 関数の要求、Get 関数の応答

MQMDHeaders ドキュメントのスキーマ

<?xml version="1.0"?>
<xs:schema targetNamespace="http://www.bea.com/wli/control/MQMDHeaders"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.bea.com/wli/control/MQMDHeaders" elementFormDefault="qualified">
<xs:element name="MQMDHeaders">
     <xs:complexType>
          <xs:sequence>
<xs:element name="MessageType" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="MessageId" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CorrelationId" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="GroupMessage" minOccurs="0" maxOccurs="1"> <xs:complexType>
     <xs:sequence>
<xs:element name="GroupId" type="xs:string" minOccurs="1" maxOccurs="1"/>
          </xs:sequence>
<xs:attribute name="waitForAllMsgs" type="xs:boolean" use="optional"/>
<xs:attribute name="logicalOrder" type="xs:boolean" use="optional"/>
     </xs:complexType>
          </xs:element>
<xs:element name="Priority" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="Format" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CharacterSet" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="Persistence" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="Segmentation" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="Expiry" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="UserId" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="MessageSequenceNumber" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="GroupOptions" minOccurs="0" maxOccurs="1">
     <xs:complexType>
          <xs:sequence>
               <xs:element name="IsLastMessage" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
          </xs:sequence>
     </xs:complexType>
</xs:element>
<xs:element name="ReportOptions" minOccurs="0" maxOccurs="1">
     <xs:complexType>
     <xs:sequence>
     <xs:element name="COA" type="xs:string" minOccurs="0" maxOccurs="1"/>
     <xs:element name="COD" type="xs:string" minOccurs="0" maxOccurs="1"/>
     <xs:element name="Exception" type="xs:string" minOccurs="0" maxOccurs="1"/>
     <xs:element name="Expiration" type="xs:string" minOccurs="0" maxOccurs="1"/>
     </xs:sequence>
     </xs:complexType>
     </xs:element>
<xs:element name="Feedback" type="xs:int" minOccurs="0" maxOccurs="1"/> <xs:element name="ReplyToQueueName" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ReplyToQueueManager" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="WaitInterval" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ApplicationIdData" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ApplicationOriginData" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="PutApplType" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element name="PutApplName" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="PutDateTime" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="AccountingToken" type="xs:base64Binary" minOccurs="0" maxOccurs="1"/>
<xs:element name="Version" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="MessageConsumption" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="MQGMO_CONVERT" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

MQMDHeaders ドキュメントのサンプル

以下のサンプル MQMDHeaders ドキュメントには、MQSeries コントロールを使用して設定できるほとんどのメッセージ記述子が含まれています。

<?xml version="1.0"?>
<even:MQMDHeaders xmlns:even="http://www.bea.com/wli/control/MQMDHeaders">
<even:MessageType>8</even:MessageType>
<even:MessageId>1111</even:MessageId> <even:CorrelationId>2222</even:CorrelationId>
<even:GroupMessage>
     <even:GroupId>3333</even:GroupId>
</even:GroupMessage>
<even:Priority>9</even:Priority>
<even:Format>MQSTR</even:Format> <even:CharacterSet>819</even:CharacterSet> <even:Persistence>1</even:Persistence> <even:Segmentation>1</even:Segmentation>
<even:Expiry>5000</even:Expiry>
<even:UserId>WebLogic</even:UserId> <even:MessageSequenceNumber>1</even:MessageSequenceNumber> <even:GroupOptions>
     <even:IsLastMessage>true</even:IsLastMessage>
</even:GroupOptions>
<even:ReportOptions>
     <even:COA>COAWithFullData</even:COA>
     <even:COD>CODWithFullData</even:COD>
     <even:Exception>ExceptionWithFullData</even:Exception>
     <even:Expiration>ExpirationWithFullData</even:Expiration> </even:ReportOptions>
<even:Feedback>1</even:Feedback>
<even:ReplyToQueueName>trial</even:ReplyToQueueName> <even:ReplyToQueueManager>QM_itpl_025051</even:ReplyToQueueManager> <even:ApplicationIdData>App_ID_025051</even:ApplicationIdData> <even:ApplicationOriginData>Windows_app_025051</even:ApplicationOriginData> <even:PutApplType>1</even:PutApplType> <even:PutApplName>MQSeriesClient</even:PutApplName> <even:Version>2</even:Version>
</even:MQMDHeaders>

XML Bean を使用して MQMDHeader 要素の値を設定する

XML Beans を使用すると、MQSeries コントロールの MQMDHeaders ドキュメント要素の値をプログラムで設定したり、戻り値をプログラムで取得したりできます。以下は、putMessage 関数を呼び出す前に MQMDHeader 要素の値を設定する例です。

headers = com.bea.wli.control.mqmdHeaders.MQMDHeadersDocument.Factory.newInstance();com.bea.wli.control.mqmdHeaders.MQMDHeadersDocument.MQMDHeaders header = headers.addNewMQMDHeaders();
header.setMessageType(MQC.MQMT_DATAGRAM);
header.setPriority(8);
header.setExpiry(5000);
header.setPersistence(MQC.MQPER_PERSISTENT);
header.getReportOptions().setCOA("COA"); header.setReplyToQueueName("ReportQueue"); header.setApplicationIdData("Testing"); header.setApplicationOriginData("AAAA");
header.setPutApplName("Websphere MQ 2"); header.setPutApplType(MQC.MQAT_JAVA);

メッセージの送受信

MQSeries コントロールを使用し、Put 関数と Get 関数を使用して、メッセージを送受信できます。バイト、文字列、または XML 形式のメッセージを送受信できます。

メッセージの送信

メッセージを送信するには、送信するメッセージのデータ型に基づいて putMessage 関数を選択します。

関数に渡される最初のパラメータは、キューに入れられるメッセージです。このパラメータで指定できる型は、バイナリ メッセージを送信する場合は byte[]、XML メッセージの場合は XmlObject、プレーン テキスト メッセージの場合は String です。

関数に渡される 2 番目のパラメータは、そのメッセージの送信先とするキューです。実行時に値が指定されていない場合、つまり値が null の場合は、コントロール プロパティで指定されたデフォルトのキュー名が使用されます。

関数に渡される 3 番目のパラメータは、実行時に XML ドキュメントとして提供される MQMDHeadersDocument を表す XML Bean です。このドキュメントは MQMDHeaders スキーマに準拠します。このドキュメントで指定された値は、送信されるメッセージの MQMD 属性の設定に使用されます。MQMDHeadersDocument パラメータが指定されていない場合、またはパラメータが null の場合は、メッセージ記述子のデフォルト値が設定されてメッセージがキューに入れられます。

関数の戻り値は、キューに送信されるメッセージの MQMD 属性を表す MQMDHeadersDocument です。

ビジネス プロセスで putMessage 関数を使用する

以下の手順は、ビジネス プロセスに MQSeries コントロールの putMessage 関数を追加する方法について示したものです。

  1. クライアント要求ノードを開きます。
  2. [一般的な設定] タブで、新しいメソッドの名前を入力します。
  3. [追加] をクリックし、XML 型のリストから [MQMDHeadersDocument] を選択します。[名前] フィールドに変数の名前を入力します。[OK] をクリックして、クライアント要求ノードに選択内容を追加します。これは、putMessage 関数の入力 MQMDHeaders ドキュメントを表します。
  4. [追加] をもう一度クリックし、[Java 型] リストから [String] を選択します。[名前] フィールドに変数の名前を入力します。[OK] をクリックして、クライアント要求ノードに選択内容を追加します。これは、putMessage 関数のキュー名を表します。
  5. [追加] をもう一度クリックし、[Java 型] リストから [String] を選択します。[名前] フィールドに変数の名前を入力します。[OK] をクリックして、クライアント要求ノードに選択内容を追加します。これが putMessage 関数のメッセージになります。
  6. [データの受信] タブで、クライアント要求ノードの [一般的な設定] タブで作成した 3 つのパラメータそれぞれの新しい変数を作成します。3 つのパラメータすべてに対して変数名を入力する必要があります。変数の型は、変数を割り当てるパラメータに基づいて、あらかじめ定義されます。
  7. クライアント要求ノードを閉じます。
  8. データ パレットの [コントロール] タブから、putMessageAsString 関数をビジネス プロセスまでドラッグし、クライアント要求ノードのすぐ下にドロップします。
  9. putMessageAsString 関数ノードの [データの送信] タブを開きます。[割り当てる変数を選択します] ドロップダウン リストから、クライアント要求ノードの [データの受信] タブで作成した変数を、[コントロールが予期する値] に表示されている putMessageAsString 関数の対応するパラメータに割り当てます。
  10. putMessageAsString 関数ノードの [データの受信] タブを開きます。[割り当てる変数を選択します] ドロップダウン リストから、putMessageAsString 関数の出力を格納する新しい変数を作成します。これは、送信されたメッセージの属性を表す MQMDHeaders ドキュメントです。

putMessageAsBytes 関数または putMessageAsXml 関数を使用してメッセージを送信する場合も、同様の手順で行います。

リモートのキュー マネージャにメッセージを送信する

MQSeries コントロールを使用して、リモート キュー マネージャが管理するリモート キューにメッセージを追加できます。これを行うには、MQSeries コントロールの接続先のキュー マネージャに転送キューをコンフィグレーションする必要があります。転送キューのコンフィグレーション方法については、http://www.IBM.com にある MQSeries のドキュメントを参照してください。

リモート キュー マネージャによって管理されるリモート キューにメッセージを追加するには、ワークフローで putMessage を呼び出す前に、以下の関数をドラッグ アンド ドロップする必要があります。

void setRemoteQueueManager(java.lang.String remoteQueueManager);

この関数のパラメータは、リモート キュー マネージャの名前です。このパラメータの値を設定するには、デザイン ビューremoteQueueManager ノードを開きます。[データの送信] タブで、文字列変数を選択または作成し、デフォルト値としてリモート キュー マネージャの名前を入力します。

リモート キュー マネージャをコンフィグレーションすると、setRemoteQueueManager 関数の後の putMessage 関数によって、メッセージがリモート キュー マネージャに入れられます。

コントロールの接続先のデフォルト (ローカル) キュー マネージャに戻す場合は、デザイン ビューで、setRemoteQueueManager をもう一度ワークフロー内にドラッグ アンド ドロップする必要があります。このときに、デフォルト値の null がこの関数のパラメータとして渡されます。この null 値または空の文字列によって、デフォルト キュー マネージャに制御が戻され、メッセージは自動的にローカル キューに追加されるようになります。

メッセージの受信

メッセージを受信するには、受信するメッセージのデータ型に基づいて get Message 関数を選択します。

関数の最初のパラメータ java.lang.String queue は、メッセージの受信元となるキューの名前です。実行時に値が指定されていない場合、つまり値が null の場合は、コントロール プロパティで指定されたデフォルトのキュー名が使用されます。

関数の 2 番目のパラメータ MQMDHeadersDocument は XML Bean です。これは実行時に XML ドキュメントとして提供された MQMDHeadersDocument を表し、MQMDHeaders スキーマに準拠しています。このドキュメントで指定された値は、ドキュメントで指定された MQMD 属性に対応するメッセージを取得するために使用されます。MQMDHeadersDocument パラメータが指定されていない場合、またはパラメータが null の場合は、キューに入っている最初のメッセージが取得されます。MQMDHeadersDocument パラメータが null でない場合、キューから取得したメッセージの MQMD 属性は、この XML Bean オブジェクトで更新されます。

注意 : getMessage 関数の MQMDHeadersDocument パラメータが null の場合は、ワークフローで getMessage 関数の後に getMQMDHeaders 関数を使用して、キューから取得したメッセージの MQMD 属性を取得する必要があります。また、getMessage 関数の MQMDHeadersDocument パラメータが null の場合は、デフォルトの MessageConsumption オプションとして Delete が使用されます。

関数の戻り値はキューから取得されたメッセージです。メッセージのデータ型は、追加された getMessage 関数によって異なります。取得されたメッセージがバイナリ メッセージとして処理される場合は byte[]、XML の場合は XmlObject、プレーン テキストの場合は String になります。

ビジネス プロセスで getMessage 関数を使用する

以下の手順は、ビジネス プロセスに MQSeries コントロールの getMessage 関数を追加する方法について示したものです。

  1. クライアント要求ノードを開きます。
  2. [一般的な設定] タブで、新しいメソッドの名前を入力します。
  3. [追加] をクリックし、[XML 型] のリストから [MQMDHeadersDocument] を選択します。[名前] フィールドに変数の名前を入力します。[OK] をクリックして、クライアント要求ノードに選択内容を追加します。これは、getMessage 関数の入力 MQMDHeaders ドキュメントを表します。
  4. [追加] をもう一度クリックし、[Java 型] リストから [String] を選択します。[名前] フィールドに変数の名前を入力します。[OK] をクリックして、クライアント要求ノードに選択内容を追加します。これは、getMessage 関数のキュー名を表します。
  5. [データの受信] タブで、クライアント要求ノードの [一般的な設定] タブで作成した 2 つのパラメータそれぞれの新しい変数を作成します。2 つのパラメータに対して変数名を入力する必要があります。変数の型は、その変数を割り当てるパラメータに基づいて、あらかじめ定義されます。
  6. クライアント要求ノードを閉じます。
  7. データ パレットの [コントロール] タブから、getMessageAsString 関数をビジネス プロセスまでドラッグし、クライアント要求ノードのすぐ下にドロップします。
  8. getMessageAsString 関数ノードの [データの送信] タブを開きます。[割り当てる変数を選択します] ドロップダウン リストから、クライアント要求ノードの [データの受信] タブで作成した変数を、[コントロールが予期する値] に表示されている getMessageAsString 関数の対応するパラメータに割り当てます。
  9. getMessageAsString 関数ノードの [データの受信] タブを開きます。[割り当てる変数を選択します] ドロップダウン リストから、getMessageAsString 関数の出力を格納する新しい変数を作成します。この出力は、キューから取得されたメッセージを表す文字列です。
  10. キューから取得されたメッセージのメッセージ記述子の属性は、MQMDHeaders ドキュメントで更新されますこのドキュメントは、getMessageAsString 関数への入力として提供されます。

getMessageAsBytes 関数または getMessageAsXml 関数を使用してメッセージを取得する場合も、同様の手順で行います。

グループ メッセージを送信する

MQSeries コントロールの putMessage 関数をループ内で使用すると、グループ メッセージを送信できます。ループは、While Do、Do while、または For Each プロセス ノードを使用して作成できます。

MQMDHeadersDocument 内に GroupOptions 要素を用意します。この要素は、グループ メッセージを送信する場合にのみ、入力 MQMDHeaders XML ドキュメントで指定する必要があります。

MQMDHeaders ドキュメントで、最後のメッセージを除くすべてのメッセージに対して GroupOptions 内の IsLastMessage 要素を False に設定します。最後のメッセージに対しては、IsLastMessage 要素を True に設定する必要があります。

最初のメッセージに対して GroupID を指定した場合、MQSeries コントロールはこの ID をグループ メッセージに割り当てます。最初のメッセージに対して GroupID を指定しない場合、MQSeries キュー マネージャは最初のメッセージにグループ ID を割り当てます。この ID は putMessage 関数の出力 MQMDHeaders ドキュメントで返されます。

最初のメッセージに割り当てられたグループ ID は、グループの以降のすべてのメッセージで使用される必要があります。グループの最初のメッセージの MessageSequenceNumber は 1 に、2 番目のメッセージの MessageSequenceNumber は 2 にします。

グループ メッセージを取得する

MQSeries コントロールの getMessage 関数をループ内で使用すると、グループ メッセージを取得できます。ループは、While Do、Do while、または For Each プロセス ノードを使用して作成できます。

logicalorder 属性を設定する

MQSeries コントロールを使用して、グループ メッセージを論理的な順序にしたがって取得できます。グループ メッセージを論理的な順序で取得するように MQSeries コントロールをコンフィグレーションするには、GroupMessage 要素の logicalOrder 属性を True に設定します。

明示的なトランザクション モードを使用している場合にのみ、論理的な順序でメッセージを取得できます。以下の図は、グループ メッセージを論理的な順序で取得する場合のワークフローの例を示しています。

サンプル : ワークフロー内での SSL のコンフィグレーション

getMessage 関数の応答 MQMDHeaders ドキュメントで、GroupOptions 要素内の IsLastMessage 要素が True に設定されるまで、ループが実行されます。

注意 : 取得されたメッセージがグループの一部でない場合は、Get 関数の応答 MQMDHeaders ドキュメントに GroupOptions 要素が出現しません。

グループのメッセージを論理的な順序で取得するには、Get サービスを呼び出すたびに logicalOrder 属性を True に設定する必要があります。論理的な順序とはメッセージ連続番号の順序であり、最初のメッセージの 1 から始まります。

グループ メッセージの取得中に logicalOrder 属性の値を True から False に変えると、Get サービスの前の呼び出しでその値が True だった場合、論理的な順序が変更されます。

logicalOrder 属性の値を False に設定するか、Get 関数の要求ドキュメントでこの属性を指定しない場合、コントロールはメッセージの連続番号に関係なく、メッセージがキューに入った順番で、グループの最初のメッセージを取得します。

論理的な順序でグループ メッセージを取得し、グループ内のすべてのメッセージの待機も行う、Get 関数の要求 MQMDHeaders ドキュメントの例を次に示します。

<?xml version="1.0"?>
<even:MQMDHeaders xmlns:even="http://www.bea.com/wli/control/MQMDHeaders"> <even:GroupMessage waitForAllMsgs="true" logicalOrder="true"> <even:GroupId></even:GroupId>
</even:GroupMessage>
<even:MessageConsumption>Delete</even:MessageConsumption>
</even:MQMDHeaders>

waitForAllMsgs 属性を設定する

グループのすべてのメッセージがキューに入るのを待ってからそのグループのメッセージを取得するように、MQSeries コントロールをコンフィグレーションできます。すべてのメッセージがキューに入るまで待機するように MQSeries コントロールをコンフィグレーションするには、GroupMessage 要素の waitForAllMsgs 属性の値を True に設定します。

注意 : waitForAllMsgs 属性と logicalOrder 属性の設定は省略可能であり、True または False に設定できます。

グループの最初のメッセージを取得するときに waitForAllMsgs を True に設定できます。logicalOrder 属性も True に設定している場合は、グループの最初のメッセージを取得した後、グループの他のメッセージを取得するために、この属性をもう一度 True に設定できます。

waitForAllMsgs 属性の値を False に設定するか、Get 関数の要求ドキュメントでこの属性を指定しない場合、コントロールは、グループのメッセージがすべてキューに入っていないときでも、キューからグループ メッセージを取得できます。

GroupId 要素を設定する

GroupId は、GroupMessage 要素に含めることのできる省略可能な要素です。この要素の値は、グループ メッセージの 16 進数のグループ ID が不明な場合には指定できません。キュー内に複数のグループ メッセージがある場合には、キューに最初に入ったグループ メッセージが取得されます。ID がわかっている場合には GroupId 値を指定できます。キュー内に複数のグループ メッセージがある場合に、GroupId を指定すると、指定した GroupId と一致するグループ メッセージが取得されます。

MessageSequenceNumber 要素を設定する

MessageSequenceNumber 要素と GroupId 要素を指定してグループ メッセージを取得することもできます。この方法でメッセージを取得できるのは、logicalOrder 属性の値が False に指定されているか、または指定されていない場合だけです。MessageSequenceNumberGroupId が指定されている場合は、MessageSequenceNumber と一致するグループのメッセージが取得されます。GroupId を指定し、ループ内の Get 関数呼び出しごとに MessageSequenceNumber を 1 つ増やすことによって、グループ メッセージをループ内で取得できます。この場合、最初のメッセージの MessageSequenceNumber は 1 になります。

MQSeries メッセージ記述子のフォーマットを使用する

フォーマットはメッセージ記述子の属性です特定のフォーマットのメッセージは、フォーマット タイプによって異なる特定の構造に準拠しています。たとえば、CICS、IMS、MQRFH2 などのフォーマットがあります。組み込みの MQSeries フォーマットの構造はそれぞれ異なり、MQSeries によって定義されています。MQSeries フォーマットの詳細については、以下の URL にある MQSeries のオンライン ドキュメントを参照してください。

http://www.ibm.com

MQSeries コントロールを使用して、組み込みの MQSeries フォーマットやユーザ定義フォーマットに対応するメッセージを送信できます。これを行うには、putMessageAsBytes 関数を使用する必要があります。

MQSeries フォーマットに準拠したメッセージを送信するには、プロセス JPD ファイルに Java コードを追加する必要があります。その例を以下に示します。

サンプル : CICS フォーマットに準拠するメッセージを送信する (putMessage 関数を使用)
  1. アプリケーションのプロセス JPD ファイルで、以下に示すように、putin などの変数を宣言します。
  2. public com.bea.wli.control.mqmdHeaders.MQMDHeadersDocument putin;

    この変数は、putMessage 関数の入力 MQMDHeaders ドキュメント XML Bean 変数を表します。

  3. 実行ノードをパレットからビジネス プロセスにドラッグ アンド ドロップし、クライアント要求ノードのすぐ下に置きます。
  4. 実行ノードをソース ビューで開き、以下のコードを追加します。
  5. public void perform() throws Exception
    {
    putin.getMQMDHeaders().setFormat(MQC.MQFMT_CICS);
    bytmsg = getCICSHeader();
    }
    public byte[] getCICSHeader() throws Exception {
    ByteArrayOutputStream bstream = new ByteArrayOutputStream();
    DataOutputStream ostream = new DataOutputStream (bstream); ostream.writeChars("CIH "); // Struct id
    ostream.writeInt(1);      // Version 
    ostream.writeInt(164);    // StrucLength
    ostream.writeInt(273);    // Encoding
    ostream.writeInt(819);    // CodedCharSetId
    ostream.writeChars("        "); // Format
    ostream.writeInt(0);      //Flags
    ostream.writeInt(0);      //ReturnCode
    ostream.writeInt(0);      //CompCode
    ostream.writeInt(0);      //Reason
    ostream.writeInt(273);    //UOWControl
    ostream.writeInt(-2);     //GetWaitInterval
    ostream.writeInt(1);      //LinkType
    ostream.writeInt(-1);     //OutputDataLength
    ostream.writeInt(0);      //FacilityKeepTime
    ostream.writeInt(0);      //ADSDescriptor
    ostream.writeInt(0);      //ConversationalTask
    ostream.writeInt(0);      //TaskEndStatus
    ostream.writeBytes("\0\0\0\0\0\0\0\0");   //Facility
    ostream.writeChars("    ");   //Function
    ostream.writeChars("    ");   //AbendCode
    ostream.writeChars("        ");   //Authenticator
    ostream.writeChars("        ");   //Reserved1
    ostream.writeChars("        ");   //ReplyToFormat
    ostream.writeChars("    "); //RemoteSysId
    ostream.writeChars("    "); //RemoteTransId
    ostream.writeChars("    "); //TransactionId
    ostream.writeChars("    "); //FacilityLike
    ostream.writeChars("    "); //AttentionId
    ostream.writeChars("    "); //StartCode
    ostream.writeChars("    "); //CancelCode
    ostream.writeChars("    "); //NextTransactionId
    ostream.writeChars("        "); //Reserved2
    ostream.writeChars("        "); //Reserved3
    ostream.writeChars("HelloWorld");
    ostream.flush();
    byte[] bArr = bstream.toByteArray();
    return bArr;
    }

    このコードは、putMessage 関数の入力 MQMD Headers ドキュメント内の Format 要素を、文字列 MQCICS で表す MQC.MQFMT_CICS に設定します。

    getCICSHeader 関数は、CICS ヘッダで表現されたフィールドをバイト配列の出力ストリームに書き出して、バイト配列を返します。この例で示すフィールドの値は、必要に応じて変更できます。実際のメッセージをバイト配列の最後に追加し、MQSeries キューに Put することができます。バイト配列は putMessageAsBytes 関数の最初のパラメータとして指定できます。これは、プロセス JPD ファイルの実行ノードの後に追加されます。putMessage 関数の詳細については、「メッセージの送受信」を参照してください。

サンプル : IMS フォーマットに準拠するメッセージを送信する (putMessage 関数を使用)
  1. アプリケーションのプロセス JPD ファイルで、以下に示すように、putin などの変数を宣言します。
  2. public com.bea.wli.control.mqmdHeaders.MQMDHeadersDocument putin;

    この変数は、putMessage 関数の入力 MQMDHeaders ドキュメント XML Bean 変数を表します。

  3. 実行ノードをパレットからビジネス プロセスにドラッグ アンド ドロップし、クライアント要求ノードのすぐ下に置きます。
  4. 実行ノードをソース ビューで開き、以下のコードを追加します。
  5. public void perform() throws Exception
    {
    putin.getMQMDHeaders().setFormat(MQC.MQFMT_IMS);
    bytmsg = getIMSHeader();
    }
    public byte[] getIMSHeader() throws Exception {
    ByteArrayOutputStream bstream = new ByteArrayOutputStream();
    DataOutputStream ostream = new DataOutputStream (bstream);
    ostream.writeBytes("IIH "); // Struct id
    ostream.writeInt(1); // Version
    ostream.writeInt(84); // Length
    ostream.writeInt(0); // Encoding
    ostream.writeInt(0); // CodedCharacterSet
    ostream.writeBytes(" "); // Format (8 characters)
    ostream.writeInt(0); // Flags
    ostream.writeBytes(" "); // LTermOverride
    ostream.writeBytes(" "); // MFSMapName
    ostream.writeBytes(" "); // ReplyToFormat
    ostream.writeBytes(" "); // Authenticator
    ostream.writeBytes("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); // TransInstanceId
    ostream.writeBytes(" "); //Transtate
    ostream.writeBytes("1"); // CommitMode
    ostream.writeBytes("F"); // Security Scope
    ostream.writeBytes(" "); // Resrved
    ostream.writeChars("HelloWorld");
    ostream.flush();
    byte[] bArr = bstream.toByteArray();
    return bArr;
    }

    上記のコード行は、putMessage 関数の入力 MQMD Headers ドキュメント内の Format 要素を、文字列 MQIMS で表す MQC.MQFMT_IMS に設定します。

    getIMSHeader 関数は、IMS ヘッダ構造で表現されたフィールドをバイト配列の出力ストリームに書き出して、バイト配列を返します。この例で示すフィールドの値は、必要に応じて変更できます。実際のメッセージをバイト配列の最後に追加し、MQSeries キューに Put することができます。バイト配列は putMessageAsBytes 関数の最初のパラメータとして指定できます。これは、プロセス JPD ファイルの実行ノードの後に追加されます。putMessage 関数の詳細については、「メッセージの送受信」を参照してください。

サンプル : MQRFH2 フォーマットに準拠するメッセージを送信する (putMessage 関数を使用)
  1. アプリケーション内のプロセス プロジェクトの JPD ファイルで、以下に示すように、putin などの変数を宣言します。
  2. public com.bea.wli.control.mqmdHeaders.MQMDHeadersDocument putin;

    この変数は、putMessage 関数の入力 MQMDHeaders ドキュメント XML Bean 変数を表します。

  3. 実行ノードをパレットからビジネス プロセスにドラッグ アンド ドロップし、クライアント要求ノードのすぐ下に置きます。
  4. 実行ノードをソース ビューで開き、以下のコードを追加します。
  5. public void perform() throws Exception
    {
    putin.getMQMDHeaders().setFormat(MQC.MQFMT_RF_HEADER_2);
    bytmsg = getMQRFH2Header();
    }
    public byte[] getMQRFH2Header() throws Exception { ByteArrayOutputStream bstream = new ByteArrayOutputStream(); DataOutputStream ostream = new DataOutputStream (bstream);
    String strVariableData = "<mcd><Msd>jms_text</Msd></mcd><jms><Dst>someplace</Dst></jms>";
    int iStrucLength = MQC.MQRFH_STRUC_LENGTH_FIXED_2 + strVariableData.getBytes().length;
    while(iStrucLength % 4 != 0)
    {
    strVariableData = strVariableData + " ";
    iStrucLength = MQC.MQRFH_STRUC_LENGTH_FIXED_2 + strVariableData.getBytes().length;
    }
    ostream.writeChars(MQC.MQRFH_STRUC_ID);//StrucID ostream.writeInt(MQC.MQRFH_VERSION_2);//Version ostream.writeInt(iStrucLength );//StrucLength ostream.writeInt(273);//Encoding ostream.writeInt(1208);//CodedCharSetID ostream.writeChars(MQSTR);//Format ostream.writeInt(MQC.MQRFH_NO_FLAGS);//Flags ostream.writeInt(1208);//NameValueCCSID ostream.writeInt(strVariableData.getBytes().length);//NameValueLength ostream.writeChars(strVariableData ); //NameValueData ostream.writeChars("HelloWorld");
    ostream.flush();
    byte[] bArr = bstream.toByteArray();
    return bArr;
    }

    上記のコードは、putMessage 関数の入力 MQMD Headers ドキュメント内の Format 要素を、文字列 MQHRF2 で表す MQC.MQFMT_RF_HEADER_2 に設定します。

    getMQRFH2Header 関数は、MQRFH2 ヘッダ構造で表現されたフィールドをバイト配列の出力ストリームに書き出して、バイト配列を返します。この例で示すフィールドの値は、必要に応じて変更できます。実際のメッセージをバイト配列の最後に追加し、MQSeries キューに Put することができます。バイト配列は putMessageAsBytes 関数の最初のパラメータとして指定できます。これは、プロセス JPD ファイルの実行ノードの後に追加されます。putMessage 関数の詳細については、「メッセージの送受信」を参照してください。

動的なプロパティを設定する

MQSeries コントロールのプロパティは、実行時に動的に変更できます。変更できる MQSeries コントロールのプロパティは MQDynamicProperties ドキュメントで指定されます。このドキュメントは、MQSchemas.jar ファイル内にある MQDynamicProperties スキーマに準拠します。

プロパティを動的に変更するには、以下を実行します。

  1. クライアント要求ノードを開きます。[一般的な設定] タブで、MQDynamicProperties ドキュメント型の変数を追加します。
  2. [データの受信] タブで変数名を入力して、クライアント要求ノードの [一般的な設定] タブで作成したパラメータ用の新しい変数を作成します。変数の型は、変数を割り当てるパラメータに基づいて、すでに定義されています。
  3. データ パレットの [コントロール] タブから、setDynamicProperties 関数をビジネス プロセスにドラッグ アンド ドロップします。
  4. setDynamicProperties 関数ノードの [データの送信] タブを開きます。[割り当てる変数を選択します] ドロップダウン リストから、クライアント要求ノードの [データの受信] タブで作成した変数を、[コントロールが予期する値] に表示されている setDynamicProperties 関数の対応するパラメータに割り当てます。ビジネス プロセス内で setDynamicProperties 関数に続くすべての MQSeries の Get 操作および Put 操作では、MQDynamicProperties ドキュメントで指定するプロパティを使用します。
  5. 実行時にビジネス プロセスを実行するときに、MQDynamicProperties ドキュメントを入力として提供します。
警告 : 明示的なトランザクション モードを使用する場合は、必ず Begin 関数の前か、Commit 関数または Rollback 関数の後に、setDynamicProperties 関数を呼び出します。この順序に従わない場合、ビジネス プロセスは実行時に例外をスローします。

MQDynamicProperties のスキーマ

<?xml version="1.0"?>
<xs:schema xmlns="http://www.bea.com/wli/control/MQDynamicProperties" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.bea.com/wli/control/MQDynamicProperties" elementFormDefault="qualified" attributeFormDefault="unqualified">	<xs:element name="MQDynamicProperties">
<xs:complexType>
<xs:sequence>
<xs:element name="connectionType" type="connType" minOccurs="0" maxOccurs="1"/>
<xs:element name="queueManager" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="requireAuthorization" type="authType" minOccurs="0" maxOccurs="1"/>
<xs:element name="host" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="port" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="channel" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ccsid" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="user" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="sendExit" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="receiveExit" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="securityExit" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="defaultQueueName" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="implicitTransactionRequired" type="transType"
minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="connType">
<xs:restriction base="xs:string">
<xs:enumeration value="Bindings"></xs:enumeration>
<xs:enumeration value="TCP"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="authType">
<xs:restriction base="xs:string">
<xs:enumeration value="Yes"></xs:enumeration>
<xs:enumeration value="No"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="transType">
<xs:restriction base="xs:string">
<xs:enumeration value="true"></xs:enumeration>
<xs:enumeration value="false"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:schema>

MQDynamicProperties ドキュメントのサンプル

以下は、MQDynamicProperties ドキュメントのサンプルです。実行時に、ビジネス プロセスを実行するときに、このドキュメントを提供する必要があります。

<?xml version="1.0"?>
<even:MQDynamicProperties
xmlns:even="http://www.bea.com/wli/control/MQDynamicProperties">
<even:connectionType>TCP</even:connectionType>
<even:queueManager>newqm</even:queueManager>
<even:requireAuthorization>Yes</even:requireAuthorization>
<even:host>localhost</even:host>
<even:port>1869</even:port>
<even:channel>chn</even:channel>
<even:ccsid>437</even:ccsid>
<even:user>WebLogic</even:user>
<even:password>WebLogic</even:password>
<even:defaultQueueName>errqueue</even:defaultQueueName>
</even:MQDynamicProperties>

MQSeries コントロールで SSL をコンフィグレーションする

MQSeries コントロールをコンフィグレーションするときに TCP 接続モードを選択した場合にのみ、SSL 機能を使用できます。MQSeries コントロールのコンフィグレーション オプションの詳細については、「MQSeries コントロールの新しいインスタンスを作成およびコンフィグレーションする」を参照してください。

ここでは以下について説明します。

SSL 暗号スイートを設定する

サーバサイドの SSL プロパティを設定する

クライアントサイドの SSL プロパティを設定する

サンプル : ワークフロー内での SSL のコンフィグレーション

SSL 暗号スイートを設定する

暗号スイート アルゴリズムは、MQSeries サーバと MQSeries クライアントとの間のメッセージ通信を暗号化および復号化する際に使用されます。新しい MQSeries コントロールを作成するときに 2 つの SSL オプションのいずれかを選択した場合は、メッセージをキューとの間でやり取りする前に、SSL 暗号スイートを設定する必要があります。これを行うには、以下の関数を使用します。

void setSSLCipherSuite(java.lang.String cipherSuite);

この関数のパラメータは、選択した SSL 暗号スイートを表す文字列です。暗号スイートのさまざまな値を、MQControlConstants クラスの final static 変数から取得できます。

サーバサイドの SSL プロパティを設定する

MQSeries コントロールのいずれかの SSL オプションを有効にした後は、メッセージをキューとの間でやり取りする前に、サーバサイドの SSL プロパティを設定する必要があります。これを行うには、以下の関数を使用します。

void setServerSideSSL(java.lang.String trustStoreLocation, java.lang.String trustStoreType, java.lang.String trustStorePassword) throws com.bea.control.ControlException;

この関数に指定するパラメータは以下のとおりです。

クライアントサイドの SSL プロパティを設定する

MQSeries コントロールの双方向 SSL を有効にした後は、メッセージをキューとの間でやり取りする前に、サーバサイドおよびクライアントサイドの SSL プロパティを設定する必要があります。クライアントサイドの SSL プロパティを設定するには、次の関数を使用します。

void setClientSideSSL(java.lang.String keyStoreLocation, java.lang.String keyStoreType, java.lang.String keyStorePassword, java.lang.String keyPassword);

この関数に指定するパラメータは以下のとおりです。

サンプル : ワークフロー内での SSL のコンフィグレーション

新しい MQSeries コントロールを作成するときに 2 つの SSL オプションのいずれかを選択した後は、ワークフローが、以下の図に示す MQSeries コントロールの関数の呼び出し順序に従う必要があります

図 10-1 サンプル : ワークフロー内での SSL のコンフィグレーション

サンプル : ワークフロー内での SSL のコンフィグレーション

警告 : SSL 認証が必要な場合に、ワークフローが図 10-1 の順序に従っていないと、MQSeries コントロールは実行時に例外をスローします。

SSL 接続用にキュー マネージャを設定する方法については、http://www.IBM.com にある MQSeries 製品のドキュメントを参照してください。SSL は WebSphere MQ バージョン 5.3 以降でのみサポートされます。

MQSeries コントロール 8.1 SP3 の JCX ファイルを移行する

MQSeries コントロール バージョン 8.1 SP3 が含まれるワークフローを、MQSeries コントロール バージョン 8.1 SP4 が含まれるワークフローに移行する場合は、Workshop アプリケーションを以下のように変更する必要があります。

MQSeries イベント ジェネレータを使用する

MQSeries イベント ジェネレータは、MQSeries キューをポーリングしてメッセージの有無を確認し、WebLogic メッセージ ブローカ チャネルにメッセージをパブリッシュします。MQSeries イベント ジェネレータは、3 種類のデータ型 (バイト、文字列、および XML) をサポートします。

メッセージ ブローカ チャネル名を使用して、データ型ごとにイベント ジェネレータ チャネルをコンフィグレーションできます。それにより、指定した MQSeries キューにメッセージが入ると、そのメッセージ ブローカ チャネルにメッセージがパブリッシュされます

MQSeries コントロールと同様に、MQSeries イベント ジェネレータにも 2 つの接続モード (TCP-IP とバインディング) があります。コンテンツフィルタを実装して、特定のコンテンツに基づいてメッセージをフィルタ処理することもできます。それにより、必要なメッセージに対してだけイベントを生成できます。

MQSeries イベント ジェネレータは、イベントの複数のスレッドを開始することもできます。それぞれのスレッドが、MQSeries キューを個別にポーリングできます。それぞれのポーリングでイベント ジェネレータ スレッドが取得するメッセージの数をコンフィグレーションできます。

詳細については、「Integration イベント ジェネレータの使用」を参照してください。


  ページの先頭       前  次