Проблема тайм-аута спящего режима с сервлетами - PullRequest
3 голосов
/ 21 октября 2010

У меня есть сервлет Tomcat, который включает спящий режим. Работает нормально нормально. Когда сервлет запускается, я инициализирую hibernate и создаю фабрику сессий. Затем я использую эту фабрику сеансов для генерации сеансов при выполнении различных транзакций базы данных. Все идет нормально. Моя проблема возникает после длительного периода бездействия сервлета (скажем, когда пользователи уходят домой на ночь, а затем пытаются войти на следующее утро). Внезапно я не могу связаться с базой данных. В логах вижу

org.hibernate.exception.JDBCConectionException: Не удалось выполнить запрос.

Если я остановлю и перезапущу Tomcat, переинициализирую свой сервлет и восстановлю фабрику сессий, все будет работать нормально. Это почти как сама фабрика сессий истекает?

Есть идеи?

Спасибо

Эллиот

1 Ответ

3 голосов
/ 21 октября 2010

Если я остановлю и перезапущу Tomcat, переинициализирую свой сервлет и восстановлю фабрику сессий, все будет работать нормально. Это почти как сама фабрика сессий истекает?

Это не фабрика сессий, а соединения, используемые фабрикой сессий (например, MySQL хорошо известен как тайм-аут соединений после 8 часов простоя по умолчанию) Или:

  • используйте пул соединений, который может проверять соединения по займу и обновлять их ~ или ~
  • увеличить время простоя на стороне базы данных

OK. Предположим, я использую пул соединений c3P0. Как указать в файле hibernate.cfg.xml, что я хочу «проверять подключения по заимствованию» или он делает это по умолчанию?

Различные опции при использовании C3P0 описаны в Настройка тестирования соединения . Мой совет - использовать параметр idleConnectionTestPeriod:

Самое надежное время для тестирования Соединения на выезде. Но это также самый дорогой выбор из перспективы клиента. Наиболее приложения должны работать довольно надежно используя комбинацию idleConnectionTestPeriod и testConnectionsOnCheckIn. Оба Проверка на холостом ходу и проверка выполняется асинхронно, что приводит для лучшей производительности, оба воспринимаются и актуально.

Обратите внимание, что для многих приложений высокий производительность важнее, чем риск случайной базы данных исключение. По умолчанию конфигурация, c3p0 не подключается тестирование вообще. Установка довольно долго idleConnectionTestPeriod, а не тестирование на кассе и регистрация в все отлично, высокоэффективно подход .

Чтобы настроить C3P0 на Hibernate, обязательно прочитайте соответствующие инструкции (и используйте соответствующие свойства и соответствующие файлы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...