S2JMSを使ってみる〜アウトバウンド通信編〜

1.0.0-M2リリースとともにドキュメントが充実してきたので使ってみました(今までは使い方が分からずに断念してました)。Sun Generic Resource Adapter for JMSと IBM WebSphere MQの組合わせです。

リソースアダプタの設定

WmqResourceAdapterDeployerというのが用意されていたので使ってみました。S2JMS - コンフィグレーション - リソースアダプタ情報には

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="j2ee.dicon"/>

    <component class="org.seasar.jca.deploy.impl.WmqResourceAdapterDeployer">
        <!-- スレッドプールのスレッド数 -->
        <arg>10</arg>

        <!-- Generic JMS ResourceAdapterへのパス -->
        <property name="path">
            "ra/genericra-1.5.rar"
        </property>
    </component>
</components>

という例が出てたのですが、WmqResourceAdapterDeployerにはスレッドプールのスレッド数を引数にもつコンストラクタは存在しないようで・・・。そのせいかBootstrapContextを設定しないと起動できませんでした。

マネージドコネクションファクトリの設定

S2JMS - コンフィグレーション - アウトバウンド情報の例ではリソースアダプタ固有のプロパティ値としてQueueManagerしか指定されてませんが実際にはもっといろいろ指定する必要がある場合が多いのではないでしょうか。その場合はカンマ区切りで

<arg>"connectionFactoryProperties"</arg>
<arg>"HostName=hoge,QueueManager=fuga,Port=1234,TransportType=1"</arg>

のように指定すればOKでした。

接続系のその他の設定

S2JMS - コンフィグレーション - アウトバウンド情報の例ではセッションファクトリ(SessionFactoryImpl)のパッケージ名が間違ってました(実際にはorg.seasar.jms.core.session.impl)。あとコネクションファクトリの設定ではkijimunaの警告が。。。

送信

TextMessageオブジェクトの送信は出来ました。非JMSとの通信(単なる文字列の送信)はまだ出来てません。というか出来ないかも!?

受信

SessionFactoryImpl#operateSessionの

connection.close();

の部分で例外が発生してしまいます。エラー内容は

Conncetion.stop() cannot be called on non-ACC clients

ん〜、なんのことやら・・・。