在雲端平台中的 Liberty 上不會啟用兩段式確定 (XA) 交易。 依預設,Liberty 交易管理程式會將交易日誌檔寫入本端檔案系統。 因為雲端平台中的本端檔案系統只是暫時存在,當應用程式或 Java 虛擬機器 (JVM) 損毀之後,並沒有交易日誌檔可用。 雖然可配置交易管理程式來使用資料庫服務儲存交易日誌,但雲端平台會在應用程式損毀之後,自動建立應用程式的全新實例。 因此,交易管理程式無法識別使用哪個特定的日誌來回復失敗實例的交易。
依預設,Enterprise JavaBeans (EJB) Bean 是由儲存器管理,且具有 Required 交易屬性,這表示它們使用 JTA 交易。 跨越單一資源的 JTA 交易完全受支援。 跨越多個資源的 JTA 交易需要不受支援的兩段式確定。 此規則會標示 ejb-jar.xml 檔案和 Java 程式碼,該程式碼參照 javax.ejb 套件。
此規則也會標示參照下列項目的 Java 程式碼:javax.transaction.UserTransaction 類別。
檢查應用程式是否使用 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>