Cloud Foundry 환경을 위한 Liberty 빌드팩에서는 2단계 커미트(XA)가 사용 안함으로 설정되어 있습니다. 기본적으로, Liberty 트랜잭션 관리자가 트랜잭션 로그 파일을 로컬 파일 시스템에 기록합니다. 클라우드 플랫폼에서는 로컬 파일 시스템의 수명이 짧기 때문에 애플리케이션 또는 JVM(Java Virtual Machine)이 손상된 후에는 트랜잭션 로그 파일을 사용할 수 없습니다. 데이터베이스 서비스를 사용하여 트랜잭션 로그를 저장하도록 트랜잭션 관리자를 구성할 수 있지만, 손상 후 클라우드 플랫폼에서 애플리케이션의 완전히 새로운 인스턴스를 자동으로 작성합니다. 따라서, 트랜잭션 관리자는 실패한 인스턴스의 트랜잭션을 복구하는 데 사용할 특정한 로그를 식별할 수 없습니다.
2단계 커미트는 EJB Bean을 통해, 또는 애플리케이션의javax.transaction.UserTransaction 클래스 사용을 통해 사용으로 설정할 수 있습니다. Cloud Foundry 환경에서 실행하려면 애플리케이션이 XA 트랜잭션을 필요로 하는지 확인하십시오.
기본적으로 Enterprise JavaBeans(EJB) Bean은 컨테이너 관리 Bean이며 JTA 트랜잭션을 사용함을 의미하는 Required
트랜잭션 속성을 가집니다. 범위가 단일 소스인 JTA 트랜잭션은 완전히 자원됩니다. 여러 자원에 걸쳐 있는 JTA 트랜잭션은 Cloud Foundry에서 지원되지 않는 2단계 커미트를 필요로 합니다.
Java 코드에서는 다음과 같은 명시적 어노테이션이 JTA 트랜잭션의 사용을 표시합니다.
javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.MANDATORY)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRED)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRES_NEW)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.SUPPORTS)javax.ejb.TransactionManagement(javax.ejb.TransactionManagementType.CONTAINER)ejb-jar.xml 파일에서는 다음과 같은 명시적 요소가 JTA 트랜잭션의 사용을 표시합니다.
<trans-attribute>Mandatory|Required|RequiresNew|Supports</trans-attribute><transaction-type>Container</transaction-type>참고: 애플리케이션이 javax.transaction.UserTransaction 클래스를 사용하지 않고 모든
애플리케이션 EJB Bean이 트랜잭션 속성이 "Never" 또는 "NotSupported"인 컨테이너 관리 Bean이거나 Bean 관리 Bean인 경우,
애플리케이션은 XA 트랜잭션을 사용하지 않으며 따라서 이 규칙의 플래그 지정을 무시할 수 있습니다.
다음과 같은 명시적 어노테이션은 EJB Bean이 XA 트랜잭션을 사용하지 않음을 표시합니다.
javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NOT_SUPPORTED)javax.ejb.TransactionManagement(javax.ejb.TransactionManagementType.BEAN)<trans-attribute>Never|NotSupported</trans-attribute><transaction-type>Bean</transaction-type>