JTA (как спецификация Java EE) определяет интерфейсы (http://docs.oracle.com/javaee/7/api/javax/transaction/package-summary.html) для связи менеджера транзакций с сервером приложений (например, WildFly), приложения (вашего кода) и ресурсов (например, базы данных). Менеджер транзакций реализует спецификацию, и ее целью является управление транзакциями XA. Менеджер транзакций является частью сервера приложений Java EE.
Чтобы ответить на ваши вопросы
A1) Распределенная/транзакции XA управляется менеджером транзакций как часть сервера приложений. Любое взаимодействие с сервером приложений с базой данных осуществляется через драйвер jdbc (основанный на сервере приложений). Для того, чтобы база данных являлась полноправным участником транзакции XA, база данных и драйвер должны иметь для этого возможности.
Спецификация Jdbc определяет интерфейсы, которые jdbc должен обеспечить для менеджера транзакций, способного управлять им. См. Например, пакет драйверов jdbc для PostgreSQL xa (https://github.com/pgjdbc/pgjdbc/tree/master/pgjdbc/src/main/java/org/postgresql/xa) или проверить саму спецификацию jdbc.
База данных должна предлагать возможности для правильного ответа на вызовы jdbc-драйвера xa и, в частности, для реализации 2PC. Когда команды менеджера транзакций на составляют, база данных должна помнить, что есть некоторая подготовленная транзакция, которая работает с такими и такими данными для того, чтобы завершить ее после вызова менеджера транзакций commit.
A2) Если вы понимаете транзакцию XA как сделки соединение из эксплуатации на несколько ресурсов (некоторые базы данных, JMS брокер), то сама база данных не имеет никакого понятия, которые являются другими участниками (как большая сделка ХА) ,База данных знает только, что есть транзакция XA, и я участник.
Все управление транзакциями XA является ответственностью менеджера транзакций. База данных работает 2PC, которая управляется менеджером транзакций. База данных заботится только о том, какие данные являются частью такой двухэтапной фиксации и отвечает на вызовы, поступающие от диспетчера транзакций в соответствии со спецификацией XA.
Спасибо за ваш ответ. Кто выполняет спецификацию JTA? Использует ли сервер приложений JTA-спецификацию? И является ли частью управления транзакциями частью сервера приложений? Любой дополнительный указатель будет полезен. FYI, я прочитал значительную документацию, но никто не предоставил рабочую примерную заявку для демонстрации концепций, и, следовательно, у меня путают все еще. – CuriousMind
JTA является частью спецификации EE, и поэтому каждый контейнер, который претендует на роль EE контейнер должен его реализовать. Другими словами, спецификация EE говорит: если вы хотите назвать себя корпоративным контейнером, выполните эти функции. –
Weblogic, например, представляет собой контейнер EE. Он реализует JTA (среди других функций EE: сервлеты, JMS и т. Д.) –