기본 메시지 리스너 컨테이너를 사용하고 있습니다. 구성에서 세션 트랜잭션 속성을 true로 설정했습니다.JMS 리스너에서 예외가 발생하면 어떻게됩니까
내 onMessage()
방법은 이것이다 :
public void onMessage(Message message) {
try {
// Some code here
} catch (JmsException jmse) {
log.error(jmse);
} catch (Throwable t) {
log.error(t);
}
}
당신은 내가 catch
블록에서 예외를 처리하고 볼 수 있듯이.
내 요구 사항은 JMS 예외 인 경우 재전송해야한다는 것입니다. 즉, 트랜잭션 롤백이있을 때 발생하는 메시지가 리스너/소비자에게 다시 전달되어야합니다. 어떻게 그럴 수 있습니까?
여기서 수동으로 트랜잭션을 롤백 할 수 있습니까? 나는 그것이 가능한 해결책이라고 생각하지만 코드에서 그렇게하는 방법을 모르겠습니다.
또 다른 일반적인 질문 :
나는 catch
블록을 통해 가능한 모든 예외를 처리하고 있기 때문에, 나는 내가 catch
을 통해 가능한 모든 예외를 처리하고 있기 때문에 메시지 재전송 즉, 트랜잭션 롤백의 시나리오 없을 것 같아요 블록. 내가 맞습니까?
은 무엇입니까? 그래서 현재 내 클래스는 메시지 리스너를 구현합니다. 이제 sessionawaremessagelistener를 구현해야합니다. – africandrogba
또한 세션 객체를 통해 수동으로 확인하고 필요한 경우 세션 객체를 통해 catch 블록에서 롤백을 호출해야합니다. 나는 이것이 당신이 내가 그것을 실행해야한다고 말하는 방식이라고 믿습니다. – africandrogba
이 인터페이스에서 세션 객체를 얻었으므로 요구 사항에 따라 트랜잭션을 롤백하거나 커밋 할 수 있습니다. – manoj