About

ドキュメント

Javadoc

モジュール

プロジェクト文書

Built by Maven

概要

JMS

JMSは,JavaからMOM (Message-Oriented Middleware) を利用するための仕様で, RDBMSに対するJDBCと同じ位置づけとなります. JMSに対応した主なMOMとしては,IBM WebSphere MQ (formerly known MQSeries),TIBCO Rendezvous, 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トランザクションとの連携をインフラとして利用します.

アウトバウンド通信とインバウンド通信

JCA (J2EE Connector Architecture) 仕様では, MOMとの間の通信をアウトバウンド通信とインバウンド通信という2つのモデルに分類しています.

アウトバウンド通信

アウトバウンド通信 (outbound communication) とは,アプリケーション側が主体となって通信を行う形態のモデルです. MOMへの接続は,アプリケーションの要求によって確立されます. アプリケーションがjavax.jms.ConnectionFactory#getConnection()呼び出すことで, リソースアダプタがMOMへの接続を確立します. その際,アプリケーションサーバやS2JCAはコネクションをプーリングしたり,JTAトランザクションと関連づけたりします.

確立したコネクション上での操作もアプリケーション側から行います. メッセージの送信や受信などは,全てアプリケーションからの要求により実行されます.

このように,コネクションの確立やコネクションに対する操作がアプリケーションを主体として行われるのがアウトバウンド通信です. アウトバウンド通信はS2JMS-Coreによってサポートされます.

Webコンテナ上のアプリケーションや GUI アプリケーションなどでは,S2JMS-Coreを使用することにより, アウトバウンド通信で非同期メッセージを送受信することができます.

インバウンド通信

インバウンド通信 (inbound communication) とは,リソースアダプタ (MOM) 側が主体となって通信を行う形態のモデルです. MOMとの接続はリソースアダプタによって確立されます.

インバウンド通信では,リソースアダプタがメッセージを受信すると,アプリケーションに通知 (コールバック) されます.

このように,コネクションの確立やコネクションに対する操作がリソースアダプタを主体として行われるのがインバウンド通信です. インバウンド通信はS2JMS-Containerによってサポートされます.

S2JMS-Containerを使用することにより,インバウンド通信で非同期メッセージを受信することができます. S2JMS-Containerでは,リソースアダプタはS2JCAが提供するスレッド上でメッセージを受信し, アプリケーションに通知します. そのため,インバウンド通信は通常スタンドアロン・アプリケーションで利用します. Webコンテナ上でインバウンド通信の利用は推奨しません. S2JMS-Containerを利用するスタンドアロン・アプリケーションを起動するために, S2JMS-Serverを利用することができます.