60.12. 트랜잭션 지원
Camel 2.19부터 사용 가능
Camel CDI는 JTA를 사용하여 Camel 트랜잭션 클라이언트를 지원합니다.
이러한 지원은 선택 사항이므로 Maven을 사용할 때 JTA를 명시적으로 종속성으로 추가하여 애플리케이션 클래스 경로에 JTA를 사용해야 합니다.
<dependency> <groupId>javax.transaction</groupId> <artifactId>javax.transaction-api</artifactId> <scope>runtime</scope> </dependency>
애플리케이션을 JTA 가능 컨테이너에 배포하거나 독립 실행형 JTA 구현을 제공해야 합니다.
현재는 트랜잭션 관리자가 java:/TransactionManager
키를 사용하여 JNDI 리소스로 조회됩니다.
광범위한 배포 시나리오를 지원하기 위해 향후 더 유연한 전략이 추가될 예정입니다.
60.12.1. 트랜잭션 정책
Camel CDI는 일반적으로 지원되는 Camel Cryostated Policy
를 CDI 빈으로 구현하는 방법을 제공합니다. 이러한 정책은 트랜잭션된 EIP를 사용하여 이름으로 조회할 수 있습니다. 예를 들면 다음과 같습니다.
class MyRouteBean extends RouteBuilder { @Override public void configure() { from("activemq:queue:foo") .transacted("PROPAGATION_REQUIRED") .bean("transformer") .to("jpa:my.application.entity.Bar") .log("${body.id} inserted"); } }
이는 다음과 같습니다.
class MyRouteBean extends RouteBuilder { @Inject @Named("PROPAGATION_REQUIRED") Policy required; @Override public void configure() { from("activemq:queue:foo") .policy(required) .bean("transformer") .to("jpa:my.application.entity.Bar") .log("${body.id} inserted"); } }
지원되는 트랜잭션 정책 이름 목록은 다음과 같습니다.
-
PROPAGATION_NEVER
, -
PROPAGATION_NOT_SUPPORTED
, -
PROPAGATION_SUPPORTS
, -
PROPAGATION_REQUIRED
-
PROPAGATION_REQUIRES_NEW
, -
PROPAGATION_NESTED
, -
PROPAGATION_MANDATORY
.
60.12.2. 트랜잭션 오류 처리기
Camel CDI는 재전송 오류 처리기를 확장하는 트랜잭션 오류 처리기를 제공하여 예외가 발생할 때마다 롤백을 강제 수행하고 각 재전송에 대해 새 트랜잭션을 생성합니다.
Camel CDI는 구성에 빠르게 액세스할 수 있도록 transactionErrorHandler
도우미 메서드를 노출하는 CdiRouteBuilder
클래스를 제공합니다. 예를 들면 다음과 같습니다.
class MyRouteBean extends CdiRouteBuilder { @Override public void configure() { errorHandler(transactionErrorHandler() .setTransactionPolicy("PROPAGATION_SUPPORTS") .maximumRedeliveries(5) .maximumRedeliveryDelay(5000) .collisionAvoidancePercent(10) .backOffMultiplier(1.5)); } }