on GlassFish

Sun Java System Application Server9.1でS2JMSを動かしてみました。

接続プールの作成

管理コンソールから簡単に作れました。

リソース-->JMSリソース-->接続ファクトリ

JNDI名「jms/hoge1」で登録。
Queueは

リソース-->JMSリソース-->送信先リソース

で登録すれば作成されるみたいです。とりあえず「hoge」というQueueを登録しました。JNDI名は「jms/hoge2」。
普通は外部のQueueを使うと思いますが、ここでは自分のとこのQueueに送受信してみます。

S2JMS側の設定

Dolteng 0.30.0で作ったdiconファイルを基に作りました。jms-outbound.diconを以下のように変更します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
	"http://www.seasar.org/dtd/components24.dtd">
<components>
	<description>
		1.マネージドコネクションファクトリをJNDIで取得するように変更。
		2.リソースアダプタはアプリケーションサーバのものを使うので削除。
		3.デスティネーションファクトリはSimpleDestinationFactoryに変更。
	</description>
	<!-- マネージドコネクションファクトリ -->
	<component class="javax.jms.ConnectionFactory">
		@org.seasar.extension.j2ee.JndiResourceLocator@lookup("jms/hoge1")
	</component>

	<!-- セッションファクトリ -->
	<component class="org.seasar.jms.core.session.impl.SessionFactoryImpl"/>

	<!-- メッセージ送信コンポーネント -->
	<component instance="prototype"
			class="org.seasar.jms.core.impl.MessageSenderImpl">
		<property name="destinationFactory">
			<!-- デスティネーション (キューまたはトピック) ファクトリ -->
			<component class="org.seasar.jms.core.destination.impl.SimpleDestinationFactory">
				<property name="destination">
					@org.seasar.extension.j2ee.JndiResourceLocator@lookup("jms/hoge2")
				</property>
			</component>
		</property>
	</component>

	<!-- メッセージ受信コンポーネント -->
	<component instance="prototype"
			class="org.seasar.jms.core.impl.MessageReceiverImpl">
		<property name="destinationFactory">
			<!-- デスティネーション (キューまたはトピック) ファクトリ -->
			<component class="org.seasar.jms.core.destination.impl.SimpleDestinationFactory">
				<property name="destination">
					@org.seasar.extension.j2ee.JndiResourceLocator@lookup("jms/hoge2")
				</property>
			</component>
		</property>
	</component>
</components>

動作確認

Teedaで簡単な確認画面を作成しました(htmlは省略)。

package hatena.beerman.web.jms;

import org.seasar.jms.core.MessageReceiver;
import org.seasar.jms.core.MessageSender;

public class JmsPage {

	public String sendMessage;

	public String recieveMessage;

	public MessageSender messageSender;

	public MessageReceiver messageReceiver;

	public void doSend() {
		messageSender.send(sendMessage);
	}

	public void doRecieve() {
		recieveMessage = messageReceiver.receiveText();
	}
}

ちゃんと動いてくれました〜。