Лучший способ переопределить изоляцию транзакций весной с WebSphere и DB2
Привет все,
Кажется, что WebSphere не позволяет Spring программно переопределить уровень изоляции транзакций, настроенный на сервере.xml (в источнике данных WebSphere).Итак, каков наилучший вариант, если в такой ситуации необходимо переопределить изоляцию транзакции?
Допустим, по умолчанию для уровня изоляции установлено значение REPITABLE_READ, существует метод ... огромный метод с большим количеством операций выбора и обновления парыв конце.Давайте представим, что нет никакого способа реорганизовать этот метод в любом случае, но мы знаем, что где-то в середине этого метода есть пара селекторов, которые можно использовать вне изоляции RR, поскольку они огромны, со многими объединениями, и пока мы выполняем эти селекты, мыблокирует строки в базе данных для другой транзакции.Проблема заключается в том, что извлечение их в отдельный метод, аннотированный @Transactional (изоляция = READ_COMMITED), не изменит ситуацию, так как эта изоляция игнорируется WebSphere или драйвером базы данных.
Итак, можно ли вывести Connection из системы?Hibernate Session и изменить уровень изоляции на READ_COMMITED точно в требуемом месте (вокруг этих двух методов) и вернуть его обратно в REPITABLE_READ в конце метода?Я предполагаю, что Соединение используется для каждого потока, и не должно быть никаких побочных эффектов, изменяющих уровень изоляции на соединении?
Или лучше добавить выделенный источник данных WebSphere с преднамеренно настроенным уровнем изоляции в READ_COMMITED и создать аспект с аннотацией, который позволил бы заменить источник данных для этих двух методов?
Кроме того, было бы очень благодарно, если бы кто-нибудь мог объяснить, как именно механизм переопределения изоляции работает на уровне @Transaction и сколько уровней изоляции возможно при взаимодействии Spring + Database?Или, может быть, у кого-то есть хорошая ссылка с этим ответом.
Спасибо всем!