2

我正在尝试将 Camel 与 WebSphere 集成。它工作正常,除了一件事。

该场景如下所示:JMS (WMQ) -> 路由/转换 -> BEAN(执行 JPA (OpenJPA1.2/DB2) 提交)。

为了能够插入 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 用于应用程序中的一个独立的 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 个线程可能被挂起。在 java.lang.Object.wait(Native Method) 在 java.lang.Object.wait(Object.java:196) 在 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) 在 com.ibm.ws.util.ThreadPool.execute(ThreadPool.java :1100) 在 com.ibm.ws.asynchbeans.WorkItemImpl.executeOnPool(WorkItemImpl.java:219) 在 com.ibm.ws.com.ibm.ws.asynchbeans.WorkItemImpl$PoolExecuteProxy.run(WorkItemImpl.java:198)。 asynchbeans.WorkManagerImpl.queueWorkItemForDispatch(WorkManagerImpl.java:433) 在 com。

有人见过这个吗?

4

1 回答 1

1

线程“挂起”等待将工作提交到满队列,并且工作管理器被配置为在队列满时阻塞而不是抛出错误。要解决“挂起”,要么增加工作管理器线程池中的线程数,要么将队列满操作更改为“错误”而不是“等待”。或者,调查提交给工作经理的工作项是否由于某种原因花费了太长时间。

于 2012-05-14T14:00:51.673 回答