Java EE :Зачем использовать JTA напрямую?

Я пытаюсь понять JTA и использую Bitronix в качестве диспетчера транзакций по выбору (просто ради обучения и понимания ). Я смотрю код внутри справочного руководства Bitronix здесь и задаюсь вопросом про себя:Если я использую JDBC, который сам является транзакционным(Connectionможно зафиксировать/откатить ), зачем мне писать такой код?!?!

Возможно, смысл этого фрагмента кода заключался в том, чтобы просто продемонстрировать, как использовать Bitronix/JTA с существующим транзакционным хранилищем данных, но я до сих пор не понимаю, какие неотъемлемые преимущества он предлагает.

Затем этот фрагмент кода заставил меня задуматься :" Если единственными двумя основными источниками данных, которые вы используете, являются базы данных и брокеры сообщений, и вы используете JDBC/JMS для связи с ними соответственно, и эти два стандарта (JDBC/ JMS )уже являются транзакционными, тогда зачем вам вообще нужно использовать JTA?!?! "

Является ли JTA своего рода «внутренним» API Java EE, который используют JDBC, JPA, JMS и т. д.; и публично -разоблачается только для 1%-ых, которые хотят сделать с ним что-то сумасшедшее? Или я вообще упускаю идею/применимость JTA?

Я думаю, я мог бы представить себе два варианта использования не -JDBC и не -JMS для прямого попадания в JTA, но, поскольку я настолько туманен в JTA, в первую очередь, я понятия не имею, являются ли эти случаи неправильными -или нет:

  • Возможно, у вас есть сложная система ввода-вывода в вашем приложении и несколько потоков, читающих и записывающих один и тот же файл на диске. Возможно, вам нужно, чтобы каждый поток использовал транзакцию для записи в этот файл. (Да?!? Нет?!?)
  • Возможно, у вас есть конечный автомат POJO, представляющий состояние системы.и несколько потоков могут изменять машину. Возможно, вам нужно, чтобы каждый поток использовал транзакцию для изменения состояния машины. (Да?!? Нет?!?)

Я думаю, в корне моего вопроса:

  • Если мои вызовы JPA (Hibernate )и/или JDBC уже являются транзакционными, зачем мне заключать их в блок JTA begin -> commit/rollback? То же самое для JMS и систем обмена сообщениями.
  • Вне JPA/JDBC/JMS, какие варианты использования существуют для использования JTA для выполнения ряда операций?

Заранее спасибо!

20
задан IAmYourFaja 29 June 2012 в 17:17
поделиться