Per implementare il C3P0 nel modo migliore, controlla questa risposta
C3P0 :
Per le applicazioni aziendali, C3P0 è l'approccio migliore. C3P0 è una libreria di facile utilizzo per aumentare i driver JDBC tradizionali (basati su DriverManager) con origini dati associabili a JNDI, comprese le origini dati che implementano il collegamento e il pool di istruzioni, come descritto dalle specifiche jdbc3 e dall'estensione std jdbc2. C3P0 ha anche gestito in modo robusto le disconnessioni dei DB e le riconnessioni trasparenti al riavvio, mentre DBCP non ha mai recuperato le connessioni se il collegamento è stato rimosso da sotto di esso.
Questo è il motivo per cui c3p0 e altri pool di connessioni hanno anche preparato delle cache delle istruzioni: ciò consente al codice dell'applicazione di evitare di gestire tutto ciò. Le istruzioni sono generalmente conservate in un pool LRU limitato, quindi le istruzioni comuni riutilizzano un'istanza PreparedStatement.
Peggio ancora, DBCP stava restituendo gli oggetti Connection all'applicazione per la quale il trasporto sottostante si era rotto. Un caso d'uso comune per c3p0 è la sostituzione del pool di connessioni DBCP standard incluso con Apache Tomcat. Spesso, un programmatore si imbatte in una situazione in cui le connessioni non vengono correttamente riciclate nel pool di connessioni DBCP e c3p0 è una valida sostituzione in questo caso.
Negli aggiornamenti attuali C3P0 ha alcune caratteristiche brillanti. quelli sono indicati qui sotto:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
In questo caso, il pool di dimensioni massime e minime definisce i limiti della connessione, il che significa la velocità minima e massima consentita da questa applicazione. MaxIdleTime()
definire quando rilascerà la connessione inattiva.
DBCP :
Anche questo approccio è buono ma presenta alcuni inconvenienti come il timeout della connessione e il rilascio della connessione. C3P0 è buono quando stiamo usando progetti di mutithreading. Nei nostri progetti abbiamo utilizzato simultaneamente più esecuzioni di thread utilizzando DBCP, quindi abbiamo ottenuto il timeout della connessione se abbiamo utilizzato più esecuzioni di thread. Quindi siamo andati con la configurazione c3p0. Non consiglierei affatto DBCP, in particolare è l'abilità di lanciare connessioni dal pool quando il DB scompare, la sua incapacità di riconnettersi quando il DB ritorna e la sua incapacità di aggiungere dinamicamente oggetti di connessione al pool (si blocca per sempre lettura di un socket I / O JDBCconnect post)
Grazie :)