Web Services Atomic Transaction 개요
Application Server의 WS-AT(Web Services Atomic Transaction) 지원은 웹 서비스 환경에 트랜잭션 서비스 품질(QoS)을 제공합니다. 분배된 웹 서비스 애플리케이션 및 이 애플리케이션이 사용하는 자원은 분배된 글로벌 트랜잭션에 참여할 수 있습니다. 이제 WS-AT가 Liberty에서도 지원됩니다.
웹 서비스 프로토콜은 웹 서비스 애플리케이션을 정의하는 표준 방법을 제공하며 애플리케이션이 사용되는 제품, 플랫폼 또는 프로그래밍 언어에 관계없이 작동하도록 이 방법을 사용할 수 있습니다. WS-AT 지원은 Application Server에서 다음 스펙을 구현한 것입니다. 이 스펙은 이기종 웹 서비스 환경에 분배된 글로벌 트랜잭션에 웹 서비스 애플리케이션이 참여할 수 있도록 하는 웹 서비스 세트를 정의합니다.
- WS-AT는 원자적 트랜잭션에 대한 프로토콜을 정의하는 특정 조정 유형입니다. Liberty는 Web Services Atomic Transaction 버전 1.2 스펙만 사용할 수 있습니다.
- WS-COOR(Web Services Coordination)은 참가자 웹 서비스가 특정 조정 유형이 제공하는 프로토콜에 참여하도록 요청하는 데 사용할 수 있는 CoordinationContext 및 Registration 서비스를 지정합니다. Liberty는 Web Services Coordination 버전 1.2 스펙만 사용할 수 있습니다.
WS-AT 지원은 트랜잭션 지원을 위해 새 프로그래밍 인터페이스를 도입하지 않는 상호 운용성 프로토콜입니다. 글로벌 트랜잭션 경계 설정은 JTA(Java™ Transaction API) UserTransaction 인터페이스의 표준 엔터프라이즈 애플리케이션 사용으로 제공됩니다. 글로벌 트랜잭션 하에서 실행 중인 애플리케이션 컴포넌트가 웹 서비스 요청을 작성하는 경우 WS-AT CoordinationContext는 대상 웹 서비스에 내재적으로 전파되지만 트랜잭션 배치 속성 구성에 대한 주제에 설명된 대로 적절한 애플리케이션 배치 디스크립터가 설정된 경우에만 전파됩니다.
애플리케이션 서버가 WS-AT 조정 컨텍스트가 포함된 웹 서비스 요청의 대상 엔드포인트를 호스팅하는 시스템인 경우 애플리케이션 서버는 대상 웹 서비스 애플리케이션이 실행되는 트랜잭션 컨텍스트가 되는 대상 런타임 환경에서 종속 JTA 트랜잭션을 자동으로 설정합니다.
다음 그림은 WS-AT CoordinationContext가 포함된 웹 서비스 요청에 대한 두 Application Server 간에 공유되는 트랜잭션 컨텍스트를 보여줍니다.

기본적으로 WS-AT 기능을 사용으로 설정하고 Liberty의 클라이언트 측에서 트랜잭션을 시작하면 클라이언트 트랜잭션에 포함된 모든 웹 서비스 조작이 글로벌 트랜잭션에 추가됩니다. 하지만 현재 글로벌 트랜잭션의 범위 밖에서 코드를 실행하는 경우에는 UOWManager를 UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION 유형과 함께 실행하십시오. 그러면 해당 코드 스니펫 주위에서 글로벌 트랜잭션을 일시중단한 후 재개하는 효과가 있습니다.
WS-AT 기능이 사용으로 설정되는지 여부 | 트랜잭션이 존재하는지 여부 | WSDL에 정책 어설션이 존재하는지 여부 | WS-AT 글로벌 트랜잭션이 사용으로 설정되는지 여부 |
---|---|---|---|
아니오 | 아니오 | 아니오 | 아니오 |
아니오 | 아니오 | 예 | 아니오(Liberty에서 예외가 발생함) |
아니오 | 예 | 아니오 | 아니오 |
아니오 | 예 | 예 | 아니오(Liberty에서 예외가 발생함) |
예 | 아니오 | 아니오 | 아니오 |
예 | 아니오 | 예(wsp: Optional="false") | 아니오(Liberty에서 예외가 발생함) |
예(wsp: Optional="true") | 아니오 | ||
예 | 예 | 아니오 | 예 |
예 | 예 | 예 | 예 |
WS-AT 기능이 사용으로 설정되는지 여부 | SOAP 헤더에 조정 컨텍스트가 존재하는지 여부 | WSDL에 정책 어설션이 존재하는지 여부 | WS-AT 글로벌 트랜잭션이 사용으로 설정되는지 여부 |
---|---|---|---|
아니오 | 아니오 | 아니오 | 아니오 |
아니오 | 아니오 | 예 | 아니오 |
아니오 | 예 | 아니오 | 아니오(Liberty에서 예외가 발생함) |
아니오 | 예 | 예 | 아니오(Liberty에서 예외가 발생함) |
예 | 아니오 | 아니오 | 아니오 |
예 | 아니오 | 예(wsp: Optional="false") | 아니오(Liberty에서 예외가 발생함) |
예(wsp: Optional="true") | 아니오 | ||
예 | 예 | 아니오 | 예 |
예 | 예 | 예 | 예 |
애플리케이션 디자인
WS-AT는 두 단계 커미트 트랜잭션 프로토콜이며 지속 기간이 짧은 트랜잭션에만 적합합니다.
WS-AT는 단일 엔터프라이즈에 배치된 웹 서비스에 트랜잭션 컨텍스트를 분배하는 데 가장 적절합니다. 트랜잭션의 시작자(애플리케이션 또는 컨테이너)는 트랜잭션 완료를 요청하기 전에 해당 트랜잭션에서 실행되는 모든 비즈니스 태스크가 완료되었는지 확인해야 하므로 요청-응답 메시지 교환 패턴만 트랜잭션 컨텍스트를 수반합니다. 단방향 요청이 호출한 웹 서비스는 요청하는 클라이언트의 트랜잭션에서는 실행되지 않습니다.
WS-AT 트랜잭션에 대한 서비스 결함의 영향은 EJB(Enterprise JavaBeans) 스펙에 설명된 대로 트랜잭션에 대한 EJB 애플리케이션 예외의 영향과 유사합니다. 요청자 WS-AT 트랜잭션에서 실행되는 서비스가 결함을 리턴하면 Application Server가 트랜잭션을 롤백 전용으로 자동 표시하지 않습니다. 요청자의 예외 핸들러는 트랜잭션의 진행 가능 여부와 트랜잭션의 롤백 전용 표시 여부를 선택합니다. 요청자를 Application Server에서 실행 중인 경우 표준 JTA 또는 EJB API를 사용하여 트랜잭션을 롤백 전용으로 표시할 수 있습니다. 결함을 생성하는 서비스 컴포넌트는 결함을 리턴하기 전에 트랜잭션을 롤백 전용으로 표시할 수 있습니다. 서비스 컴포넌트 구현 시 시스템 예외가 발생하는 경우 일반적으로 해당 컨테이너가 예외를 처리할 수 있습니다. Application Server 컨테이너는 서비스 구현 시 생성되는 시스템 예외를 처리할 때 받은 트랜잭션 컨텍스트를 롤백 전용으로 자동 표시합니다.