Проблема:
При повторном развертывании веб-приложения, использующего пул JDBC-соединений c3p0 как JNDI DataSource в консоль вываливается сообщение:
WARNING: A C3P0Registry mbean is already registered. This probably means that an application using c3p0 was undeployed, but not all PooledDataSources were closed prior to undeployment. This may lead to resource leaks over time. Please take care to close all PooledDataSources.
Решение:
PooledDataSource необходимо закрывать перед отменой развертывания приложения. Для этого в ServletContextListener`е в методе contextDestroyed() нужно выполнить следующий код:
import com.mchange.v2.c3p0.DataSources;
import com.mchange.v2.c3p0.PooledDataSource;
try
{
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/myDataSource");
if(ds instanceof PooledDataSource)
{
((PooledDataSource)ds).close();
DataSources.destroy(ds);
}
}
catch(NamingException ex)
{
log.log(Level.SEVERE, "Got NamingException while cleaning up DataSource", ex);
}
catch(SQLException ex)
{
log.log(Level.SEVERE, "Got NamingException while cleaning up DataSource with com.mchange.v2.c3p0.DataSources.destroy()", ex);
}
Комментариев нет:
Отправить комментарий