2016-07-19 4 views
0

Я пытаюсь понять distributed transactions в Java EE. Прочитав некоторые онлайн-материалы и книги, я узнал, что в Java EE существует определенный API, называемый JTA, который является одним из технологических стеков Java EE для обслуживания распределенных транзакций. В дополнение к JTA существуют другие концепции: 2PC (two-phase commit) strategy, XA, the eXtended Architecture.Нужно ли драйверам базы данных поддерживать распределенные транзакции или поддерживать их в самой базе данных?

Учитывая только базу данных, я следующий вопрос относительно распределенных транзакций:

Q1) реальной поддержки для распределенных транзакций Исходит ли от самих драйверов база данных?

Q2) Являются ли базы данных (реальный db) осведомленными о распределенных транзакциях или заботятся о других компонентах?

Может ли кто-нибудь помочь мне в расчистке этих вопросов, пожалуйста?

ответ

1

Короче говоря, это база данных, которая фактически имеет транзакционную функциональность. Это база данных, которая должна заботиться о том, чтобы данные после фиксации были согласованы и правильно сохранены на диске.

В то же время водитель может помочь вам управлять транзакциями. Например, откройте его для вас по первому запросу или автоматически зафиксируйте его.

Редактировать: Извините, главный вопрос был о распределенных транзакциях. Распределенные транзакции обрабатываются драйвером и менеджером транзакций. В этой транзакции нет ничего особенного с точки зрения базы данных.

+0

Спасибо за ваш ответ. Кто выполняет спецификацию JTA? Использует ли сервер приложений JTA-спецификацию? И является ли частью управления транзакциями частью сервера приложений? Любой дополнительный указатель будет полезен. FYI, я прочитал значительную документацию, но никто не предоставил рабочую примерную заявку для демонстрации концепций, и, следовательно, у меня путают все еще. – CuriousMind

+1

JTA является частью спецификации EE, и поэтому каждый контейнер, который претендует на роль EE контейнер должен его реализовать. Другими словами, спецификация EE говорит: если вы хотите назвать себя корпоративным контейнером, выполните эти функции. –

+1

Weblogic, например, представляет собой контейнер EE. Он реализует JTA (среди других функций EE: сервлеты, JMS и т. Д.) –

0

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.

Смежные вопросы