[[:varie]]
====== Tomcat: Pooling ======
===== Introduzione =====
Ho trovato una certa difficoltà a decifrare la documentazione ufficiale di [[http://tomcat.apache.org/|Tomcat]] sull' argomento del pooling, perciò ho deciso di scrivere questa breve guida.
I passi fondamentali da eseguire sono pochi.
===== Configurazione =====
Per definire un pool di connessioni è necessario inserire un tag simile al seguente all' interno di META-INF/context.xml e del tag Context (il toplevel per quel file).
E' necessario che la classe driver nominata in driverClassName sia installata nella cartella lib/ext del runtime java e non all' interno dell' applicazione web o tra le librerie condivise di tomcat.
La ragione è che la classe deve essere presente prima dell' avvio di tomcat, altrimenti tomcat non riuscirà a caricarla. E' necessario anche riavviare tomcat dopo aver copiato il file .jar che contiene la classe driver in lib/ext.
===== Esempio JSTL =====
Dichiarare i tag JSTL:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
Specificando i dati della connessione direttamente nel tag sql:dataSoure il sistema crea una nuova connessione all' inizio di ogni pagina e la abbatte alla fine. Perciò impostiamo la sorgente dati per nome:
In questo modo il pooling sarà attivo e potremo eseguire normalmente le query.
select * from test
${row[0]}
===== Esempio JSP =====
Ottenere la connessione:
InitialContext ctx = new javax.naming.InitialContext();
DataSource dso = (javax.sql.DataSource)ctx.lookup("java:comp/env/jdbc/test");
Connection conn = dso.getConnection();
Importante! Chiudere le connessione esplicitamente prima della fine della pagina, altrimenti la connessione stessa rimarrà bloccata per 60 secondi e in certi casi sarà possibile bloccare l' intero pool.
conn.close();
===== Benefici =====
==== Prestazioni ====
E' davvero veloce. Alcuni database soffrono particolarmente di connessioni sconnessioni frequenti. FileMaker è uno di questi.
===== Problemi =====
==== Leaks ====
Le pagine scritte in JSTL non soffrono particolarmente di questo problema perché in qualche modo tomcat si ricorda si rilasciare le connessioni automaticamente. Purtroppo però nei frammenti JSP è necessario assicurarsi che le connessioni siano chiuse esplicitamente non appena il loro utilizzo non è più necessario.