트랜잭션 보상 및 비즈니스 활동 지원

비즈니스 활동은 서로 동의된 출력을 가질 수 있도록 서로 링크되는 태스크 콜렉션입니다. 아토믹 트랜잭션과는 달리 이메일 전송과 같은 활동은 아토믹하게 롤백하기가 어렵거나 불가능하기 때문에 오류 발생 시 보상 프로세스가 필요합니다. WebSphere® Application Server 비즈니스 활동 지원은 비즈니스 활동 범위를 통해 이 보상 기능을 제공합니다.

비즈니스 활동 지원 사용 시기

보상이 필요한 애플리케이션이 있는 경우 비즈니스 활동 지원을 사용하십시오. 애플리케이션은 해당 조작이 아토믹하게 롤백할 수 없는 경우 보상이 필요합니다. 일반적으로 이 시나리오는 다음 이유 중 하나로 필요합니다.
  • 애플리케이션이 여러 개의 non-extended-architecture(XA) 자원을 사용합니다.
  • 애플리케이션은 둘 이상의 아토믹을 사용합니다(예: 컨테이너 트랜잭션 배치 디스크립터의 트랜잭션 필드에 대한 설정으로 신규 필수가 있는 엔터프라이즈 Bean).
  • 애플리케이션은 글로벌 트랜잭션에서 실행되지 않습니다.
다음 다이어그램은 비즈니스 활동 지원을 사용하는 단순 웹 서비스 애플리케이션을 보여줍니다. 소매업자, 창고, 제조업체 서비스는 WebSphere Application Server 이외의 환경에서 실행 중입니다. 소매업자 서비스는 태스크를 창고 및 제조업체 서비스로 위임하는 WebSphere Application Server에서 실행 중인 제공업체 서비스를 호출합니다. 제공업체 서비스 구현에는 Stateless 세션 Bean이 포함되며 이는 창고 및 제조업체 서비스에 연관되고 보상 가능한 작업을 착수하는 다른 Stateless 세션 Bean을 호출합니다. 이 다른 세션 Bean 각각에는 런타임에서 애플리케이션 컴포넌트와 연관되고 이메일 재전송과 같은 보상 활동을 수행하는 로직의 일부인 보상 핸들러가 있습니다.
설명 텍스트 참조.

애플리케이션 디자인

비즈니스 활동 컨텍스트는 애플리케이션 메시지로 전파되고 따라서 동일한 서버와 같이 있지 않은 애플리케이션 컴포넌트 사이에서 분배 가능합니다. 아토믹 트랜잭션 컨텍스트와는 다르게 비즈니스 활동 컨텍스트는 동기(블로킹) 호출 응답 메시지 및 비동기 단방향 메시지 모두에서 전파됩니다. 비즈니스 활동 범위에서 실행되는 애플리케이션 컴포넌트는 시작하는 모든 비동기 작업이 컴포넌트의 자체 처리 완료 전에 완료되도록 해야 합니다. 파이어 앤 포겟 메시지 패턴을 사용하여 비동기 작업을 시작하는 애플리케이션은 비즈니스 활동 범위를 사용하면 안되는데 이런 애플리케이션은 이 비동기 처리가 완료되었는지를 발견하는 수단이 없기 때문입니다.

컨테이너 관리 트랜잭션이 포함된 엔터프라이즈 Bean만 비즈니스 활동 기능을 사용할 수 있습니다. 비즈니스 활동 범위를 사용하는 엔터프라이즈 Bean은 웹 서비스 인터페이스를 제공할 수는 있지만 표준 엔터프라이즈 Bean 로컬 또는 원격 Java™ 인터페이스도 제공할 수 있습니다. 비즈니스 활동 컨텍스트는 표준 상호 운용 WS-BA(Web Services Business Activity) CoordinationContext 요소를 사용하여 웹 서비스 메시지에서 전파됩니다. WebSphere Application Server는 웹 서비스가 사용 중이지는 않지만 이 컨텍스트 양식이 WebSphere Application Server 이외의 환경과 상호 운용되지 않는 경우, RMI 호출의 비즈니스 활동 컨텍스트는 엔터프라이즈 Bean으로 전파 가능합니다. 비즈니스에 내부에 사용되는 애플리케이션에 대한 보상이 필요한 경우에 이 동종 시나리오를 사용할 수 있습니다. 이기종 환경에서 비즈니스 활동 보상을 사용하려는 경우, 애플리케이션 컴포넌트를 웹 서비스로 노출하십시오.

비즈니스 활동 컨텍스트는 방화벽을 통해 및 WebSphere Application Server 도메인 밖에서 전파 가능합니다. 이 전파를 수행하기 위해 사용하는 토폴로지는 비즈니스 활동 트랜잭션의 고가용성 및 유사성 동작에 영향을 줄 수 있습니다.

애플리케이션 개발 및 배치

WebSphere Application Server에서는 비즈니스 활동 범위 작성 및 해당 비즈니스 활동 범위와 보상 핸들러를 연관시키기 위한 프로그래밍 모델을 제공합니다. WebSphere Application Server에서는 보상 데이터를 지정하고 비즈니스 활동 상태를 점검하거나 수정하는 API(Application Programming Interface)도 제공합니다. 비즈니스 활동 지원을 사용하려면 특정 애플리케이션 배치 디스크립터를 적절하게 설정하고 필요한 경우 보상 핸들러 클래스를 제공하며 애플리케이션을 실행하는 모든 서버에서 비즈니스 활동 지원을 사용해야 합니다.
참고: 애플리케이션을 버전 6.1 이상에서 WebSphere Application Server에 배치하는 경우에만 애플리케이션이 비즈니스 활동 지원을 사용할 수 있습니다. 애플리케이션을 WebSphere Application Server 버전 6.0.x 서버에 포함하는 클러스터로 배치하는 경우에는 애플리케이션이 비즈니스 활동 지원을 사용할 수 없습니다.

비즈니스 활동 범위

비즈니스 활동의 범위는 기본 WebSphere Application Server 작업 단위의 범위로 글로벌 트랜잭션, 활동 세션 또는 로컬 트랜잭션 포함(LTC)입니다. 비즈니스 활동 범위는 새 작업 단위(UOW)가 아니며 기존의 기본 UOW의 속성입니다. 따라서, 비즈니스 활동 범위와 UOW 사이에는 1대1 관계가 존재합니다.

WS-BA 배치에서 UOW는 컨테이너 관리여야 합니다.
  • UOW는 글로벌 트랜잭션을 작성하는 컨테이너 관리 트랜잭션(CMT) 엔터프라이즈 Bean일 수 있습니다.
  • UOW는 컨테이너가 자원 관리자 로컬 트랜잭션(RMLT)을 시작하고 종료하는 로컬 트랜잭션 포함(LTC)일 수 있습니다. 즉, 트랜잭션 배치 디스크립터 속성에서 로컬 트랜잭션 속성 분석기는 ContainerAtBoundary로 설정되어야 합니다. WS-BA를 사용하려면 분석기 속성을 애플리케이션으로 설정하면 안됩니다.
모든 기본 UOW는 연관된 비즈니스 활동 범위를 가질 수 있습니다. 비즈니스 활동 범위와 연관된 UOW에서 실행 중인 컴포넌트가 다른 컴포넌트를 호출하는 경우, 해당 요청은 비즈니스 활동 범위를 전파합니다. 새 컴포넌트로 수행된 모든 작업은 호출 컴포넌트와 동일한 비즈니스 활동 범위와 연관됩니다. 호출된 컴포넌트는 새 UOW를 작성할 수 있습니다. 예를 들어, 엔터프라이즈 Bean의 트랜잭션 설정이 신규 필수이거나 호출 컴포넌트와 동일한 UOW에서 실행됩니다. 새 UOW가 시작되면 새 비즈니스 활동 범위가 작성되고 새 UOW와 연관됩니다. 새로 작성된 비즈니스 활동 범위는 호출 UOW와 연관된 비즈니스 활동 범위 하위입니다. 다음 다이어그램에서 UOW1에서 실행 중인 EJB1a는 다음과 같은 두 개의 컴포넌트를 호출합니다. UOW에서 실행되는 EJB1b 및 새 UOW, UOW2를 작성하는 EJB2. 엔터프라이즈 Bean EJB1b는 다른 엔터프라이즈 Bean인 EJB3을 호출하고 이는 다른 새 UOW, UOW3을 작성합니다. UOW가 이미 비즈니스 활동 범위 BAScope1과 연관된 호출 컴포넌트로 각 새 UOW가 작성되기 때문에 새로 작성된 UOW는 새 내부 비즈니스 활동 범위인 BAScope2 및 BAScope3과 연관됩니다.
설명은 텍스트 참조.

내부 비즈니스 활동 범위는 외부 비즈니스 활동 범위가 완료되기 전에 완료되어야 합니다. 내부 비즈니스 활동 범위(예: BAScope2)는 외부 비즈니스 활동 범위(이 경우, BAScope1)와 연관됩니다. 각 비즈니스 활동 범위는 연관된 해당 UOW가 제대로 완료되는 경우 직접 종료되고 해당 UOW가 실패하는 경우 직접 보상됩니다. BAScope2가 제대로 완료되면 BAScope2가 소유하는 모든 활성 보상 핸들러는 BAScope1로 이동하고 BAScope1의 완료 방향(보상 또는 종료)과 동일하게 방향 지정됩니다. BAScope2가 실패하면 활성 보상 핸들러는 자동으로 보상되며 외부 BAScope1로는 아무것도 이동하지 않습니다. 연관된 UOW 실패로 인해 내부 비즈니스 활동 범위가 실패하면 외부 UOW에서 실행 중인 호출 애플리케이션 컴포넌트에 대해 애플리케이션 서버 예외가 처리됩니다.

예를 들어, 내부 UOW가 실패하면 TransactionRolledBackException 예외를 처리할 수 있습니다. 호출 애플리케이션은 예외를 처리할 수 있는 경우(예를 들어, 호출된 컴포넌트를 다시 시도하거나 다른 컴포넌트를 호출하여) 호출 UOW 및 연관된 해당 비즈니스 활동 범위는 내부 비즈니스 활동 범위가 실패했지만 제대로 완료될 수 있습니다. 애플리케이션 디자인에서 호출 UOW가 실패하고 연관된 해당 비즈니스 활동 범위는 보상되어야 하는 경우, 호출 애플리케이션 컴포넌트는 해당 UOW가 실패하도록 해야 합니다(예를 들어, 실패한 UOW의 모든 시스템 예외가 해당 컨테이너로 처리되도록 하여).

외부 비즈니스 활동 범위가 완료되면 해당 성공 또는 실패는 내부 비즈니스 활동 범위에서 프롬프트되는 핸들러를 포함하여 외부 비즈니스 활동 범위에서 소유하는 모든 활성 보상 핸들러의 완료 방향(종료 또는 보상)을 판별합니다. 외부 비즈니스 활동 범위가 성공적으로 완료되면 이는 모든 활성 보상 핸들러가 종료되도록 합니다. 외부 비즈니스 활동 범위가 실패하면 이는 모든 활성 보상 핸들러가 보상되도록 합니다.

이 보상 동작은 다음 테이블에서 요약됩니다.
표 1. 단일 비즈니스 활동 범위에 대한 보상 동작. 테이블은 내부 및 외부 비즈니스 활동 범위에 대한 성공 및 실패에 대한 가능한 조합 및 각 조합에 연관된 보상 동작을 나열합니다.
내부 비즈니스 활동 범위 외부 비즈니스 활동 범위 보상 동작
성공 성공 내부 비즈니스 활동 범위에서 소유하는 모든 보상 핸들러는 외부 UOW 완료를 대기합니다. 외부 UOW가 성공하면 외부 비즈니스 활동 범위는 모든 보상 핸들러가 종료되도록 합니다.
실패 성공 내부 비즈니스 활동 범위에서 소유하는 모든 활성 보상 핸들러는 보상됩니다. 예외가 외부 UOW에 처리됩니다. 이 예외가 발견되는 경우 외부 UOW가 성공하면 외부 비즈니스 활동 범위는 나머지 모든 활성 보상 핸들러가 종료되도록 합니다.
실패 실패 내부 비즈니스 활동 범위에서 소유하는 모든 활성 보상 핸들러는 보상됩니다. 예외가 외부 UOW에 처리됩니다. 이 예외가 발견되지 않으면 외부 비즈니스 활동 범위가 실패합니다. 처리되지 않은 예외 또는 일부 다른 이유로 외부 비즈니스 활동 범위가 실패하면 모든 활성 보상 핸들러는 보상됩니다.
성공 실패 내부 비즈니스 활동 범위에서 소유하는 모든 보상 핸들러는 외부 UOW 완료를 대기합니다. 외부 UOW가 실패하면 외부 비즈니스 활동 범위는 모든 보상 핸들러가 보상되도록 합니다.

연관된 비즈니스 활동 범위가 포함된 UOW가 완료되면 비즈니스 활동 범위는 항상 연관된 UOW와 동일한 방향으로 완료됩니다. 비즈니스 활동 범위의 방향에 영향을 줄 수 있는 유일한 방법은 연관된 UOW에 영향을 주는 것으로 비즈니스 활동 범위의 setCompensateOnly 메소드를 사용해서만 수행할 수 있습니다.

트랜잭션 UOW에 등록된 보상 핸들러는 비즈니스 활동 API에서 호출된 메소드에 따라 처음에는 비활성화되어 있을 수도 있습니다. 이 상황에서 비활성 핸들러는 해당 핸들러가 선언한 UOW가 성공적으로 완료되면 활성화됩니다. 트랜잭션 UOW 외부에서 등록된 보상 핸들러는 항상 즉시 활성화됩니다. 자세한 정보는 비즈니스 활동 API 주제를 참조하십시오.

다이어그램의 각 비즈니스 활동 범위는 비즈니스 활동을 나타냅니다. 예를 들어, BAScope1에서 실행 중인 외부 비즈니스 활동은 항공권 예약인 BAScope2와 호텔 예약인 BAScope3이 포함된 휴가 예약 시나리오일 수 있습니다. 항공권이나 호텔 예약에 실패하면 전체 휴가 예약도 기본적으로 실패합니다. 또는, 예를 들어 항공권 예약이 실패한 경우 애플리케이션이 다른 항공사를 나타내는 다른 컴포넌트로 항공권 예약을 시도하려고 할 수 있습니다. 전체 휴가 예약이 실패하면 애플리케이션은 보상 핸들러를 사용하여 이미 예약에 성공한 모든 항공권이나 호텔 예약을 취소할 수 있습니다.

애플리케이션 컴포넌트별 비즈니스 활동 범위 사용

애플리케이션 컴포넌트는 기본적으로 비즈니스 활동 범위를 사용하지 않습니다. WebSphere Application Server 어셈블리 도구를 사용하여 비즈니스 활동 범위 사용을 지정하고 컴포넌트에 대한 모든 보상 핸들러를 식별합니다.
기본 구성
비즈니스 활동 컨텍스트가 비즈니스 활동 범위 구성이 없는 컴포넌트에서 수신된 요청에 표시되면 컨텍스트는 컨테이너로 저장되지만 대상 컴포넌트의 메소드 범위 중에는 사용되지 않습니다. 새 비즈니스 활동 범위는 작성되지 않습니다. 대상 컴포넌트가 다른 컴포넌트를 호출하는 경우, 저장된 비즈니스 활동 컨텍스트는 전파되고 다른 보상 컴포넌트에서 사용할 수 있습니다.
엔터프라이즈 Bean 메소드를 비즈니스 활동 범위에서 실행하십시오.
수신 요청에 표시된 모든 비즈니스 활동 컨텍스트는 컨테이너로 수신되며 대상 컴포넌트에 사용할 수 있습니다. 새 UOW가 대상 메소드에 대해 작성되는 경우 예를 들어, 엔터프라이즈 Bean 메소드에 트랜잭션 설정이 신규 필수인 경우 수신된 비즈니스 활동 범위는 새로 작성된 비즈니스 활동에 대해 외부 비즈니스 활동 범위가 됩니다. UOW가 호출 컴포넌트에서 전파되고 메소드에서 사용되는 경우 수신된 비즈니스 활동 범위는 메소드에서 사용됩니다. 비즈니스 활동 범위가 호출에 없는 경우, 새 비즈니스 활동 범위가 작성되고 메소드에서 사용됩니다.
엔터프라이즈 Bean 호출 시 비즈니스 활동 범위를 작성하려면 엔터프라이즈 Bean이 비즈니스 활동 범위에서 엔터프라이즈 Bean 메소드를 실행하도록 구성해야 합니다. 호출 시 새 UOW가 작성되도록 지정하기 위해 호출 중인 메소드에 대한 배치 디스크립터도 구성해야 합니다. 자세한 내용은 WS-BA 지원을 사용하는 애플리케이션 작성 주제를 참조하십시오.

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



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