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