Iは、z/OSキューにリモートのWebSphere MQ 6.1アプリケーションサーバAS のWebSphere上で稼働するWebアプリケーションから接続する必要があります。 WebSphere ASでは、QueueConnectionFactoryとQueue(リモート・キュー・データの一部を含むオブジェクト)の両方を構成し、ほとんどの設定をデフォルト値に設定しました。キュー名、チャネル、ホスト、ポート、およびトランスポートを設定するだけでしたタイプはCLIENTです。は、「接続が閉じて、」スロー繰り返し
<jee:jndi-lookup id="destination" jndi-name="MyMQQueue" expected-type="javax.jms.Queue" />
<jee:jndi-lookup id="targetConnectionFactory" jndi-name="MyMQQCF" expected-type="javax.jms.QueueConnectionFactory" />
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"
p:connectionFactory-ref="targetConnectionFactory"
p:defaultDestination-ref="destination" />
<bean id="simpleMessageListener" class="my.own.SimpleMessageListener"/>
<bean id="msgListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="targetConnectionFactory" />
<property name="destination" ref="destination" />
<property name="messageListener" ref="simpleMessageListener" />
<property name="taskExecutor" ref="managedThreadsTaskExecutor" />
<property name="receiveTimeout" value="5000" />
<property name="recoveryInterval" value="5000" />
</bean>
<bean id="managedThreadsTaskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
JmsTemplateが正しく(同期)メッセージを送信し、受信した:私は、JNDIルックアップを使用して、次の春3.2設定でそれらを注入します。非同期メッセージ受信者のDefaultMessageListenerContainerは、WebSphere ASの開始時にMQキューからいくつかの(以前に送信された)メッセージを読み取りますが、すぐ後に詰まり、 "接続が閉じられました"という例外を繰り返しスローし始めます。そのような機会に、それは私に通知することを通知します。
DefaultMessag W org.springframework.jms.listener.DefaultMessageListenerContainer handleListenerSetupFailure Setup of JMS message listener invoker failed for destination 'queue://myqueue' - trying to recover. Cause: Connection closed
DefaultMessag I org.springframework.jms.listener.DefaultMessageListenerContainer refreshConnectionUntilSuccessful Successfully refreshed JMS Connection
しかし、キューからメッセージを取るのをやめます。春のコードにビットを掘る
は、私がDefaultMessageListenerContainer<property name="cacheLevel" value="0"/>
に設定すると、メッセージは、今、私はそれらを送信するたびにキューをオフに読まれているという意味で、問題を解決することを発見しました。
おそらく接続が継続的に閉じられ、再び開かされることを意味している。ただし、WebSphere MQへのTCPトラフィックを見て私はMQCLOSE/MQOPENコマンドはのように繰り返し、それに送信されていることがわかります。
キャッシングの原因が何であるかをお勧めします。Springコードを変更する(たとえばDefaultMessageListenerContainerを拡張する)比較的簡単な方法があるか、おそらくMQキュー接続ファクトリ/キュー、それを動作させるには?
EDIT:
はさらに、インターネットの検索、私は、Tomcat上で発生する同様の問題を記述しているようだ次のリンク
を発見しました。解決策は、DefaultMessageListenerContainerに特定のexceptionListenerを設定することです。しかし、WebSphereでこれを実行しようとすると、例外 "javax.jms.IllegalStateException:Method setExceptionListener not permitted"がスローされます。根本的な原因は、J2EE 1.4仕様でJMS接続でsetExceptionListenerを呼び出すことを禁じているようです。
https://www.ibm.com/developerworks/library/j-getmess/j-getmess-pdf.pdf