Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Connessioni al database e teoria del pooling (3/3)
Scritto da Dario Guadagno il 26-09-2008 ore 10:18
Intel Parallel Studio XE
Nelle prime due parti dell'articolo abbiamo analizzato la teoria alla base del pooling e delle connessioni al DB e l'istanziazione di un DataSource, mentre in questa terza parte se ne vedrà l'effettivo utilizzo.

Prima di usare il pool di connessioni, c'è da considerare un aspetto importante: una web application dovrebbe chiudere sempre esplicitamente i ResultSets, gli Statement e le Connection aperte, perché altrimenti potrebbero essere inutilizzabili per un futuro riuso, causando il cosiddetto connection pool leak, che può portare al fallimento dell’apertura di una nuova connessione, se non dovessero essercene più di disponibili.

In realtà esiste una soluzione che può essere adottata: le Jakarta Commons-DBCP possono essere configurate per tenere traccia e recuperare queste connessioni abbandonate, rendendo possibile anche la generazione di uno stack trace del codice, che ha aperto queste risorse senza chiuderle mai.

La parte fondamentale della configurazione di questo servizio consiste nell’inserirlo nel contesto della web application, nel file server.xml di Tomcat. In particolare nel context dell’applicazione è necessario aggiungere:
  1. <span style="font-size:1.0em">
  2. 	< Resource name="MysqlJNDI" 
  3.       	   auth="Container" 
  4.       	   type="javax.sql.DataSource"
  5.                maxActive="100" 
  6.                maxIdle="30" 
  7.                maxWait="100000"
  8.                username="root" 
  9.                password="xxxxxxx" 
  10.                driverClassName="com.mysql.jdbc.Driver"
  11.                url="jdbc:mysql://localhost:3306/testapplication?autoReconnect=true" 
  12.                removeAbandoned="true" 
  13.                removeAbandonedTimeout="30"
  14. 	       lobAbandoned="true" >
  15.  
  16. </span>
Analizziamo i principali attributi:
  • maxActive: massimo numero di connessioni al DB nel pool, compatibilmente con l’attributo max_connections di MySQL. Il valore 0 indica nessun limite;
  • maxIdle: massimo numero di connessioni inattive da mantenere nel pool. Il valore -1 indica nessun limite;
  • maxWait: massimo tempo di attesa per la ricezione di una connessione al DB (in secondi) prima del lancio di un’eccezione. Il valore -1 attende senza limiti;
  • driverClassName: nome del driver utilizzato per la connessione.
  • url: l’URL per la connessione JDBC al DB. Il parametro autoReconnect=true fa sì che il com.mysql.jdbc.Driver si riconnetterà automaticamente se MySQL chiude la connessione, cosa che di default avviene dopo 8 ore di connessione inattiva;
  • removeAbandoned="true": fa sì che le connessioni al DB abbandonate siano rimosse e riciclate. Questo vuol dire che quando le connessioni disponibili si stanno esaurendo, DBCP recupererà e riciclerà tutte le connessioni al DB che trova. Il default è false;
  • removeAbandonedTimeout="30": serve per settare il numero di secondi che una connessione al DB deve rimanere inattiva prima di essere considerata abbandonata;
  • logAbandoned="true": questo attributo può essere settato a true se si vuole che le DBCP generino uno stack trace del codice, che ha abbandonato le connessioni senza chiuderle.
L’ultimo passaggio nella configurazione del servizio è la registrazione della resource nel file web.xml dell'applicazione web:
  1. <span style="font-size:1.0em">
  2. 	< !-- configurazione datasource -- >
  3.  	< resource-ref >
  4.   		< description >DB Connection< /description >
  5.   		< res-ref-name >jdbc/testapplication< /res-ref-name >
  6.  		< res-type >javax.sql.DataSource< /res-type >
  7.   		< res-auth >Container< /res-auth >
  8.  	< /resource-ref >
  9. </span>
A questo punto il pool di connessioni è definitivamente attivo e sarà possibile utilizzare il DataSource per gestire in maniera efficiente e pulita il DB della web application.
Precedente: La sedia a rotelle del futuro
Successiva: Convertire dei sorgenti Visual Basic in Delphi
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.281 secondi.