SI 처리에서 중간에 새 트랜잭션을 시작하기 위해 게이트웨이/서비스 활성화자를 삽입하는 것에 대한 이전 답변에 이어 왔습니다. 코드 아래에서 시도했지만 어떤 이유로 작동하지 않습니다.이 구성에서 오류를 지적 할 수 있으면 바랍니다.트랜잭션 시작을위한 게이트웨이 사용
모든 스레드가 발생하는 것을 기다리고있는 것처럼 보입니다. 그리고 sp 아웃 바운드 게이트웨이는 호출되지 않지만 무엇을 파악할 수 없습니다.
여기에있는 아이디어는 새 트랜잭션의 스레딩 풀에서 스플리터가 생성 한 각 작업을 처리하는 것입니다.
<int:splitter...output-channel="taskChannel"/>
<int:channel id="taskChannel">
<int:dispatcher task-executor="taskExecutor"/>
</int:channel>
<int:gateway id="txGw" service-interface="com.some.test.StartTransactionalGateway"
default-request-channel="taskChannel" default-reply-channel="individualTask">
</int:gateway>
<int:service-activator ref="txGw"
input-channel="taskChannel"
output-channel="individualTask"
method="startTx"
auto-startup="true">
</int:service-activator>
<int-jdbc:stored-proc-outbound-gateway ...request-channel="individualTask" .....
interface StartTransactionalGateway {
@Transactional
Message<?> startTx(Message<?> m);
}
고마워, 게리, 당신이 제안한대로 작동하지만 SP 호출이 반환 할 때 트랜잭션이 커밋되면 이제는 어떻게 든 나머지 처리를 가져와야합니다. – Mark1234
스레드가 게이트웨이로 리턴 할 때 커밋이 발생하므로 tx 범위 내에서 원하는 모든 것이 게이트웨이의 다운 스트림에서 발생해야합니다. 구성 요소 연결 - stored proc'reply-channel'은 다음 구성 요소에 연결합니다. __last__ 구성 요소에서'reply-channel' 또는'output-channel'을 생략하면 tx가 커밋합니다. 또는 단순히' '안에 모든 것을 넣고'output-channel '을 넣지 마십시오. –
감사합니다 게리, 전 옵션을 시도, 그것을 작동합니다. 이후 나는 어떤 처리 (아웃 바운드 어댑터에서 끝나는)이 처리의 끝에 무효로 게이트웨이 인터페이스를 변경 그래서 내가 필요로 작동하는 것 같습니다. 나중에 옵션을 시도해 보겠습니다. – Mark1234