Обработка транзакций на разных EAR - PullRequest
1 голос
/ 14 декабря 2009

Что является лучшим методом для обработки нескольких EAR и одной и той же транзакции, поскольку мы знаем, что нам нужно применять концепции XA для правильной работы транзакции. но, очевидно, в текущем проекте, над которым мы работали, это не является строго необходимым для создания и обновления; однако, если мы пытаемся извлечь какую-либо коллекцию из объекта, мы получаем ошибку, в которой говорится, что она не является активной транзакцией или она была закрыта, но если мы обновляем объект A в ухе A и обновляем объект B в ухе B, он прекрасно работает, когда объект A и у Entity B разные источники данных, в этот момент мы очень запутались, потому что еще не настроили ни один источник данных xa. Каков наилучший подход к работе с этим. транзакции обрабатываются компонентами, а не контейнером, а источники данных различаются между EAR A и EAR B

1 Ответ

1 голос
/ 15 декабря 2009

Если вы хотите работать с несколькими ресурсами (базами данных, ресурсами JMS, соединителями JCA) в одной транзакции, вам нужна транзакция XA (также известная как «глобальная транзакция»). Транзакция XA включает в себя менеджер транзакций JTA для координация по протоколу двухфазной фиксации (2PC). Более подробную информацию о XA см. в этом замечательном сообщении XA Exposed от Mike Spille.

(...), если мы обновляем сущность A в ухе A и обновляем сущность B в ухе B, она прекрасно работает, когда сущность A и сущность B имеют разные источники данных

Как вы выполняете это обновление (я имею в виду, откуда)? Что вы подразумеваете именно под "это работает"? Вы уверены, что оба обновления откатываются в случае проблем? Не используя глобальные транзакции, я бы удивился, если бы они были. Вы можете это немного прояснить?

...