메시지 구동 Bean - 트랜잭션 지원

메시지 구동 Bean은 트랜잭션 범위 내의 대상(또는 엔드포인트)에서 메시지를 처리할 수 있습니다.

IBM MQ JMS에서 메시지 리스너 서비스를 사용할 때의 트랜잭션 처리

선택한 메시지 구동 Bean 배치 디스크립터 설정에 따라 컨테이너 관리 트랜잭션(필수), 컨테이너 관리 트랜잭션(지원되지 않음), Bean 관리 트랜잭션의 세 가지 경우가 있습니다.

메시지 구동 Bean 배치 디스크립터 설정에서 메시지 구동 Bean이 자신의 트랜잭션(Bean 관리 트랜잭션)을 관리하는지 아니면 컨테이너가 메시지 구동 Bean(컨테이너 관리 트랜잭션)을 대신하여 트랜잭션을 관리하는지를 선택할 수 있습니다. 컨테이너 관리 트랜잭션을 선택하는 경우, 배치 디스크립터 노트북에서 각 Bean 메소드의 컨테이너 트랜잭션 유형을 선택하여 컨테이너 트랜잭션이 필수이거나 지원되지 않는지 여부를 판별할 수 있습니다. 기본 컨테이너 트랜잭션 유형은 필수입니다.

컨테이너 관리 트랜잭션(필수)

이러한 경우 Application Server가 대상으로부터 수신 메시지를 읽기 전에, 그리고 메시지 구동 Bean의 onMessage() 메소드가 애플리케이션 서버에서 호출되기 전에 애플리케이션 서버가 글로벌 트랜잭션을 시작합니다. 메시지가 호출한 다른 EJB 및 데이터베이스 같은 자원과의 상호작용이 이 단일 글로벌 트랜잭션 내에서 모두 범위가 지정되고, 이 범위에서 수신 메시지를 확보함을 의미합니다.

이 애플리케이션 플로우가 성공적으로 완료되면 글로벌 트랜잭션이 커미트됩니다. 플로우가 완료되지 않으면(트랜잭션이 롤백으로 표시되거나 런타임 예외가 발생한 경우), 트랜잭션이 롤백되고 수신 메시지가 메시지 구동 Bean 대상으로 롤백됩니다.

컨테이너 관리 트랜잭션(지원되지 않음)

이러한 경우 글로벌 트랜잭션이 없지만 JMS 제공자가 여전히 메시지 구동 Bean 대상에서 애플리케이션 서버로 메시지를 작업 단위로 전달할 수 있습니다. 이 작업은 트랜잭션 범위에 있는 다른 자원과 관련이 없으므로 로컬 트랜잭션으로 간주할 수 있습니다.

메시지 구동 Bean의 onMessage() 디스패치가 성공적으로 완료될 때 Application Server가 메시지 전달을 수신확인합니다(메시지 구동 Bean의 어셈블러에서 지정한 수신확인 모드 사용).

그렇지만 onMessage() 메소드에서 확인하지 못한 런타임 예외가 발생하면 애플리케이션 서버가 수신확인을 수행하지 않습니다. 이 경우, 메시지가 메시지 구동 Bean 대상으로 롤백됩니까? 아니면 수신확인되고 삭제됩니까?

이에 대한 응답은 동기점이 JMS 제공자에서 사용되는지에 따라 다르며 운영 플랫폼(특히, z/OS® 운영 플랫폼은 여기에서 다른 동작을 제공할 수 있음)에 따라 다를 수도 있습니다.

JMS 제공자가 이 컨테이너 관리 트랜잭션(지원되지 않음) 상황에서 메시지 구동 Bean 메시지 이용 시에 동기점을 설정하는 경우, 메시지는 확인되지 않은 예외 후에 대상으로 롤백됩니다.

동기점이 사용되지 않으면 확인하지 못한 예외 이후 대상에서 메시지가 삭제됩니다.

관련 정보는 http://www.ibm.com/support/docview.wss?uid=swg21231549에서 기술노트 "MDB behavior is different on z/OS than on distributed when getting nonpersistent messages within syncpoint"를 참조하십시오.

Bean 관리 트랜잭션

이러한 경우 컨테이너 관리 트랜잭션(지원되지 않음) 경우와 비슷합니다. 이 경우 사용자 트랜잭션이 있더라도, 메시지 구동 Bean의 onMessage 디스패치에서 시작된 사용자 트랜잭션이 트랜잭션 범위의 메시지 구동 Bean 대상으로부터의 메시지 이용을 포함하지 않습니다. 이를 수행하려면 컨테이너 관리 트랜잭션(필수) 시나리오를 사용하십시오.

메시지 재전달

이전의 세 가지 경우에서 메시지 구동 Bean 대상으로 롤백된 메시지가 결국 다시 디스패치됩니다. 원래 롤백이 일시적인 시스템 문제로 발생한 경우, 다시 디스패치될 때 이 메시지와 함께 메시지 구동 Bean이 다시 디스패치될 것이라 예상할 수 있습니다. 그렇지만 롤백이 특정 메시지 관련 문제로 발생한 경우에는 메시지가 반복적으로 롤백 및 다시 디스패치됩니다. 이는 포이즌(poison) 메시지 시나리오라고 합니다.

메시징 시스템이 리스너 포트를 사용하는 경우, 애플리케이션 서버는 특정 메시지가 디스패치되는 빈도를 추적하고 해당 메시지에 대해 지정한 재전달 시도 수 이후에 관련 리스너 포트를 중지하여 이 시나리오를 처리합니다.

메시징 시스템이 리스너 포트를 사용하는 경우, 다음 특성을 구성하여 포이즌 메시지 시나리오를 방지할 수 있습니다.
최대 재시도
최대 재시도 매개변수는 리스너가 중지되기 전에 특정 메시지를 메시지 구동 Bean 인스턴스에 전달 시도하는 횟수를 지정합니다.
이 매개변수가 0으로 설정되면 리스너 포트는 메시지가 제대로 전달되지 않는 첫 번째 시도 후에 중지됩니다.
이 특성에 대한 자세한 정보는 리스너 포트 설정의 내용을 참조하십시오.

메시징 시스템이 활성화 스펙을 사용하는 경우, 포이즌 메시지 시나리오는 조금 다르게 처리됩니다. 반면, 리스너 포트는 특정 메시지가 실패하고 다시 전달된 횟수를 추적하고 활성화 스펙은 순차 메시지 전달 실패 횟수를 계수합니다.

메시징 시스템이 기본 메시징 제공자(서비스 통합)를 사용하는 경우 활성화 스펙에 다음 특성을 구성하여 포이즌 메시지 시나리오를 방지해야 합니다.
반복된 메시지 실패 시 엔드포인트 자동 중지
이 옵션은 선택해야 합니다.
이 특성은 순차 실패 메시지 임계값에 도달하면 엔드포인트로의 메시지 전달을 일시중단합니다.
순차 실패 메시지 임계값
이 매개변수는 메시지 전달이 일시중단되기 전까지 메시지 전달이 실패할 수 있는 횟수를 판별합니다.
이 매개변수를 사용하려면 반복된 메시지 실패 시 엔드포인트 자동 중지 옵션을 선택해야 합니다.
실패 메시지 재시도 사이의 지연
이 매개변수는 제대로 전달되지 못한 메시지가 다시 전달되기 전까지 경과해야 하는 시간을 지정합니다.
이 매개변수에 대해 0을 지정하면 메시지가 다시 전달될 때 지연되지 않습니다.
이 매개변수를 사용하려면 반복된 메시지 실패 시 엔드포인트 자동 중지 옵션을 선택해야 합니다.
이 특성에 대한 자세한 정보는 JMS 활성화 스펙 [Settings]의 내용을 참조하십시오.
메시징 시스템이 IBM MQ 메시징 제공자를 사용하는 경우 활성화 스펙에 다음 특성을 구성하여 포이즌 메시지 시나리오를 방지해야 합니다.
메시지 전달이 실패한 경우 엔드포인트 중지
이 옵션은 선택해야 합니다.
이 특성은 엔드포인트가 일시중단되기 전에 허용되는 순차 전달 실패 수에 도달할 때 엔드포인트로 메시지 전달을 일시중단합니다.
엔드포인트가 일시중단되기 전에 허용되는 순차 전달 실패 수
이 매개변수는 메시지 전달이 일시중단되기 전까지 메시지 전달이 실패할 수 있는 횟수를 판별합니다.
이 매개변수를 사용하려면 메시지 전달이 실패한 경우 엔드포인트 중지 옵션을 선택해야 합니다.
이 특성에 대한 자세한 정보는 IBM MQ 메시징 제공자 활성화 스펙 고급 특성의 내용을 참조하십시오.

포이즌 메시지 시나리오가 발생하는 경우에 애플리케이션 서버가 리스너 포트 또는 활성화 스펙을 중지하는 대신 IBM MQ에서 문제를 해결하도록 구성할 수도 있습니다. 큐 대상에 대해 IBM MQ의 큐 오브젝트에 백아웃 큐(BOQUEUE) 및 백아웃 임계값(BOTHRESH)을 지정하십시오. 토픽 대상의 경우 IBM MQ 시스템 큐 SYSTEM.DURABLE.MODEL.QUEUE 및 SYSTEM.NDURABLE.MODEL.QUEUE에 대한 백아웃 큐(BOQUEUE) 및 백아웃 임계값(BOTHRESH)을 지정하십시오. 이를 수행하는 경우 IBM MQ가 포이즌 메시지를 처리합니다. 포이즌 메시지 처리에 대한 자세한 정보는 IBM MQ 라이브러리IBM MQ Java™ 사용 섹션을 참조하십시오.


주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cmb_trans
파일 이름:cmb_trans.html