Nella prima parte dell'articolo, sono stati descritti i problemi tipici dei database ed il concetto di
pooling. In questa seconda parte si vedrà come utilizzare tale tecnica in ambiente
Java e come essa permetta di risolvere gli aspetti critici della connessione a DB.
La soluzione proposta consiste nella realizzazione di un
DataSource, o fornitore di connessioni. La tecnica sfrutta allo scopo un servizio offerto da
Tomcat. Il
DataSource di default offerto dall'application server è basata sul
connection pool delle
DBCP del progetto
Jakarta Commons. In effetti, comunque, questa è solo una delle possibili strategie:
si potrebbe usare qualsiasi altro connection pool, che implementi javax.sql.DataSource.
La premessa al procedimento passa attraverso una riflessione sul funzionamento di
Tomcat: la versione 5 fornisce un’istanza di implementazione
JNDI di un contesto iniziale per ogni web application, che gira sotto di esso.
Considerata una generica web application sotto
Tomcat, l'
InitialContext è configurato non appena la web application è caricata ed è reso disponibile a tutti i componenti della stessa (solo per un accesso in lettura). Tutti i parametri e le risorse configurate sono poste nella porzione
java:comp/env del namespace
JNDI, per cui un tipico accesso ad una risorsa (nel nostro caso ad un
DataSource JDBC) passa attraverso un'invocazione mediante blocco
try... catch:
<span style="font-size:1.0em">
try { Context ctx = new InitialContext();
if (ctx == null) { throw new Exception("No Context"); }
ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/MysqlJNDI"); }
catch (Exception e) { e.printStackTrace();
}
</span>
Il metodo
lookup della classe
Context restituisce il
DataSource dell’applicazione. Una volta ottenuto il
DataSource, nell'ultima parte dell'articolo vedremo come utilizzarlo per gestire le connessioni al DB in maniera pulita ed efficiente.