3.2. 로컬, 글로벌 및 분산 트랜잭션 관리자 정보
트랜잭션 관리자는 로컬, 글로벌 또는 배포될 수 있습니다.
3.2.1. 로컬 트랜잭션 관리자 정보
로컬 트랜잭션 관리자는 단일 리소스에 대해서만 트랜잭션을 조정할 수 있는 트랜잭션 관리자입니다. 로컬 트랜잭션 관리자의 구현은 일반적으로 리소스 자체에 포함되어 있으며 애플리케이션에서 사용하는 트랜잭션 관리자는 이 기본 제공 트랜잭션 관리자에 대한 씬 래퍼입니다.
예를 들어 Oracle 데이터베이스에는 중복 작업(SQL BEGIN
,COMMIT
또는 ROLLBACK
문을 사용하거나 네이티브 Oracle API를 사용하여) 및 다양한 트랜잭션 격리 수준을 지원하는 기본 제공 트랜잭션 관리자가 있습니다. Oracle 트랜잭션 관리자에 대한 제어는 JDBC를 통해 내보낼 수 있으며, 이 JDBC API는 애플리케이션에서 트랜잭션을 위임하는 데 사용됩니다.
이 컨텍스트에서 리소스를 구성하는 사항을 이해하는 것이 중요합니다. 예를 들어 JMS 제품을 사용하는 경우 JMS 리소스는 개별 대기열과 주제가 아닌 JMS 제품의 단일 실행 인스턴스입니다. 또한 동일한 기본 리소스에 다른 방식으로 액세스하면 여러 리소스가 실제로 단일 리소스일 수 있습니다. 예를 들어 애플리케이션은 관계형 데이터베이스에 직접(DBC를 통해) 직접 및 간접적으로( Hibernate와 같은 객체 관계형 매핑 툴을 통해)에 액세스할 수 있습니다. 이 경우 동일한 기본 트랜잭션 관리자가 관련되므로 두 코드 조각을 동일한 트랜잭션에 등록할 수 있어야 합니다.
이 방법이 모든 경우에 효과적이라는 것을 보장할 수는 없습니다. 기본적으로 가능한 경우도 있지만 Spring Framework 또는 기타 래퍼 계층의 설계에서 일부 세부 사항으로 인해 실제로 작동하지 않을 수 있습니다.
애플리케이션에는 서로 독립적으로 작동하는 다양한 로컬 트랜잭션 관리자가 있을 수 있습니다. 예를 들어 JMS 끝점이 JMS 트랜잭션 관리자를 참조하는 JMS 대기열 및 주제를 조작하는 Camel 경로가 한 개 있을 수 있습니다. 다른 경로는 JDBC를 통해 관계형 데이터베이스에 액세스할 수 있습니다. 그러나 JDBC 및 JMS 액세스를 동일한 경로에 결합하고 둘 다 동일한 트랜잭션에 참여하도록 할 수 없습니다.
3.2.2. 글로벌 트랜잭션 관리자 정보
글로벌 트랜잭션 관리자는 여러 리소스에 대해 트랜잭션을 조정할 수 있는 트랜잭션 관리자입니다. 이는 리소스 자체에 빌드된 트랜잭션 관리자를 사용할 수 없는 경우 필요합니다. 트랜잭션 처리 모니터(TP 모니터)라고도 하는 외부 시스템은 다양한 리소스 간에 트랜잭션을 조정할 수 있습니다.
다음은 여러 리소스에서 작동하는 트랜잭션에 대한 사전 요구 사항입니다.
- 글로벌 트랜잭션 관리자 또는 TP 모니터 - 여러 XA 리소스를 조정하기 위해 2단계 커밋 프로토콜을 구현하는 외부 트랜잭션 시스템입니다.
- XA 표준을 지원하는 리소스 - 2단계 커밋에 참여하려면 리소스는 XA 표준을 지원해야 합니다. 1.7.1.2절. “XA 표준에 대한 지원”을 참조하십시오. 실제로 이는 리소스가 XA 스위치 오브젝트를 내보낼 수 있으므로 외부 TP 모니터에 대한 트랜잭션을 완전히 제어할 수 있습니다.
Spring Framework는 글로벌 트랜잭션을 관리하기 위한 TP 모니터를 자체적으로 제공하지 않습니다. 그러나 OSGi 제공 TP 모니터 또는 Cryostat 제공 TP 모니터( JtaTransactionManager 클래스에서 통합이 구현되는 경우)와의 통합을 지원합니다. 따라서 전체 트랜잭션 지원이 포함된 OSGi 컨테이너에 애플리케이션을 배포하는 경우 Spring에서 여러 트랜잭션 리소스를 사용할 수 있습니다.
3.2.3. 분산 트랜잭션 관리자 정보
일반적으로 서버는 트랜잭션과 관련된 리소스에 직접 연결합니다. 그러나 분산 시스템에서는 웹 서비스를 통해 간접적으로 노출되는 리소스에만 연결해야 합니다. 이 경우 분산 트랜잭션을 지원할 수 있는 TP 모니터가 필요합니다. 다양한 분산 프로토콜에 대한 트랜잭션을 지원하는 방법을 설명하는 여러 표준을 사용할 수 있습니다(예: 웹 서비스에 대한 WS-AtomicTransactions 사양).