2.3.3 メッセージの受け渡し
Reliable Messagingは,アプリケーションとキューとの間でメッセージの受け渡しをします。
(1) メッセージの受け渡し方式
アプリケーションとキューとの間でメッセージを受け渡す方式には,値渡し方式と参照渡し方式の二つ方法があります。それぞれの方法について説明します。
(a) 値渡し方式
値渡し方式は,Reliable Messagingで扱うメッセージとアプリケーションが保持するメッセージを分離する方式です。そのため,アプリケーションが1度登録したメッセージを変更したり,取り出したメッセージを再び登録したりできます。Reliable Messagingは,メッセージの登録時および取り出し時にメッセージをコピーします。
値渡し方式を利用したメッセージの受け渡しの概要を次の図に示します。
(b) 参照渡し方式
参照渡し方式は,アプリケーションが保持するメッセージをそのままReliable Messagingで扱う方式です。アプリケーションがReliable Messagingと同じメッセージのインスタンスを参照するため,アプリケーションでメッセージを利用するときに,メッセージの再利用ができないなどの制限があります。しかし,値渡し方式よりも高速にメッセージを送受信できます。
参照渡し方式を利用する場合,RMPassByReferenceプロパティにtrueを指定します。
参照渡し方式を利用したメッセージの受け渡しの概要を次の図に示します。
(2) 参照渡し方式を利用した場合の動作
参照渡し方式では,送信側アプリケーションが保持するメッセージと受信側アプリケーション(受信をロールバックした場合,ロールバックする前の受信側アプリケーションを含む)が保持するメッセージが同じインスタンスとなります。そのため,最後の受信側アプリケーションがメッセージを受信すると,送信側アプリケーションと以前の受信側アプリケーションが保持するメッセージは,最後の受信側アプリケーションのメッセージと同じ状態となります。
参照渡し方式を利用した場合の動作を次の図に示します。
図2-14に示すように,送信側アプリケーションと受信側アプリケーションでは次の状態となります。
-
送信側アプリケーションと以前の受信側アプリケーション(受信側アプリケーション(1))が保持し続けているメッセージから取得できる情報は,最後の受信側アプリケーション(受信側アプリケーション(2))が保持するメッセージと等しくなる。
-
送信側アプリケーションと以前の受信側アプリケーション(受信側アプリケーション(1))がMessage.acknowledge()メソッドを呼び出すと,最後の受信アプリケーション(受信側アプリケーション(2))が保持するメッセージの受信を承認したことになる。
(3) 参照渡し方式を利用した場合のメッセージの再利用
参照渡し方式を利用した場合,Reliable Messagingが持つメッセージのインスタンスをアプリケーションも保持していることがあります。そのため,アプリケーションによるメッセージの再利用は行えません。メッセージの再利用とは,Reliable Messagingのキューに登録されたメッセージまたは登録を試みたメッセージを,再び登録することやそのメッセージに設定した情報を変更することです。アプリケーションによってメッセージを再利用した場合はエラーが発生します。再利用できないメッセージを次に示します。
-
QueueSenderインタフェースを使用して登録したメッセージ(登録失敗およびロールバックしたメッセージを含む)
-
QueueReceiverインタフェースを使用して取り出したメッセージ
-
MDBによって配信されたメッセージ
-
QueueBrowserインタフェースを使用して参照したメッセージ