Пользуюсь jboss 4.2.3.
У него есть параметр TransactionTimeout (в jboss-service.xml), который указывает, как долго Transaction может выполняться.
К сожалению, когда время ожидания истекает, выполнение не прерывается прямо сейчас, если транзакция что-то делает, только она помечается для отката позже.
Эффект таков: когда у меня длительная транзакция, и поток, например, прерывается на подготовленном
Я попробовал перехватчик с http://management-platform.blogspot.com/2008/11/transaction-timeouts-and-ejb3jpa.html, но он отмечает только поток как прерванный, большинство методов не проверяют это при выполнении, поэтому эффект такой же.
Я пробовал также установить подготовленныйStatement.setQueryTimeout, но в Oracle (который мы используем) он ждет с прерыванием сеанса, пока оракул не захочет это сделать (например, он не прервет процедуру plsql, которая выполняет dbms_lock.sleep < / strong> (..)).
Я хотел бы убить сеанс базы данных, связанный с транзакцией, для которой истекло время ожидания - я знаю, какая это транзакция и с каким потоком она связана (потому что я использую перехватчик из ссылки, приведенной выше), но я не знаю как получить сеанс, к которому привязана транзакция - я должен получить его, чтобы убить его - и тогда поток будет прерван.
Мне не хватает более простого решения или я делаю его совершенно неправильно :)?