Иногда GlassFish не понимает, что соединения в пуле больше не хороши.Следовательно, он может некоторое время выдавать закрытое соединение обратно приложению (я видел, что это происходило до 20 минут).
В этом случае вы можете заставить GF закрыть старые соединения и создатьновые соединения путем очистки пула соединений.
Фрагмент из http://docs.oracle.com/cd/E19798-01/821-1752/giyeb/index.html.
Вы можете очистить пул соединений JDBC одним из следующих способов:
В АдминистрированииКонсоль, откройте компонент «Ресурсы», откройте компонент «JDBC», выберите «Пулы соединений» и выберите пул соединений, который вы хотите очистить.Затем нажмите кнопку «Очистить» в верхнем левом углу страницы.Для получения подробной информации нажмите кнопку «Справка» на консоли администрирования.
Используйте команду asadmin flush-connection-pool.Для получения дополнительной информации см. Справочное руководство Oracle GlassFish Server 3.0.1.
Другой вариант - включить проверку в пуле соединений.Это заставит GF проверить, работает ли соединение, прежде чем передать его приложению.Как только он поймет, что соединение закрыто, он заменит его новым соединением.