0
Impl 클래스에서 RuntimeException을 throw하면 트랜잭션이 롤백되지 않습니다. 하지만 Impl 클래스에서 update 문을 주석 처리하고 route에서 update 문 코드에 주석을 달면 트랜잭션이 롤백됩니다.낙타 경로에서 트랜잭션을 롤백하는 방법
구현 클래스가 예외를 throw 할 때 라우트에 작성된 업데이트 문을 롤백하는 방법.
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="wsRoute">
<from uri="cxf:bean:paymentServiceEndpoint"/>
<transacted />
<split streaming="true" parallelProcessing="true">
<simple>${in.body[0]}</simple>
<setHeader headerName="bank">
<simple>${body.bank}</simple>
</setHeader>
<log message="The header value is ${header.bank}" />
<setBody>
<constant>
UPDATE TEST
SET RECEIVED_BY = 'Y'
WHERE ID = :?bank
</constant>
</setBody>
<to uri="jdbc:dataSource?useHeadersAsParameters=true" />
</split>
<bean ref="paymentServiceImpl" />
<log message="response = ${body}"/>
</route>
</camelContext>
@Transactional(value="txManager", propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
public TransferResponse transfer(TransferRequest request) {
System.out.println("***********PaymentServiceImpl..." + request.getFrom());
/*
final int updated= jdbc.update("update TEST set RECEIVED_BY = 'Y' where ID = ?",
"abc");
*/
TransferResponse response = new TransferResponse();
if(true)
throw new RuntimeException("update exception");
response.setReply("OK");
System.out.println("***********PaymentServiceImpl.." + response.getReply());
return response;
}
병렬 처리 속성을 제거한 경우에도 트랜잭션이 롤백되지 않습니다. – user739115