클라우드 플랫폼의 Liberty에서는 2단계 커미트(XA) 트랜잭션이 사용되지 않습니다. 기본적으로, Liberty 트랜잭션 관리자가 트랜잭션 로그 파일을 로컬 파일 시스템에 기록합니다. 클라우드 플랫폼에서는 로컬 파일 시스템의 수명이 짧기 때문에 애플리케이션 또는 JVM(Java Virtual Machine)이 손상된 후에는 트랜잭션 로그 파일을 사용할 수 없습니다. 데이터베이스 서비스를 사용하여 트랜잭션 로그를 저장하도록 트랜잭션 관리자를 구성할 수 있지만, 손상 후 클라우드 플랫폼에서 애플리케이션의 완전히 새로운 인스턴스를 자동으로 작성합니다. 따라서, 트랜잭션 관리자는 실패한 인스턴스의 트랜잭션을 복구하는 데 사용할 특정한 로그를 식별할 수 없습니다.
기본적으로 Enterprise JavaBeans(EJB) Bean은 컨테이너 관리 Bean이며 JTA 트랜잭션을 사용함을 의미하는 Required
트랜잭션 속성을 가집니다. 범위가 단일 소스인 JTA 트랜잭션은 완전히 자원됩니다. 범위가 여러 자원에 걸친
JTA 트랜잭션의 경우, 지원되지 않는 두 단계 커미트가 필요합니다. 이 규칙은 ejb-jar.xml 파일과 javax.ejb 패키지에 대한
참조가 있는 Java 코드에 플래그를 지정합니다.
이 규칙은 또한 javax.transaction.UserTransaction 클래스에 대한 참조가 있는 Java 코드에 플래그를 지정합니다.
애플리케이션에서 XA 트랜잭션을 사용하는지 여부를 확인하고 XA 트랜잭션이 있으면 이를 제거하십시오.
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이 Bean으로 관리되거나 컨테이너가 "Never" 또는 "NotSupported"의
트랜잭션 속성으로 관리되는 경우, 애플리케이션은 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>