У меня есть длительный метод, который выполняет большое количество собственных запросов SQL через EntityManager (TopLink Essentials).Каждый запрос выполняется всего за миллисекунды, но их много тысяч.Это происходит в рамках одной транзакции EJB.Через 15 минут база данных закрывает соединение, что приводит к следующей ошибке:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b02-p04 (04/12/2010))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Closed Connection
Error Code: 17008
Call: select ...
Query: DataReadQuery()
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:319)
.
.
.
RAR5031:System Exception.
javax.resource.ResourceException: This Managed Connection is not valid as the phyiscal connection is not usable
at com.sun.gjc.spi.ManagedConnection.checkIfValid(ManagedConnection.java:612)
В пуле соединений JDBC я установил is-connection-validation-required="true"
и connection-validation-method="table"
, но это не помогло.
Я предположил, что валидация соединения JDBC предназначена для устранения именно такого рода ошибок.Я также посмотрел на расширения TopLink (http://www.oracle.com/technetwork/middleware/ias/toplink-jpa-extensions-094393.html) для каких-то настроек тайм-аута, но ничего не нашел. Есть также файл конфигурации сеанса TopLink (http://download.oracle.com/docs/cd/B14099_19/web.1012/b15901/sessions003.htm), но я не думаю, что там есть что-то полезное.
У меня нет доступа к таблицам Oracle DBA, но я думаю, что Oracle закрывает соединения через 15 минут в соответствии с настройкой в переменной профиля CONNECT_TIME.
Есть ли другой способ создать TopLink или пул JDBCвосстановить закрытое соединение?
База данных - Oracle 10g, сервер приложений - Sun Glassfish 2.1.1.