2

Camel を WebSphere に統合しようとしています。1 つを除いて、正常に動作しています。

シナリオは次のようになります: JMS (WMQ) -> ルーティング/変換 -> BEAN (JPA (OpenJPA1.2/DB2) コミットを行います)。

WAS トランザクション マネージャーとマンガ化されたスレッドにプラグインできるようにするために、work manager を taskExecutor として camel に挿入しています。

<!-- 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) で使用され、予想される動作も備えています。

展開/開始すると、1 つのメッセージをこの方法で処理できます (以下の最初のログ行)。その後、スレッドがハングし始めます。

[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 つあります。java.lang.Object.wait(Native Method) で java.lang.Object.wait(Object.java:196) で com.ibm.ws.util.BoundedBuffer.waitPut_(BoundedBuffer.java:214) で com.ibm com.ibm.ws.util.ThreadPool.execute(ThreadPool.java:1296) の .ws.util.BoundedBuffer.put(BoundedBuffer.java:324) com.ibm.ws.util.ThreadPool.execute(ThreadPool.java) の:1100) com.ibm.ws.asynchbeans.WorkItemImpl$PoolExecuteProxy.run(WorkItemImpl.java:198) com.ibm.ws.asynchbeans.WorkItemImpl.executeOnPool(WorkItemImpl.java:219) com.ibm.ws. asynchbeans.WorkManagerImpl.queueWorkItemForDispatch(WorkManagerImpl.java:433) com.

誰もこれを見たことがありますか?

4

1 に答える 1

1

スレッドは、キューがいっぱいになると作業を送信するのを待って「ハング」し、キューがいっぱいになったときにエラーをスローするのではなく、ブロックするようにワーク マネージャーが構成されます。「ハング」を解決するには、ワーク マネージャー スレッド プール内のスレッド数を増やすか、キューがいっぱいのアクションを「待機」ではなく「エラー」に変更します。あるいは、ワーク・マネージャーにサブミットされているワークアイテムに何らかの理由で時間がかかりすぎていないか調べてください。

于 2012-05-14T14:00:51.673 に答える