私はCamelとWebSphereを統合しようとしています。一つのことを除いて、うまくいきます。WebSphere Camel JMS、spring、taskExecutor、haningingスレッド
このシナリオは、 JMS(WMQ) - >ルーティング/変換 - > BEAN(JPA(OpenJPA1.2/DB2)コミットを行います)のようになります。差し込むことができるように
トランザクションマネージャとmangaedスレッドWAS、私はラクダでのTaskExecutorとしてワークマネージャを挿入しています。そして、
<!-- Selected parts of the spring config -->
<tx:jta-transaction-manager/>
<bean id="wasTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
<bean id="camelTransactionRequired" class="org.apache.camel.spring.spi.SpringTransactionPolicy" depends-on="transactionManager">
<property name="transactionManager" ref="transactionManager"/>
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="taskExecutor" ref="wasTaskExecutor"/>
<property name="transacted" value="true"/>
<property name="transactionManager" ref="transactionManager"/>
</bean>
ルート、のようなもの:
from("jms:queue:MY.QUEUE")
.transacted("camelTransactionRequired")
.log(..)
.bean(storeJPA);
このwasTaskExecutor Beanは、アプリケーション内の1つのスタンドアロンのSpringメッセージリスナ(同じJmsプロバイダ、WMQ)で、期待される動作とともに使用されます。
デプロイされた/起動されると、ONEメッセージはこのように処理されます(下の最初のログ行)。次にスレッドがハングし始めます。
[5/12/12 22:14:55:890 CEST] 00000055 SystemOut O INFO routeFromBackend - メッセージボックスにキューから引き出されたメッセージ
[5/12/12 22:27:00:638 CEST ] 00000031 ThreadMonitor W WSVR0605W:スレッド「デフォルト:1」(0000001e)が739306ミリ秒間アクティブであり、ハングしている可能性があります。サーバーには、ハングアップしているスレッドが1つあります。 at java.lang.Object.wait(ネイティブ・メソッド) at java.lang.Object.wait(Object.java:196) at com.ibm.ws.util.BoundedBuffer.waitPut_(BoundedBuffer.java:214) com.ibm.ws.util.BoundedBuffer.put(BoundedBuffer.java:324) com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1296) at com.ibm.ws.util.ThreadPool .execute(ThreadPool.java:1100) at com.ibm.ws.asynchbeans.WorkItemImpl $ PoolExecuteProxy.run(WorkItemImpl.java:198) at com.ibm.ws.asynchbeans.WorkItemImpl.executeOnPool(WorkItemImpl.java:219) ) at com.ibm.ws.asynchbeans.WorkManagerImpl.queueWorkItemForDispatch(WorkManagerImpl.java:433) at com.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:1074) com.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:846) at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.execute(WorkManagerTaskExecutor.java:154) at org.springframework.jms.listener。 org.springframework.jms.listener.AbstractJmsListeningContainer.doStartでorg.springframework.jms.listener.AbstractJmsListeningContainer.resumePausedTasks(AbstractJmsListeningContainer.java:536) でDefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:669) (AbstractJmsListeningContainer.java:285) at org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:263) at org.springframework.jms.listener.DefaultMessageListenerContainer.start(DefaultMessageListenerContainer.java:555) at org.apache.camel.component.jms.JmsConsumer.startListenerContainer(JmsConsumer.java:84)
これを見た人は誰ですか?
このようです。根本的な原因を探すためにヒープダンプを深く掘り下げてください。ラッキーな私、ラクダはオープンソースなので、可能なはずです。 –