Настройка конфигурации c3p0 для долго выполняющегося запроса

Я использую Hibernate версии 3.3.1 и jtds 1.2.2 в качестве драйвера JDBC и c3p0 версии 0.9.1.2 для пула соединений для подключения к SQL Server.

Мой запрос выполняется около 12 секунд. Когда я запускаю запрос, я получаю следующее исключение

ОШИБКА [основная] (JDBCExceptionReporter.java:101) — Недопустимое состояние, объект Connection закрыт. org.hibernate.exception.GenericJDBCException: не удалось проверить режим автоматической фиксации JDBC в org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) в org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) в org .hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) в org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) в org.hibernate.jdbc.JDBCContext.afterNontransactionalQuery(JDBCContext.java:275) в org.hibernate.impl.SessionImpl.afterOperation(SessionImpl.java:444) в org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1728) в org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) в org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)

Если я изменю запрос, чтобы он возвращал небольшой набор данных, я не получаю исключения. Кажется, есть какая-то проблема с конфигурацией.

В моем файле hibernate.properties у меня есть следующие значения конфигурации

hibernate.format_sql=true
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.optimistic-lock=true
hibernate.connection.autocommit=true
hibernate.show_sql=false
hibernate.generate_statistics=false
c3p0.acquire_increment=1
c3p0.idle_test_period=1000
c3p0.max_size=10     
c3p0.max_statements=0     
c3p0.min_size=5     
c3p0.timeout=800

Не могли бы вы подсказать, какие параметры необходимо установить для запуска долго выполняющегося запроса?

Спасибо


person Kevin Karr    schedule 20.03.2014    source источник


Ответы (1)


c3p0 не требует специальной настройки для длительных запросов, хотя есть некоторые настройки (в частности, unreturnedConnectionTimeout), которые могут мешать длительным запросам, если они установлены.

я бы проверил, что unreturnedConnectionTimeout не установлен. (есть много мест, где конфигурация c3p0 может быть установлена ​​за пределами вашего файла hibernate.properties.) c3p0 выгружает свою конфигурацию для регистрации в INFO при инициализации пула. найдите значение unreturnedConnectionTimeout. должно быть 0.

если он равен 0, на уровне c3p0 нет ничего, что могло бы помешать вашему долговременному запросу.

person Steve Waldman    schedule 21.03.2014