Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как использовать JPA и JTA вместе с менеджером транзакций?

Автор вопроса: Joarder KamalОтветов: 2

У меня есть существующий проект клиент-сервер, который использует простой JDBC для связи с одним экземпляром MySQL. Теперь я хотел бы расширить его для поддержки нескольких (разделенных) экземпляров MySQL, используя любую реализацию JPA и с помощью реализации JTA, которая поддерживает транзакции XA.

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

Для моей цели я был бы счастлив, если бы логика приложения могла быть абстрагирована с использованием любого уровня ORM - реализации JPA (например, EclipseLink Partition или OpenJPA Slice), а затем с помощью диспетчера транзакций (например, BTM) для выполнения транзакций XA, обеспечивающих гарантии ACID поверх базовый набор экземпляров MySQL.

До сих пор я пробовал видеоурок на YouTube (https://www.youtube.com/watch?v=Vmr6GAlbG10), экспериментируя с EclipseLink и одним экземпляром базы данных. Теперь я планирую расширить его на несколько экземпляров, но не знаю, как.

Любые добрые предложения, ссылки и рекомендации были бы очень полезны. Я новичок в этом, так что примите любые неудобства, если я что-то неправильно понял. Спасибо.

jpajtajakarta-eeeclipselinkbitronix

Ответы

Ответ 1 · рейтинг 1 · Alex Chernyshev

Вы можете использовать автономный менеджер транзакций JTA, такой как Atomikos http://www.atomikos.com/ или SimpleJTA http://simplejta.sourceforge.net/ полностью вне какого-либо контейнера.

Подробнее об автономных менеджерах JTA: Что такое хороший реализация Java SE JTA TransactionManager с открытым исходным кодом?

Также можно использовать популярные реализации JPA как автономные в сочетании с автономным JTA (что вы просили). Вот пример для Atomikos и Hibernate http://www.atomikos.com/Documentation/HibernateThreeStandalone

Но это не лучший вариант использования таких технологий и у вас есть шансы и время - переходить на обычную трехуровневую архитектуру с сервером приложений.

Ответ 2 · Andrei I

Также возможно использовать JTA в контексте приложения Spring.

Кроме того, вы МОЖЕТЕ использовать его в контексте вашего собственного приложения без каких-либо фреймворков, но это довольно сложно, так как вам придется контролировать, что/когда/куда вводится и как возвращается вызываемый метод (с исключениями или без). Но, конечно, это действительно зависит от того, что именно вы хотите использовать от JTA: распространение транзакций или просто использование разных баз данных в одной и той же JTA-транзакции.

Итак, я предлагаю использовать Spring, если вы не хотите использовать контейнер приложения (Java EE).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы