Транзакции двухфазного принятия (XA) отключены в пакетах компоновки Liberty для сред Cloud Foundry. По умолчанию администратор транзакций Liberty записывает файл протокола транзакций в локальную файловую систему. Поскольку локальная файловая система временная на облачных платформах, файл протокола транзакций недоступен после сбоя приложения или виртуальной машины Java. Хотя администратор транзакций можно настроить для использования службы базы данных для хранения протоколов транзакций, облачные платформы автоматически создают полностью новый экземпляр приложения после сбоя. Как следствие, администратор транзакций не может определить, какой конкретно протокол использовать для восстановления транзакций сбойного экземпляра.
Транзакции двухфазного принятия могут использоваться с помощью EJB или приложением классаjavax.transaction.UserTransaction . Для успешного выполнения в среде Cloud Foundry проверьте, требуется ли для приложения транзакции XA.
По умолчанию объекты EJB управляются контейнером и имеют атрибут транзакции Required, то есть используются транзакции JTA. Транзакции JTA, охватывающие один ресурс, полностью поддерживаются. Транзакции JTA, охватывая несколько ресурсов, требуют двухфазного принятия, которое не поддерживается в средах Cloud Foundry.
В коде 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 приложения управляются объектом EJB или контейнером с атрибутами transaction "Never" или "NotSupported", то приложение не использует транзакции XA, и на пометки данного правила можно не обращать внимания.
Следующие явные аннотации и элементы указывают на то, что объект EJB не использует транзакции 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>