소개
본 장에서는 MultipleRM의 개요 및 관련된 설정에 대한 설명한다.
1. 개요
XA 서버의 경우 한 서버 그룹 안의 서버들은 서버 그룹에 설정한 동일한 하나의 RM만이 접근 가능하여 트랜잭션을 처리하는 것이 Tmax의 기본 정책이다. 하지만 불가피하게 한 프로세스에서 2개 이상의 RM을 이용할 경우 하나의 트랜잭션으로 처리하는 것이 불가능했다. 한 프로세스에서 2개 이상의 RM 혹은 같은 RM이지만 2개 이상의 인스턴스를 사용하는 트랜잭션을 한 트랜잭션으로 포함할 수 있도록 하기 위해서 서버 라이브러리의 기능을 확장했다. 이러한 MultipleRM을 지원하기 위해서 기존의 TCS, UCS 서버 라이브러리를 이용하므로 기능을 그대로 사용할 수 있다.
2. 트랜잭션 처리
본 절에서는 XA 서버와 MultipleRM 애플리케이션 서버의 트랜잭션 처리 방법에 대해 설명한다.
2.1. XA 서버
다음은 XA 서버의 트랜잭션 처리 과정이다.

XA 서버에서는 부트할 때 xa_open, 서비스를 요청할 때 xa_start → 'RM 작업' → xa_end까지 수행하고 실제 xa_prepare, xa_commit은 서버가 속한 해당하는 서버 그룹의 TMS가 작업을 수행한다.
2.2. MultipleRM 애플리케이션 서버
MultipleRM 설정을 이용해 개발한 XA 서버는 다수의 RM에 접속해서 트랜잭션을 시도한다.
다음은 MultipleRM 애플리케이션 서버의 트랜잭션 처리과정이다.

부트할 때 등록한 모든 RM에 xa_open을 수행한다. 서비스를 요청할 때 CLH에서 RM 수에 따라서 xid를 발급하고 서버에서는 발급한 xid로 모든 RM에 xa_start를 처리한다. 서비스를 종료할 때 모든 RM에 xa_end 처리를 한다. 그 이후의 작업은 기존처럼 등록된 TMS가 xa_prepare, xa_commit 처리를 한다 .
MultipleRM 제약 사항
MultipleRM은 다음과 같은 제약 사항이 존재한다.
-
COUSIN 설정을 지원하지 않는다.
-
다음의 함수를 지원하지 않는다.
-
tpsuspendtx
-
tpresumetx
-
-
데이터베이스는 Oracle과 Tibero, DB2, MQ만을 지원한다.