다음을 수행하는 가장 좋은 방법은 무엇입니까? 실패, 나는 DB 트랜잭션 @MessageDriven 트랜잭션 및 재 전달 의미
- @MessageDriven 빈 데이터베이스에 어떤 작업을 수행, 즉, 재하지 않는다 시험.
일 수있는 몇 가지 방법을 생각해 볼 수 있습니다. 다른 사람이 있습니까? 그리고 어떤 사람이 최고입니까?
사용
@TransactionManagement(type=BEAN)
및UserTransaction
, 명시 적으로 다시 예외를 잡기 후 굴립니다. 예컨대 :catch (Exception e) { e.printStackTrace(); utx.rollback(); }
사용 컨테이너 관리 트랜잭션,
onMessage
에@TransactionAttribute(value=NOT_SUPPORTED)
를 지정한 다음@TransactionAttribute(value=REQUIRED)
와 별도의 방법으로 DB 작업을 위임합니다.트랜잭션 처리 만 남겨두고 서버의 retry 속성을 다시 구성하십시오. 글래스 피쉬 3.1.1을 사용하고 있는데 이것을 설정하는 방법을 정확히 모르겠습니다.
본체를 모두 그대로두고
onMessage
본문에서 메시지를 다시 확인하고 재 배달하면 종료하십시오. (message.getJMSRedelivered()
?)
잘 된 점은 무엇입니까? 이 문제를 해결하기위한 표준/최선의 방법이 있습니까?
감사합니다. 완벽하게 작동했습니다. MDBs의 @TransactionAttribute에 대한 메모가 중요했습니다. 당신 말이 맞아요. 오직 onMessage에만 주석을 달 수 있습니다. 끝에 'onMessage' 주석을 달지 않았지만 로직을'REQUIRES_NEW'가있는 다른 EJB로 옮겼습니다. – wrschneider
노트처럼, "필수"로 주석 된 자식 EJB와 함께 작동합니다. – apetrelli