首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebSphere Camel JMS,spring,taskExecutor,haninging

WebSphere Camel JMS,spring,taskExecutor,haninging
EN

Stack Overflow用户
提问于 2012-05-14 15:49:00
回答 1查看 1.5K关注 0票数 2

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

该场景类似于: JMS (WMQ) ->路由/转换DB2Bean(它执行-> (OpenJPA1.2/DB2)提交)。

为了能够插入WAS事务管理器和人工线程,我将工作管理器作为taskExecutor插入到camel中:

代码语言:javascript
复制
<!-- 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>  

然后是一条路由,类似于:

代码语言:javascript
复制
from("jms:queue:MY.QUEUE")
   .transacted("camelTransactionRequired")
   .log(..)
   .bean(storeJPA);

此wasTaskExecutor bean在应用程序中的一个独立spring消息侦听器(相同的jms提供者,WMQ)中使用,并具有预期的行为。

在部署/启动时,可以这样处理一条消息(下面的第一行日志)-然后线程开始挂起。

5/12/12 22:14:55:890CEST 00000055 SystemOut O INFO routeFromBackend -消息从队列拉到消息箱

5/12/12 22:27:00:638CEST 00000031 ThreadMonitor W WSVR0605W: Thread "Default : 1“(0000001e)已激活739306毫秒,可能会挂起。服务器中总共有一个(或多个)线程可能挂起。在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在java.lang.Object.wait(Object.java:196)在java.lang.Object.wait(本机方法).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.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:1074)在com.ibm.ws.asynchbeans.WorkManagerImpl.schedule(WorkManagerImpl.java:846)在org.springframework.scheduling.commonj.WorkManagerTaskExecutor.execute(WorkManagerTaskExecutor.java:154)在org.springframework.jms.listener.DefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:669)在org.springframework.jms.listener.AbstractJmsListeningContainer.resumePausedTasks(AbstractJmsListeningContainer.java:536)在org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:285)在org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:263)在org.springframework.jms.listener.DefaultMessageListenerContainer.start(DefaultMessageListenerContainer.java:555)在org.apache.camel.component.jms.JmsConsumer.startListenerContainer(JmsConsumer.java:84)

有没有人看过这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-14 22:00:52

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10579345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档