Я пытаюсь понять JTA и использую Bitronix в качестве Менеджера транзакций по выбору (только ради обучения и понимания). Я смотрю на код внутри справочника Bronronix здесь, и я задаюсь вопросом: если я использую JDBC, который сам является транзакционным (Connection
может быть отведенный/откат), зачем мне когда-нибудь писать такой код?!?!
Теперь, возможно, точка этого фрагмента кода состояла в том, чтобы просто продемонстрировать, как использовать Bitronix/JTA поверх существующего хранилища транзакций, но я до сих пор не понимаю, какие преимущества он предлагает.
Затем этот фрагмент кода заставил меня подумать: "Если только два основных источника данных, которые вы используете, это базы данных и брокеры сообщений, и вы используете JDBC/JMS для связи с ними соответственно, и эти два стандарта (JDBC/JMS) уже транзакционный, то зачем вам вообще нужно использовать JTA?!?!"
Является ли JTA своего рода "внутренним" Java EE API, который использует JDBC, JPA, JMS и т.д.; и только публично выставлены для 1%, которые хотят сделать с ней что-то безумное? Или я вообще не замечаю идею/применимость JTA?
Я предполагаю, что мог бы представить два варианта использования JDBC и не-JMS для прямого попадания в JTA, но, поскольку я настолько нечеткий на JTA, в первую очередь, я понятия не имею, являются ли эти случаи внедорожными или нет:
- Возможно, у вас сложная система ввода-вывода в вашем приложении и есть несколько потоков, которые читают/записывают из одного и того же файла на диске. Возможно, в каждом потоке будет использоваться транзакция для записи в этот файл. (Да?!? Нет?!?)
- Возможно, у вас есть машина POJO состояния, представляющая состояние системы, и несколько потоков могут изменять машину. Возможно, вы будете использовать каждый поток для изменения состояния машины. (Да?!? Нет?!?)
Я полагаю, что в основе моего вопроса:
- Если мои вызовы JPA (Hibernate) и/или JDBC уже являются транзакционными, почему я хочу их обернуть в блок JTA begin- > commit/rollback? То же самое для JMS и систем обмена сообщениями.
- За пределами JPA/JDBC/JMS существуют ли какие-либо варианты использования JTA для выполнения ряда операций?
Спасибо заранее!