Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 解説


2.10.2 Message Queueアダプタを使ったメッセージキューへのアクセス

Message Queueアダプタによるメッセージ送受信について,次の図に示します。

図2‒85 Message Queueアダプタによるメッセージ送受信の実行

[図データ]

注意事項
  • Message Queueアダプタはビジネスプロセスからの要求ごとにコネクション解放処理を実行しますが,実際には,リソースアダプタのコネクションプール機能によって一定時間(デフォルト5分)リソースアダプタとIBM MQ間のコネクションは切断されません。

    Connector属性ファイルの指定(デフォルトは切断しない)に依存します。

  • コネクション解放処理でコネクションの解放に失敗すると,Message Queueアダプタは,コネクション解放状態となりますが,接続先のJMSプロバイダシステムではコネクションの解放を検知していない場合があります。そのため,コネクション状態の不整合が発生し,次の通信処理が失敗する可能性があります。その場合は接続先JMSプロバイダシステムでコネクション確立状態を1度初期化する対応が必要です。

〈この項の構成〉

(1) Message Queueアダプタの送信オプション

Message Queueアダプタのメッセージ送信機能は,ビジネスプロセスからのメッセージ送信要求に従い,リソースアダプタを経由し,JMSプロバイダとコネクション接続およびセッション設定を行い,JMSプロバイダへメッセージを送信する機能です。

メッセージの種類は,XML形式メッセージおよびバイナリ形式メッセージを送信できます。

メッセージを送信する場合,送信オプション(JMSプロパティ)を指定できます。Message Queueアダプタ送信オプション一覧を次に示します。

表2‒25 Message Queueアダプタ送信オプション一覧

項目

送信オプションの概要

指定方法

電文

定義

メッセージ送信先

(JMSDestination)

メッセージの送信キュー。

メッセージ保持時間

(JMSExpiration)

メッセージの保持時間。メッセージ保持時間とは,JMSプロバイダの送信キューに保持し続ける時間のことです。

×

メッセージ永続性

(JMSDeliveryMode)

メッセージの永続性。メッセージ永続性とは,システム障害後,またはJMSプロバイダを再開した場合など,メッセージをキューに保持するかどうかの指定です。

×

メッセージ識別ID

(JMSMessageID)

メッセージを識別するID。

IBM MQ Resource Adapterを使用する場合,任意の情報が設定されます。

タイムスタンプ

(JMSTimestamp)

メッセージのタイムスタンプ。

報告メッセージ送信先

(JMSReplyTo)

報告メッセージの送信キュー。

×

×

メッセージタイプ

(JMSType)

メッセージタイプ。

×

相関識別子

(JMSCorrelationID)

メッセージの相関識別子。

×

優先度

(JMSPriority)

メッセージの優先度。IBM MQ Resource Adapterの場合,4が設定されます。

(凡例) 指定方法:

電文:ビジネスプロセスからの要求電文による指定の有無。

定義:Message Queueアダプタ通信構成定義ファイルによる指定の有無。

○ :指定できます。

△ :メッセージ相関識別子のプレフィックスだけ指定できます。

   メッセージ相関識別子を送信する場合,Message Queueアダプタが自動生成します。

× :指定できません。

− :Message Queueアダプタでは設定しない。リソースアダプタの仕様に依存します。

メッセージ相関識別子を設定したメッセージ送信は,「2.10.2(2) メッセージ相関識別子の生成方法」を参照してください。

メッセージ送信機能の概要を次に示します。

図2‒86 メッセージ送信機能

[図データ]

  1. Message Queueアダプタは,ビジネスプロセスからのメッセージ送信要求を受けてコネクションを接続します。

  2. コネクション接続後,送信キューとのセッションを設定します。

  3. メッセージ送信要求を実行し,メッセージを送信キューに格納します。Message Queueアダプタ通信構成定義ファイルに送信オプションの指定がある場合,送信オプションを設定してメッセージを送信します。

  4. メッセージ送信完了後,セッションを解放します。

  5. JMSプロバイダとのコネクションを切断します。

    コネクション切断後,メッセージ送信応答をビジネスプロセスに返します。

(2) メッセージ相関識別子の生成方法

Message Queueアダプタは,Message Queueアダプタ通信構成定義ファイルの<id_type>タグでType2が指定されている場合,メッセージ相関識別子を自動的に生成し送信メッセージに付与します。

メッセージ相関識別子は,プレフィックスとMessage Queueアダプタ固有情報から構成されています。メッセージ相関識別子の生成方法は,プレフィックスを付与する場合としない場合の2つの方法があります。

なお,Message Queueアダプタ固有情報は,Message Queueアダプタが設定する情報です。

(a) プレフィックスを付与しない場合

メッセージ相関識別子にプレフィックスを付与しない場合は,<JMSCorrelID_PFX>タグの指定がない場合です。

この場合,先頭6バイトを0(ゼロ)パディングしたものと,Message Queueアダプタ固有情報を合わせてメッセージ相関識別子とします。

図2‒87 メッセージ相関識別子の生成方法(プレフィックスなし)

[図データ]

(b) プレフィックスを付与する場合

メッセージ相関識別子にプレフィックスを付与する場合は,<JMSCorrelID_PFX>タグが指定されている場合に,<JMSCorrelID_PFX>タグ値をメッセージ相関識別子の一部とします。プレフィックスは最大で6バイト指定できますが,6バイト未満の場合は,先頭から0(ゼロ)パディングして6バイトとします。例えば,<JMSCorrelID_PFX>タグの指定値が”ABC”の場合,”000ABC”をプレフィックス部分に設定します。

このプレフィックスとMessage Queueアダプタ固有情報を合わせてメッセージ相関識別子とします。

図2‒88 メッセージ相関識別子の生成方法(プレフィックスあり)

[図データ]

参考

メッセージ相関識別子を設定したメッセージ送信が失敗した場合,データトレースから送信メッセージおよびメッセージ相関識別子を特定できます。

(3) Message Queueアダプタ使用時のトランザクション

リソースアダプタで提供されるトランザクションサポートレベルは「LocalTransaction」または「XATransaction」を指定してください。ただし,「LocalTransaction」はビジネスプロセスでステータスの永続化をしない場合だけ指定できます。「NoTransaction」は指定できません。

「LocalTransaction」または「XATransaction」を指定すると,JTA(Java Transaction API)と関連を持ちます。例えば,JTAのトランザクションタイムアウト指定値がMessage Queueアダプタ通信構成定義ファイルのメッセージ受信応答監視時間(receive_timeout)より短い場合,JTAのトランザクションタイムアウト指定値でタイムアウトします。

ビジネスプロセスからメッセージ受信要求またはメッセージ送受信要求を受けると,Message Queueアダプタはメッセージ受信要求を発行します。このメッセージ受信要求に対してリソースアダプタが一定時間内にメッセージを受信できない場合,リソースアダプタはメッセージ受信応答監視時間のタイムアウトとなります。リソースアダプタからの通知に従い,Message Queueアダプタは,ビジネスプロセスへFault応答情報を通知します。また,ビジネスプロセスからブラウズ・メッセージ受信要求を受け,ブラウズ・メッセージ受信要求を行いますが,受信キューにメッセージが存在しない場合も,ビジネスプロセスへFault応答情報を通知します。

フォルトが発生したときの処理の定義については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「5.4.4 フォルト処理を定義する」を参照してください。

(4) メッセージ送信や受信で使用するJMS API

(a) メッセージ送信

javax.jms.BytesMessageとjavax.jms.TextMessageの送信をサポートしています。

Message Queueアダプタは次のメソッドを使用して,メッセージインスタンスにデータを書き込みます。

  • javax.jms.TextMessageの場合:javax.jms.TextMessage#setText()

  • javax.jms.BytesMessageの場合:javax.jms.BytesMessage#writeBytes()

(b) メッセージ受信,またはブラウズ・メッセージ受信

javax.jms.BytesMessageとjavax.jms.TextMessageの受信をサポートしています。

Message Queueアダプタは次のメソッドを使用して,メッセージインスタンスからデータを読み取ります。

  • javax.jms.TextMessageの場合:javax.jms.TextMessage#getText()

  • javax.jms.BytesMessageの場合:javax.jms.BytesMessage#readBytes()