비즈니스 활동 API

이 비즈니스 활동 API(Application Programming Interface)를 사용하여 애플리케이션 컴포넌트에 대한 비즈니스 활동 및 보상 핸들러를 작성하고 전체 비즈니스 활동에 실패가 있을 경우 활동을 보상하는 데 필요한 데이터를 로그할 수 있습니다.

개요

비즈니스 활동 지원은 UserBusinessActivity API 및 두 개의 인터페이스(serializable.CompensationHandler 인터페이스 및 CompensationHandler 인터페이스)를 제공합니다. 각 인터페이스에는 RetryCompensationHandlerException 및 CompensationHandlerFailedException의 두 가지 예외가 있습니다. java:comp/websphere/UserBusinessActivity의 애플리케이션 서버 JNDI(Java™ Naming and Directory Interface)에서 UserBusinessActivity 인터페이스를 검색할 수 있습니다. 예를 들어 다음과 같습니다.
InitialContext ctx = new InitialContext();
UserBusinessActivity uba = (UserBusinessActivity) ctx.lookup("java:comp/websphere/UserBusinessActivity");
getId 메소드를 사용하여 호출하는 스레드와 현재 연관된 비즈니스 활동의 고유 ID에 액세스할 수 있습니다. 이 ID는 런타임 시 비즈니스 활동 범위에 대해 생성되고 정보, 경고 및 오류 메시지에 대해 사용되는 ID와 같습니다. 예를 들어, 애플리케이션은 감사 또는 진단 메시지에서 ID를 사용할 수 있고 애플리케이션 생성 메시지와 런타임 생성 메시지 사이를 상관시킬 수 있습니다.
InitialContext initialContext = new InitialContext();
UserBusinessActivity uba = initialContext.lookup("java:comp/websphere/UserBusinessActivity"); 
… 
String activityId = uba.getId(); 
if (activityId == null)
// No activity on the thread 
else
// Output audit message including activity id
애플리케이션 컴포넌트가 비즈니스 활동에서 실해 시 보상을 필요로 할 수 있는 작업을 실행하는 경우 배치된 애플리케이션의 파트로 어셈블되는 보상 핸들러 클래스를 제공해야 합니다. 이 Java 클래스는 다음 인터페이스 중 하나를 구현해야 합니다.
  • 직렬화 가능 오브젝트의 매개변수를 사용하는 com.ibm.websphere.wsba.serializable.CompensationHandler
  • SDO(Service Data Object)의 매개변수를 사용하는 com.ibm.websphere.wsba.CompensationHandler
일반적으로 DataObject 형식으로 된 사용 가능한 데이터가 이미 있는 애플리케이션은 CompensationHandler 인터페이스를 사용하고 그렇지 않은 애플리케이션은 serializable.CompensationHandler 인터페이스를 사용합니다. 두 인터페이스 모두 closecompensate 메소드를 지원합니다.

애플리케이션은 애플리케이션이 사용하는 보상 데이터의 유형(직렬화 가능 오브젝트 또는 SDO)에 대해 작업하는 보상 핸들러 구현을 등록해야 합니다. 애플리케이션 컴포넌트가 사용하는 데이터 유형과 보상 핸들러 구현 사이에 불일치가 있을 경우 오류가 발생합니다.

일반적인 애플리케이션 처리 중에 애플리케이션은 setCompensationDataImmediate 또는 setCompensationDataAtCommit 메소드에 대해 하나 이상의 호출을 작성하여 수행되는 작업의 현재 상태를 나타내는 직렬화 가능 오브젝트 또는 SDO를 전달할 수 있습니다.

루트 비즈니스 활동이 연관된 작업 단위(UOW)가 완료되면 모든 등록된 보상자가 완료를 위해 조정됩니다. 완료 중에 compensate 또는 close 메소드가 보상 핸들러에서 호출되어 애플리케이션 컴포넌트에 의해 매개변수로 로그된 가장 최근 보상 데이터를 전달합니다. 보상 핸들러 구현은 직렬화된 오브젝트 또는 SDO DataObject로 저장되는 데이터를 이해할 수 있어야 합니다. 이 데이터를 사용할 때 보상 핸들러는 엔터프라이즈 Bean에 의해 수행되는 작업의 특성을 판별하고 적절한 방식(예: 비즈니스 활동에 실패가 있을 경우 데이터베이스 행에 대한 변경을 실행 취소함)으로 닫을 수 있어야 합니다. Rational® Application Developer와 같은 어셈블리 도구를 사용하여 보상 핸들러와 애플리케이션 컴포넌트를 연관시킵니다.

활성 및 비활성 보상 핸들러

애플리케이션 컴포넌트에 대해 비즈니스 활동 범위 내에서 보상되어야 하는 코드를 실행하는 serializable.CompensationHandler 또는 CompensationHandler 인터페이스를 구현합니다. 보상 핸들러 오브젝트는 애플리케이션이 보상 데이터를 지정하기 위해 UserBusinessActivity API를 호출할 때마다 애플리케이션이 실행되는 비즈니스 활동 범위에 내재적으로 등록됩니다. 보상 핸들러는 등록되는 트랜잭션 UOW에 따라 활성이나 비활성 두 상태 중 하나일 수 있습니다. 트랜잭션 UOW 내에 등록되는 보상 핸들러는 보상 핸들러가 활성이 되는 시점인 트랜잭션이 커미트될 때까지 초기에 비활성일 수 있습니다(다음 섹션 참조). 트랜잭션 UOW 외부에 등록되는 보상 핸들러는 항상 즉시 활성 상태가 됩니다.

비즈니스 활동이 완료되면 활성 보상 핸들러만 구동합니다. 비즈니스 활동과 연관된 비활성 보상 핸들러는 버려지고 구동되지 않습니다.

보상 데이터 로깅

비즈니스 활동 API는 애플리케이션이 보상 데이터를 로그할 수 있도록 하는 두 가지 방법을 지정합니다. 이 데이터는 비즈니스 활동이 완료될 때 해당 처리 중 보상 핸들러에서 사용 가능해집니다. 애플리케이션은 트랜잭션을 비즈니스 활동의 일부로 예상할지 여부에 따라 다음 메소드 중 하나를 호출합니다.

setCompensationDataAtCommit()
애플리케이션이 스레드에서 글로벌 트랜잭션을 예상하는 경우 setCompensationDataAtCommit 메소드를 호출합니다.
  • 스레드에 글로벌 트랜잭션이 있는 경우 CompensationHandler 오브젝트는 처음에 비활성입니다. 글로벌 트랜잭션이 실패하면 아토믹 방식으로 해당 트랜잭션 컨텍스트 내에서 실행된 트랜잭션 작업을 롤백하고 비즈니스 활동을 구동하여 다른 완료된 UOW를 보상합니다. 보상 핸들러는 포함되지 않아도 됩니다. 글로벌 트랜잭션이 성공적으로 커미트되면 보상 핸들러가 활성이 됩니다. 전체 비즈니스 활동이 실패하면 글로벌 트랜잭션에 의해 완료되는 지속 가능한 작업을 보상하기 위해 보상 핸들러가 필요하기 때문입니다. setCompensationDataAtCommit 메소드는 이 보상 기능을 수행하도록 CompensationHandler 인스턴스를 구성합니다.
  • setCompensationDataAtCommit 메소드 호출 시 글로벌 트랜잭션이 없는 경우 보상 핸들러가 즉시 활성이 됩니다.
예를 들어, SDO의 경우 및 이전 예제와 같은 비즈니스 활동 인스턴스를 사용하는 것입니다.
DataObject compensationData = doWorkWhichWouldNeedCompensating();
uba.setCompensationDataAtCommit(compensationData); 
setCompensationDataImmediate()

애플리케이션이 스레드에서 글로벌 트랜잭션을 예상하지 않는 경우 setCompensationDataImmediate 메소드를 호출합니다.

setCompensationDataImmediate 메소드는 메소드 호출 시 현재 UOW 컨텍스트에 관계없이 CompensationHandler 인스턴스를 즉시 활성화합니다. 보상 핸들러는 비즈니스 활동의 완료 중에 항상 참가할 수 있습니다.

setCompensationDataImmediate 메소드의 역할은 비트랜잭션 작업(즉, 글로벌 트랜잭션 내부 또는 외부에서 수행할 수 있지만 트랜잭션에 의해 통제되지 않는 작업)을 보상하는 것입니다. 이 작업 유형의 예는 이메일을 보내는 것입니다. 보상 핸들러는 비즈니스 활동에서 실패가 발생하면 이 비트랜잭션 작업이 항상 보상되도록 즉시 활성이어야 합니다.

예를 들어, 직렬화 가능 오브젝트 및 이전 예제와 같은 비즈니스 활동 인스턴스를 사용하는 것입니다.
Serializable compensationData = new MyCompensationData();
uba.setCompensationDataImmediate(compensationData); 

같은 엔터프라이즈 Bean에서 호출되는 경우 이러한 두 가지 보상 데이터 로깅 메소드는 같은 보상 핸들러 클래스를 사용하지만 런타임 시 보상 핸들러 클래스에 대해 두 개의 개별 인스턴스를 작성합니다. 따라서 메소드의 조치는 상호 독점적이고 두 메소드 중 하나를 호출해도 다른 메소드가 수행하는 작업을 겹쳐쓰지 않습니다.

이러한 메소드를 사용하여 보상 핸들러 인스턴스가 이미 비즈니스 활동에 추가된 다음 같은 메소드가 호출되어 null을 매개변수로 전달하는 경우 해당 보상 핸들러 인스턴스는 비즈니스 활동에서 제거되고 비즈니스 활동의 보상 중 닫기나 보상을 위해 구동되지 않습니다.

이전에 설명한 대로 비즈니스 활동을 사용하는 엔터프라이즈 Bean에 의해 보상 데이터 로깅 메소드가 처음으로 호출되면 비즈니스 활동 지원은 보상 핸들러 인스턴스를 비즈니스 활동에 추가합니다. 동시에 엔터프라이즈 애플리케이션 컨텍스트의 스냅샷이 작성되고 보상 데이터와 함께 로그됩니다. 비즈니스 활동이 완료되면 해당 비즈니스 활동에 추가된 모든 보상 핸들러가 compensate 또는 close에 대해 구동됩니다. CompensationHandler 또는 serializable.CompensationHandler 클래스에서 작성하는 코드는 이전 스냅샷에서 캡처된 것과 같은 엔터프라이즈 애플리케이션 컨텍스트에서 실행되도록 보장됩니다.

비즈니스 활동 API에 사용 가능한 메소드에 대한 세부사항은 추가 API에 대한 주제를 참조하십시오.

주제 유형을 표시하는 아이콘 참조 주제



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