Oracle OCI (драйвер C) обеспечивает функцию OCIBreak()
. Он даже потокобезопасен, и вы можете вызывать его из любой ветки bg, в то время как основной поток использует одно и то же соединение.
Возможно, что Statement.cancel()
делает то же самое.
Это OCIBreak()
требует поездка туда и обратно на сервер БД (т.е. сеть должна быть функциональной), а затем основной поток получает ошибку:
java.sql.SQLException: ORA-01013: user requested cancel of current operation
Вы должны быть в состоянии, чтобы отметить это исключение как некритическое на JBOSS уровень (с использованием ExceptionSorter
).
PS: Мне действительно интересно, можно ли это вызвать из спящего режима. Поскольку JPA оставляет много длинных запросов на наших серверах БД.
It ** есть ** возможно! Посмотрите на класс 'Statement'. Существует способ отменить выполнение запроса: http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#cancel() – bobbel