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)
누구를 보셨나요?
그 것처럼 보입니다. 루트 덤프를 찾기 위해 힙 덤프를 더 자세히 살펴보십시오. 행운의 나, 낙타는 오픈 소스 다. 그래서 가능해야한다. –