Источники данных JTA без транзакций - PullRequest
3 голосов
/ 27 февраля 2011

(Предполагается ручное зачисление и разграничение ресурсов.)

У меня есть несколько ресурсов / источников данных с поддержкой XA, для которых я планирую выполнять обновления транзакций. Кроме того, некоторые источники данных с поддержкой XA могут обновляться изолированно (без необходимости использования каких-либо других ресурсов).

Предполагая, что я уже совершил несколько транзакций с использованием источника данных, могу ли я игнорировать TransactionManager для односторонних обновлений источника данных.

Разве я просто не запускаю глобальную транзакцию и не фиксирую напрямую на самом ресурсе? Предполагая, что это правильный подход, могу ли я впоследствии включить ресурс в транзакцию без побочных эффектов?

Спасибо

Chris

1 Ответ

3 голосов
/ 28 марта 2011

XA-ресурсов поддержка XA.Не требуется .Поэтому вполне возможно запустить транзакцию не-XA через ресурс, поддерживающий XA, и зафиксировать ее локально.

Второй вопрос не совсем понятен.Добавить ресурс в локальной транзакции в транзакцию XA?Не уверен, что это поддерживаемый вариант использования.Или вопрос «могу ли я добавить ресурс в транзакцию XA после того, как я зафиксировал локальную?».Да, вы можете.

Давайте рассмотрим пример подключения к базе данных.Когда локальная транзакция запускается через соединение, идентификатор транзакции существует только в базе данных.После подтверждения этот идентификатор исчезает, и соединение возвращается в исходное состояние, то есть не в какой-либо транзакции.Соединение можно добавить к любой транзакции XA.

Теперь, когда вы запускаете транзакцию XA, несколько соединений (например, из разных JVM в кластере) могут использовать один и тот же идентификатор транзакции, и с точки зрения БД онив рамках той же транзакции.Если у вас есть другое соединение в локальной транзакции, которое имеет свой собственный идентификатор транзакции для базы данных, как бы вы добавили это соединение (и, что более важно, изменения, сделанные в нем) в существующий XA с другим идентификатором?Это было бы грязное дело, и я считаю, что не поддерживается.

...