컨테이너 관리 트랜잭션에서 트랜잭션 처리에 대해 this blog을 읽습니다.컨테이너 관리 트랜잭션에서 EJB 트랜잭션 롤백
저자는 명확하게 EJB 트랜잭션과 데이터베이스 트랜잭션의 차이를 구분합니다. 데이터베이스 트랜잭션은 EJB 트랜잭션 중 하나 일뿐입니다.
이 예제를 고려하십시오가 돈 거래를 가져 가라. 이는 하나 이상의 데이터베이스에서 일부 숫자를 변경하는 것이 아닙니다. 관리, 통지, 확인 및 유효성 검사도 진행됩니다. , 알림 단계가 실패하면 확인과 관련된 JMS 트랜잭션이 롤백됩니까 :이 예제를 바탕으로
는
@Stateless
public class MoneyTransactionBean {
public void MoneyTransfer(int amount, BankAccount from, BankAccount to){
//db transaction
/// adminstration transaction //JMS
// confirmation //JMS
// Notification //JSP
// validation //EJB
// email //JMAIL
}
}
시나리오 1 다음과 같은 비 저장 빈을 고려? 즉, JMS 메시지가 대기열에서 제거 될 것인가, 즉 Notification 이벤트가 JMS 대기열에서 지워지는 것인가?
시나리오 2 : (개별 Bean에서 호출 된) 모든 개별 트랜잭션이 성공했지만 Validation
이 실패하면 확인 단계의 JMS 메시지가 롤백되어 전자 메일이 대기열에서 제외됩니까?
이 경우 트랜잭션의 롤백은 어떻게됩니까?
"확인"JMS 대기 이벤트는 어떻게됩니까? 너는 그것에 대해 말하지 않았다. 나는 더 구체적인 질문을 위해 위의 질문을 편집했다. 감사합니다 –
@brainstorm 귀하의 의사 코드는 다소 혼란 스럽습니다. 확인은 MoneyTransfer에 의해 보내지 는가 아니면 관리 트랜잭션에 의해 생성 된 임시 대상 (reply-to) 대기열입니까? – NBW
그것은 어떻게 중요할까요? 네가 무엇을 요구하는지 나는 명확하지 않다. 확인은 전체 MoneyTransfer 트랜잭션의 또 다른 단계 일뿐입니다. MoneyTransfer의 각 행은 전체 트랜잭션 –