Как JTA / JTS решают проблему с превышением времени ожидания транзакции? - PullRequest
3 голосов
/ 19 сентября 2011

Ниже я понимаю, что JTA / JTS обрабатывают проблему истечения времени ожидания транзакции.Но я не могу найти свой документ или материал, подтверждающий мое понимание.Правильно ли я понимаю?Знаете ли вы, какие материалы относятся к этой проблеме?

Сервер приложений выполняет итерацию всех транзакций для проверки тайм-аута.Если происходит тайм-аут транзакции, сервер приложений помечает откат транзакции и регистрирует детали. Но сервер приложений не генерирует исключение и не прерывает транзакцию в этот момент. Когда поток транзакции продолжает пытаться получить доступ к другому транзакционному ресурсу (например, JDBC / JMS), транзакционный ресурс, который реализует интерфейс JTA, проверит флаг откатасначала, прежде чем идти дальше.Затем в этот момент возникает исключение RollbackException.

==========

Тестовый пример 1: установите время ожидания транзакции равным 10 с

I.Начало сделки

II.Сон 20 секунд

III.Отключение системы «Конец ожидания»

Результат: Тайм-аут наступает через 10 секунд, и выход из системы регистрирует подробности тайм-аута, но не вызывает исключение.Будет напечатан «конец в спящем режиме».

==========

Тестовый пример 2: установите время ожидания транзакции на 10 секунд

I.Начало сделки

II.Сон 20 секунд

III.Доступ к БД 1-й раз

IV.Доступ к БД 2-й раз

V.Выход системы из режима ожидания "Sleep end"

Результат: Тайм-аут наступает через 10 секунд, и выход из системы регистрирует сведения о тайм-ауте, но не вызывает исключение.Исключение выдает при доступе к дб 1 раз.«Конец сна» не будет напечатан.

========= *

Тестовый пример 3: установите тайм-аут транзакции на 10 секунд

I.Начало сделки

II.Access db and db deadlock

Результат: Тайм-аут наступает через 10 секунд, и выход из системы регистрирует подробности тайм-аута.Нет исключений, поток транзакций застрял. Таким образом, управление тайм-аутом транзакции не может справиться с проблемой тайм-аута в БД. Я так растерялся по этому поводу.

В моем понимании вышеупомянутое поведение должно быть таким же при использовании весеннего управления транзакциями (JTA) и EJB.Я прав?

Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 30 сентября 2011

Протестировано и доказано, что мое понимание должно быть правильным.

Суммируйте результат, как показано ниже:

• Контроль времени ожидания транзакции влияет только на транзакции (например: доступ к БД / отправка сообщения JMS).

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

• Проблема взаимоблокировки БД не может быть обработана управлением тайм-аутом транзакции.Но в некоторых случаях в DB2 есть механизм предотвращения взаимных блокировок, позволяющий в некоторых случаях освобождать взаимные блокировки и откатывать транзакции.

...