В GlassFish 2.x проверка параметра cmt-timeout-in-seconds в файле sun-ejb-jar.xml

Моя команда использует настройку «cmt-timeout-in-seconds» в файле «sun-ejb-jar.xml» на сервере GlassFish 2.x для управления порогом времени ожидания транзакции для модуля EJB.

Я понимаю, что это довольно широкий вопрос... но у нас возникли проблемы (я сам не уверен во всех деталях), и меня попросили проверить, что "cmt-timeout-in-seconds" на самом деле используется.

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


person Steve Perkins    schedule 27.01.2011    source источник


Ответы (1)


Кажется, что самый простой ответ — просто написать небольшой тестовый пример. Я только что создал простой EJB с пользовательской настройкой времени ожидания CMT в "sun-ejb-jar.xml".

Затем я написал метод для этого класса EJB, аннотированный так, чтобы он требовал свою собственную новую транзакцию. Этот метод делал три вещи: (1) писал сообщение журнала, (2) использовал Thread.sleep() для приостановки выполнения на некоторое время и (3) писал второе сообщение журнала.

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

Тем не менее, одно интересное замечание, которое я узнал из этого... когда время транзакции, управляемой контейнером, истекает для метода EJB3, оно не прерывает выполнение тот метод! Метод продолжает выполняться (или остается зависшим), а последствия тайм-аута не обрабатываются и не регистрируются до тех пор, пока метод не вернется. Интересное поведение, которое может привести к серьезным ошибкам, если вы об этом не знаете. Дополнительные сведения см. в этой статье.

person Steve Perkins    schedule 28.01.2011