Sei sulla pagina 1di 5

Ing. Danilo Spada www.danilospada.

it

UsaDataSource In questo documento si spiega velocemente ed in italiano come utilizzare il datasource di Tomcat per connettersi ad un RDBMS utilizzando una connection pool interamente gestita dal container di Tomcat. In pratica settando opportuni parametri (url, driver, username, password, numero connessione attive, etc..) tramite interfaccia di amministrazione o anche editando a mano un file xml, possibile utilizzare allinterno di servlet e jsp le connessioni di un pool acquisendo il datasource direttamente tramite JNDI. Il meccanismo del connection pool, come noto, aumenta molto le prestazioni delle applicazioni in quanto loperazione pi onerosa in termini di tempo quando si interagisce con un db lo stabilimento della connessione. Stabilendo un numero ragionevole di connessioni allavvio dellapplicazione ed usandole quando necessario, si evita di doverne aprire una nuova ogni volta. Naturalmente il db con cui si sta lavorando deve supportare le connessioni multiple. Usare il datasource di Tomcat per connettersi ad un RDBMS influisce molto sulle prestazioni e semplifica lutilizzo delle connessioni (acquisizione e rilascio) allinterno delle applicazioni. Rientra inoltre nelle linee guida di sviluppo delle applicazioni con tecnologie servlet e jsp; queste infatti raccomandano il trasferimento ai moduli connector della responsabilit di interazione con moduli esterni al container. Creare un nuovo datasource Step by Step Accedendo allinterfaccia di amministrazione di Tomcat (http://localhost:8080/admin/), aprendo: Service (Catalina) Host (localhost) Context (/NomeContesto) Resources Data Sources

Ing. Danilo Spada www.danilospada.it

Selezionando: Create new Data Source, si visualizza la seguente schermata:

Ing. Danilo Spada www.danilospada.it

Per chi ha familiarit con lutilizzo delle librerie JDBC, risulter molto semplice la valorizzazione dei campi indicati: 1. Il JNDI Name il nome con cui chiameremo la risorsa allinterno delle servlet mediante listruzione: javax.sql.DataSource ds= (javax.sql.DataSource)new javax.naming.InitialContext().lookup("java:comp/env/jdbc/impiegato"); N.B. Per usare questa funzione bisogna importare il package javax.naming; 2. Il Data Source Url lurl di connessione al DataBase; 3. Il JDBC Driver Class il driver di connessione al DataBase; 4. Username e password sono quelli di connessione al DataBase; 5. Max Active Connections il massimo numero di connessioni gestite dal pool (e quindi il massimo numero di connessioni aperte contemporaneamente al db); 6. Max Idle Connections il minimo numero di connessioni tenute aperte dal pool (e quindi il minimo numero di connessioni aperte contemporaneamente al db); 7. Max Wait for Connection il tempo massimo in millisecondi che il datasource fa aspettare prima di notificare che non ci sono connessioni disponibili, per chi ne richiede una, quando sono tutte occupate; Una volta valorizzati opportunamente questi parametri si deve salvare e quindi committare i cambiamenti (tasto commit changes). Il risultato di tale operazione la modifica del file xml che ha lo stesso nome dellapplicazione ed contenuto in: C:\jakarta-tomcat\conf\Catalina\localhost Come esempio si veda il file UsaDataSource.xml. Tale file in effetti pu essere editato anche a mano senza usare linterfaccia descritta, il risultato finale lo stesso anche se loperazione un po meno user-friedly!!
Un altro modo possibile per configurare il datasource farlo allinterno del file server.xml. I parametri sono gli stessi ed in pratica (si pu fare una prova) basta inserire la porzione di codice contenuta dentro il file xml del punto precedente appena prima del tag </HOST> (si veda per es il

Ing. Danilo Spada www.danilospada.it file _server.xml). In questo caso pi applicazioni possono usare lo stesso datasource, tuttavia bisogna editare anche i vari web.xml come mostrato in _web.xml per abilitare lapplicazione alluso di tale risorsa.

Fatto questo, allinterno di ogni servlet possiamo usare le connections del pool cos: import .*; import javax.naming.*; public class MiaServlet extends HttpServlet{ public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try{ javax.sql.DataSource ds= (javax.sql.DataSource)new javax.naming.InitialContext().lookup("java:comp/env/jdbc/impieg ato"); Connection conn=ds.getConnection(); //uso la conn //uso la conn //uso la conn conn.commit(); //committo le modifiche fatte } catch (Exception e) { log(e.getMessage()); } finally { try{ if (conn =! null) conn.close(); //rendo la conn al pool } catch (SQLException e) { log(e.getMessage()); } } }

Ing. Danilo Spada www.danilospada.it

Come si vede, una volta configurato il datasource, allinterno delle servlet molto semplice utilizzare le connessioni del pool.

Vantaggi Il vantaggio di utilizzare questa tecnica rispetto ad utilizzare una classe connection pool che questultima andrebbe gestita allinterno dellapplicazione (dovrebbe essere istanziata, magari usando dei parametri memorizzati allinterno del deploy descriptor, dovrebbe essere messa in sessione o a livello di contesto, magari condivisa tra pi chiamate alla stessa servlet o tra pi servlet e cos via..); daltro canto usando una classe ad hoc (e gestita ad hoc) il meccanismo potrebbe essere sicuramente customizzato in maniera pi appropriata. Come al solito bisogner fare un bilancio tra la comodit e le possibili ottimizzazioni, anche in base al tempo e alle risorse umane disponibili. Un altro vantaggio che usando il datasource si possono riconfigurare i parametri direttamente dallinterfaccia di amministrazione senza dover effettuare il reload o larresto dellapplicazione. Questo in fase di tuning dellapplicazione pu risultare molto comodo.

Potrebbero piacerti anche