メッセージング処理基盤
通信層などメッセージング処理の基盤部分にイベントサービスのノーティフィケーションサービスを利用します。
JMSクライアントからのメッセージ送受信要求を受けるとノーティフィケーションサービスのイベントチャネルに対してメッセージの送受信を行います。
メッセージング基盤にノーティフィケーションサービスを使用しているため、ノーティフィケーションサービスを介したCORBAアプリケーションとの連携が可能となります。
通信層などメッセージング処理の基盤部分にメッセージブローカ独自の機能を利用します。
JMSクライアントからのメッセージ送受信要求を受けるとメッセージブローカの物理格納先に対してメッセージの送受信を行います。
メッセージング基盤にメッセージブローカ独自の機能を使用しているため、J2EE機能のJMSで可能であったノーティフィケーションサービスを介したCORBAアプリケーションとの連携ができません。
メッセージの不揮発化機能
メッセージの不揮発化機能を使用する場合、メッセージの保存先(ユニット)を作成後、不揮発メッセージ専用のイベントチャネルを作成する必要があります。
不揮発メッセージ専用のイベントチャネルでは、揮発メッセージを蓄積することができません。揮発メッセージと不揮発メッセージを混在させてメッセージを送信する場合は、不揮発メッセージ用と揮発メッセージ用のイベントチャネルを作成する必要があります。
単一の物理格納先に揮発メッセージと不揮発メッセージを混在させて蓄積することができます。
メッセージの有効期間
メッセージの有効期間までにメッセージコンシューマへ配信されていないメッセージは、すべて破棄されます。
メッセージコンシューマがメッセージブローカに接続した時点で、メッセージコンシューマに配信可能なメッセージを配信します。
メッセージコンシューマに配信されたメッセージで、まだ受信処理が行われていないメッセージは、有効期間を超過しても破棄されません。当該メッセージは、アプリケーションの受信処理が行われる際に破棄されます。
メッセージブローカに接続した時点で配信されるメッセージの数は、メッセージブローカまたは物理格納先のconsumerFlowLimitプロパティで変更できます。
トランザクション種別
クライアントとトランザクション種別の組み合わせは、以下となります。
クライアント種別 | |||||
---|---|---|---|---|---|
Servlet/JSP | EJBアプリケーション | J2EEアプリケーションクライアント | Java SEスタンドアロンアプリケーション | ||
トランザクション種別 | JTSを使用したトランザクション管理機能 | △ | △ | △ | △ |
JMSのローカルトランザクション機能 | ○ | ○ | ○ | ○ |
○:初期設定で使用可能
△:グローバルトランザクション機能を使用するConnectionFactory定義を作成した場合に使用可能
クライアントとトランザクション種別の組み合わせは、以下となります。
クライアント種別 | |||||
---|---|---|---|---|---|
Servlet/JSP | EJBアプリケーション | アプリケーションクライアントコンテナ | Java SE スタンドアロンアプリケーション | ||
トランザクション種別 | JTAを使用したトランザクション管理機能 | ○ | ○ | - | - |
リソースマネージャが提供するトランザクション管理機能 | - | - | ○ | ○ |
○:使用可能
-:使用不可
上記の表に記載されているJava EE 7機能の用語は、以下のように読み替えてください。
Java EE 7機能の用語 | 読み替える用語 |
---|---|
JTAを使用したトランザクション管理機能 | JTSを使用したトランザクション管理機能 |
リソースマネージャが提供するトランザクション管理機能 | JMSのローカルトランザクション機能 |
アプリケーションクライアントコンテナ | J2EEアプリケーションクライアント |
トランザクション運用時のメッセージの欠落
メッセージ蓄積可能なデータ数の上限値を超過してメッセージを送信した場合、トランザクションのcommit時にクライアントへエラーが通知されます。
メッセージ蓄積可能なデータ数の上限値を超過してメッセージを送信した場合、JMS-APIのsendメソッド実行時にクライアントへエラーが通知されます。
トランザクション運用時のメッセージの有効期間
メッセージの有効期間監視は、トランザクションのcommit後に開始されます。
メッセージの有効期間監視は、JMS-APIのsendメソッドの実施後に開始されます。
Webコンテナ/EJBコンテナで使用できるJMS API
Webコンテナ/EJBコンテナで使用できるJMS APIは、J2EE機能とJava EE 7機能で以下のように違います。
インタフェース名/クラス名 | メソッド | J2EE機能 | Java EE 7機能 |
---|---|---|---|
javax.jms.Connection | setExceptionListener() (注1) | ○ | × |
stop() | ○ | × | |
javax.jms.QueueConnection | createConnectionConsumer() | ○ | × |
javax.jms.Session | run() | ○ | × |
javax.jms.TopicConnection | createConnectionConsumer() | ○ | × |
createDurableConnectionConsumer() | ○ | × |
○:使用可能
-:使用不可
注1) Java EE 7機能で使用できないため、Webコンテナ/EJBコンテナでは、Message Listenerの使用は推奨されていません。Message-driven Beanを使用してください。