概要
JMS
JMSは,JavaからMOM (Message-Oriented Middleware) を使用して非同期メッセージを送受信するための仕様です. ちょうど,RDBMSに対するJDBCと同等の位置づけとなります. JMSに対応した主なMOMとしては,IBM WebSphere MQ (formerly known MQSeries)や, Apache ActiveMQ 等があります.
JMSを利用する場合,典型的には次のようなコードが必要となります.
ConnectionFactory connectionFactory = ...; //JNDIルックアップまたはベンダ固有の実装クラスをnew Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(true, Session.SESSION_TRANSACTED); Queue queue = session.createQueue("QUEUE"); MessageProducer producer = session.createProducer(queue); TextMessage message = session.createTextMessage("Hello"); producer.send(message); producer.close(); session.close(); connection.close(); connectionFactory.close();
JDBCを直接使用する場合と同様,単調で面倒です. S2JMSを使用すると,このように面倒なコードを書く手間を省くことができます.
S2JMS
S2JMSは,JMSを利用するアプリケーションを簡単に構築するためのコンポーネント群を提供するプロダクトです. ちょうど,JDBCに対するS2JDBCやS2Daoと同じような位置づけになります.
S2JMSは,S2JCA が提供する コネクションプーリングやJTAトランザクションとの連携をインフラとして利用します.
S2JMSのプログラミング・モデル
S2JMSは,2つの異なったプログラミング・モデルを提供します.
- アウトバウンド・アプリケーション
- インバウンド・アプリケーション
これらのプログラミング・モデルは,JCA (J2EE Connector Architecture) 仕様で定められている通信モデル, アウトバウンド通信とインバウンド通信にそれぞれ対応しています.
アウトバウンド・アプリケーション
アウトバウンド・アプリケーションは,アウトバウンド通信 (outbound communication) を使用して非同期メッセージを送受信するアプリケーションです.
アウトバウンド通信とは,アプリケーション側が主体となって通信を行う形態のモデルです.
MOMへの接続は,アプリケーションの要求によって確立されます.
アプリケーションがjavax.jms.ConnectionFactory#getConnection()
呼び出すことで,
リソースアダプタがMOMへの接続を確立します.
その際,アプリケーションサーバやS2JCAはコネクションをプーリングしたり,JTAトランザクションと関連づけたりします.
確立したコネクション上での操作もアプリケーション側から行います. メッセージの送信や受信などは,全てアプリケーションからの要求により実行されます.
このように,コネクションの確立やコネクションに対する操作がアプリケーションを主体として行われるのがアウトバウンド通信です. アウトバウンド通信はS2JMS-Core によってサポートされます.
Webコンテナ上のアプリケーションや GUI アプリケーションなどでは,S2JMS-Coreを使用することにより, アウトバウンド通信で非同期メッセージを送受信することができます.
アウトバウンド・アプリケーションの詳細は「S2JMS-Core 」を参照してください.
インバウンド・アプリケーション
インバウンド・アプリケーションは,インバウンド通信 (inbound communication) を使用して非同期メッセージを受信するアプリケーションです.
インバウンド通信とは,リソースアダプタ (MOM) 側が主体となって通信を行う形態のモデルです. MOMとの接続はリソースアダプタによって確立されます.
インバウンド通信では,リソースアダプタがメッセージを受信すると,アプリケーションに通知 (コールバック) されます.
このように,コネクションの確立やコネクションに対する操作がリソースアダプタを主体として行われるのがインバウンド通信です. インバウンド通信はS2JMS-Container によってサポートされます.
S2JMS-Containerを使用することにより,インバウンド通信で非同期メッセージを受信することができます. S2JMS-Containerを使用すると,リソースアダプタはS2JCAが提供するスレッド上でメッセージを受信し, アプリケーションに通知します. そのため,インバウンド通信は通常スタンドアロン・アプリケーションで利用します. Webコンテナ上でインバウンド通信を使用することは推奨しません. S2JMS-Containerを利用するスタンドアロン・アプリケーションを起動するために, S2JMS-Server を利用することができます.
インバウンド通信では非同期メッセージの受信のみ行うことができます. 非同期メッセージを受信するには,アウトバウンド通信を使用します. この場合,インバウンド・アプリケーションは同時にアウトバウンド・アプリケーションとなります.
インバウンド・アプリケーションの詳細は「S2JMS-Container 」を参照してください.