2012-05-14 3 views
2

WebSphere와 Camel을 통합하려고합니다. 그것은 한 가지를 제외하고는 모두 잘 작동합니다.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 빈은 응용 프로그램의 한 독립 실행 형 스프링 메시지 수신기 (동일한 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 개의 스레드가 있습니다. com.ibm.ws.util.BoundedBuffer.waitPut_ (BoundedBuffer.java:214)에서 java.lang.Object.wait를 (Object.java:196) 에서 java.lang.Object.wait를 (기본 방법) 에서 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) at com.ibm.ws.asynchbeans.WorkItemImpl $ PoolExecuteProxy.run (WorkItemImpl.java:198) at com.ibm.ws.asynchbeans.WorkItemImpl.executeOnPool (WorkItemImpl.java:219)) com.ibm.ws.asynchbeans.WorkManagerImpl.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)

누구를 보셨나요?

답변

1

스레드가 전체 대기열로 작업을 제출하기 위해 대기 중일 때 "대기"하고 작업 관리자가 대기열이 가득 찼을 때 오류를 발생시키지 않고 차단하도록 구성됩니다. "중단"문제를 해결하려면 작업 관리자 스레드 풀의 스레드 수를 늘리거나 대기열 전체 작업을 "대기"가 아닌 "오류"로 변경하십시오. 또는 작업 관리자에게 제출되는 작업 항목이 어떤 이유로 오래 걸리는지 조사하십시오.

+0

그 것처럼 보입니다. 루트 덤프를 찾기 위해 힙 덤프를 더 자세히 살펴보십시오. 행운의 나, 낙타는 오픈 소스 다. 그래서 가능해야한다. –

관련 문제