<< [[: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.