이벤트 재생에는 수천만 건의 이벤트가 포함될 수 있습니다. 따라서 단일 트랜잭션에서 단일 재생을 관리하는 것은 종종 가능하지 않습니다 (이벤트 리스너가 트랜잭션을 필요로하는 변경을한다고 가정 할 때).
Axon은 재생 중에 이벤트 일괄 처리가 재생 될 때마다 변경 내용을 커밋하기 위해 TransactionManager
을 사용합니다. 이 일괄 처리의 크기는 commitThreshold
매개 변수를 사용하여 구성 할 수 있습니다.
이제는 JTA를 사용해 본 경험이 없지만 bean 메소드가 호출되고 해당 메소드가 반환 될 때 트랜잭션이 자동으로 생성된다는 사실을 이해했습니다. 즉, 재생을 트리거하면 단일 트랜잭션에서 재생됩니다.
따라서 내 조언은 ReplayingCluster
에 사용자 고유의 구현을 제공하는 것입니다.
class JtaTransactionManager implements TransactionManager<UserTransaction> {
@Resource
private SessionContext ctx;
@Override
public UserTransaction startTransaction() {
UserTransaction utx = ctx.getUserTransaction();
utx.begin();
return utx;
}
@Override
public void commitTransaction(UserTransaction utx) {
utx.commit();
}
@Override
public void rollbackTransaction(UserTransaction utx) {
utx.rollback();
}
}
당신은 당신이 거래를 직접 관리 할 응용 프로그램을 알리기 위해 @TransactionManagement(BEAN)
와 재생을 시작하는 빈 주석을 달 수 있습니다 (다른 곳이 영향을주지 않습니다 트랜잭션 관리하십시오 EJB 서버에서이 구현은 다음과 같이 보일 수 있습니다).