Использование источника данных XADatasource или источника данных не-XA для транзакций на основе JTAn в JPA - PullRequest
4 голосов
/ 12 декабря 2011

Мы используем JPA 1.0 для операций на основе ORM и хотим иметь источник данных JTA для нашего приложения.У нас есть только 1 база данных, к которой будет подключаться наше приложение.Мы начинаем нашу границу транзакции в классе контроллера, и она продолжается до контроллера уровня DAO -> BOImpl -> DAO.В административной консоли сервера приложений websphere, когда я определяю источник данных, я должен использовать источник данных не XA или XA-Datasource.

Насколько я понимаю, для одного источника данных я не должен использовать XADatasource.Пожалуйста, дайте мне знать, что мне нужно использовать.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Для одного ресурса (например, одной БД) вам действительно не нужен источник данных XA.

С другой стороны, имейте в виду, что большинство реализаций JTA / JTS фактически признают, что существует только 1ресурс, участвующий в транзакциях, поэтому накладные расходы для XA будут минимальными или их тогда не будет.Также могут быть дополнительные участники транзакций, о которых вы могли бы и не подумать, например, отправка сообщений JMS.

Но если вы действительно уверены, что участвует только 1 ресурс, вы можете смело переходить на не-XA.

1 голос
/ 24 июня 2015

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

Типичными ресурсами XA являются базы данных, продукты организации очередей обмена сообщениями, такие как JMS или WebSphere MQ, приложения для мэйнфреймов, пакеты ERP или что-либо еще, что может быть скоординировано с менеджером транзакций. XA используется для координации того, что обычно называется two-phase commit (2PC) transaction. Классический пример транзакции 2PC - это когда две разные базы данных должны обновляться атомарно. Большинство людей думают о чем-то вроде банка, который имеет одну базу данных для сберегательных счетов и другую для чековых счетов. Если клиент хочет перевести деньги между своим текущим и сберегательным счетами, обе транзакции должны участвовать в транзакции, иначе банк рискует потерять часть денег.

Проблема в том, что большинство разработчиков думают: «Ну, мое приложение использует только одну базу данных, поэтому мне не нужно использовать XA в этой базе данных». Это не может быть правдой . Вопрос, который следует задать: «Does the application require shared access to multiple resources that need to ensure the integrity of the transaction being performed?». Например, использует ли приложение адаптеры Java 2 Connector Architecture или службу сообщений Java (JMS)? If the application needs to update the database and any of these other resources in the same transaction, then both the database and the other resource need to be treated as XA resources.

...