概要
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を利用することができます.