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

У меня есть существующий проект клиент-сервер, который использует простой 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 и одним экземпляром базы данных. Теперь я планирую расширить его на несколько экземпляров, но не знаю, как.

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


person Joarder Kamal    schedule 17.07.2014    source источник


Ответы (2)


Вы можете использовать автономный менеджер транзакций 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

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

person Alex Chernyshev    schedule 27.07.2014
comment
@jmkam: я не знаю насчет OP, но я думаю, что этот ответ стоит вознаграждения, особенно пример с Hibernate + JTA в автономной среде, который также можно использовать в Java EE. Также спасибо за ответ Андрея, но, поскольку он специализируется на Spring, а в ОП нет его в тегах или вопросе, я бы выбрал этот. - person Alexander Rühl; 28.07.2014

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

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

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

person Andrei I    schedule 25.07.2014
comment
Не могли бы вы предоставить более подробную информацию о вашем предложении, например. учебник или пример? - person Alexander Rühl; 25.07.2014
comment
Мое предложение с Весной? Просто поищите в Интернете spring jta, и там вы найдете множество примеров. Например, проверьте статью Spring на JTA. - person Andrei I; 25.07.2014
comment
@Geziefer, и поскольку у вас уже есть опыт работы с Java EE: вы просто настраиваете диспетчер транзакций и сообщаете своим EntityManagers, что они являются JTA (не локальными для ресурсов), и везде, где они вводятся Spring, они автоматически присоединяются к транзакции JTA . Аннотации очень похожи на аннотации в Java EE, но отличаются только аннотациями для распространения транзакций. (и, вероятно, вы должны аннотировать общедоступные методы с помощью @Transactional по сравнению с EJB, где это по умолчанию) - person Andrei I; 25.07.2014
comment
@AndreiI Я просматривал статью Spring всего минуту назад, прежде чем искать ваш пост !! Но не могли бы вы привести более конкретный и свежий пример с Spring+JTA+EclipseLink? - person Joarder Kamal; 26.07.2014
comment
@jmkam все это разные компоненты, которые вы можете склеить вместе в приложении Spring. Поэтому просто найдите JTA+Spring и EclipseLink+Spring, и вы найдете достаточно примеров того, как настроить Spring. - person Andrei I; 28.07.2014