Я пытаюсь внедрить атомарные транзакции Web-сервисов в WebSphere Application Server (вынужден использовать версию 7.0, но также пробовал 8.5).
По сути, у меня есть две службы JAX-WS (CallerService
иCalleeService
) вызывая друг друга, что-то записывая в источник данных XA (Oracle).CallerService
вызывает CallerBean
EJB, который вставляет строку в таблицу Oracle, затем вызывает CalleeService
, который выполняет такую же вставку в БД.
CallerBean
имеет @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
, а CalleeBean имеет @TransactionAttribute(TransactionAttributeType.MANDATORY)
.Второй сбой с ошибкой Global tx is required
, поэтому транзакция не работает.
Я добавил политики WSAT в WSDL и настроил политики транзакций в WebSphere в соответствии с https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cjta_wstran.html и включил отправку контекста WSAT вibm-ejb-jar-ext.xml.
Код можно найти по адресу https://github.com/ike3/lkp_transactions/tree/was7. У меня есть другая ветвь с такой же конфигурацией аннотаций, которая отлично работает на сервере приложений WildFly без какой-либо настройки.
Поддерживается ли это что-то в Websphere Application Server? Могу ли я использовать прозрачную конфигурацию транзакций как на WebServices, так и на EJB?