Para implementar el C3P0 de la mejor manera, verifique esta respuesta
C3P0 :
Para aplicaciones empresariales, C3P0 es el mejor enfoque. C3P0 es una biblioteca fácil de usar para aumentar los controladores JDBC tradicionales (basados en DriverManager) con DataSources enlazables JNDI, incluidos DataSources que implementan Connection and Statement Pooling, como se describe en la especificación jdbc3 y la extensión std jdbc2. C3P0 también manejó robustamente las desconexiones de DB y las reconexiones transparentes en el currículum, mientras que DBCP nunca recuperó las conexiones si el enlace se sacó de debajo.
Esta es la razón por la cual c3p0 y otros grupos de conexiones también tienen cachés de instrucciones preparadas: permite que el código de la aplicación evite lidiar con todo esto. Las declaraciones generalmente se mantienen en un grupo limitado de LRU, por lo que las declaraciones comunes reutilizan una instancia de PreparedStatement.
Peor aún, DBCP estaba devolviendo objetos de conexión a la aplicación para la que se había roto el transporte subyacente. Un caso de uso común para c3p0 es reemplazar la agrupación de conexiones DBCP estándar incluida con Apache Tomcat. Muchas veces, un programador se encontrará con una situación en la que las conexiones no se reciclan correctamente en el grupo de conexiones DBCP y c3p0 es un reemplazo valioso en este caso.
En las actualizaciones actuales, C3P0 tiene algunas características brillantes. esos se dan abajo:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
Aquí, el tamaño de grupo máximo y mínimo define los límites de conexión que significan la conexión mínima y máxima que tomará esta aplicación. MaxIdleTime()
defina cuándo liberará la conexión inactiva.
DBCP :
Este enfoque también es bueno, pero tiene algunos inconvenientes, como el tiempo de espera de la conexión y la liberación de la conexión. C3P0 es bueno cuando estamos usando proyectos de mutithreading. En nuestros proyectos, utilizamos simultáneamente múltiples ejecuciones de subprocesos mediante DBCP, luego obtuvimos un tiempo de espera de conexión si utilizamos más ejecuciones de subprocesos. Entonces fuimos con la configuración c3p0. No recomendaría DBCP en absoluto, especialmente es la habilidad de tirar conexiones fuera del grupo cuando el DB desaparece, su incapacidad para volver a conectarse cuando el DB regresa y su incapacidad para agregar dinámicamente objetos de conexión nuevamente al grupo (se cuelga para siempre una lectura de socket de E / S JDBCconnect posterior)
Gracias :)