barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 11 апреля 2012 г.

c3p0: "WARNING: A C3P0Registry mbean is already registered" при переразвертывании веб-приложения на Tomcat

Проблема:
При повторном развертывании веб-приложения, использующего пул 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);
  } 

Комментариев нет:

Отправить комментарий