Una qualsiasi applicazione web scritta in Java necessita di un
servlet container per essere eseguita e
Tomcat è quello di riferimento; questo strumento ha raggiunto una stabilità e una facilità di configurazione, che sembrerebbero non giustificare un libro di quasi 500 pagine sull'argomento. Di fatto, l'80% del contenuto del libro può non essere conosciuto da chi programma
JSP/servlet nella fase di sviluppo "classica"; ciò non significa che si tratti di problematiche inesistenti, ma che questi problemi difficilmente si presenteranno a chi, pur sviluppando applicazioni web Java (in gergo chiamate
webapp), non si occupa della configurazione dell'ambiente su un sistema in produzione.
Questo è un ottimo libro su moltissimi dettagli spesso "nascosti" di
Tomcat, utili sia a ottimizzarne il funzionamento, sia a predisporre un ambiente adatto ad usi massivi e con politiche di deploy semplici da aggiornare e da riconfigurare (necessità quasi mai sentite dai programmatori, ma molto più da sistemisti). In questi casi la lettura del libro è un
must, in quanto descrive sia le problematiche che le soluzioni difficilmente recuperabili dalla
documentazione in linea o da altre risorse in Rete. Il taglio dato ai singoli capitoli aiuta chiunque abbia una conoscenza minima di un sistema operativo a utilizzare le nozioni esposte; vengono evidenziati tutti i passi necessari e i comandi da eseguire per raggiungere gli obiettivi indicati; si nota comunque una predilezione del sistema operativo
Linux e, in seconda battuta, di
Windows. Questo permette, a chi non è un sistemista, né ha delle conoscenze sistemistiche molto profonde, di seguire agevolmente tutti i capitoli e tutte le problematiche illustrate. In sostanza
il libro è adatto ad un qualsiasi programmatore Java, che voglia configurare in maniera ottimizzata
Tomcat.
Nel capitolo 1,
Getting Started with Tomcat, il testo spiega l'
installazione del software su sistemi Linux, Solaris, Windows, Mac OS X e FreeBSD. Qui, giustamente, trova spazio anche la
descrizione dei prerequisiti (versione di Java installata, per esempio). Peccato che ci si riferisca alla sola versione 6 (l'ultima) di
Tomcat. Una semplice tabellina con i requisiti anche per le versioni precedenti (almeno per la 4, la 5 e la 5.5) avrebbe sicuramente aiutato il lettore a capire quali di questi sono soddisfatti dal proprio ambiente di sviluppo.
Il capitolo si conclude con i
dettagli per le operazioni di start, stop e restart di
Tomcat stesso per i diversi sistemi operativi, con utili informazioni aggiuntive per la soluzione dei problemi più comuni e il test dell'installazione. Il capitolo 2,
Configuring Tomcat, è utile quando, accanto all'installazione di base di
Tomcat, c'è la necessità della sua personalizzazione, configurando il software in maniera adatta alle proprie esigenze. Questo capitolo analizza le
principali possibilità di configurazione fornendo utilissime informazioni su alcune scelte per minimizzare i problemi e per rispondere adeguatamente ad alcune esigenze in ambienti di produzione: facile installazione di
nuove versioni, uso della
porta 80, standard http, configurazione ottimale della JVM, uso di
compilatori alternativi per le JSP, impostazione delle basilari
politiche di sicurezza,
controllo delle sessioni applicative, uso di
risorse esterne via
JNDI e
JDBC) e, per finire, alcune indicazioni sull'uso di
CGI direttamente sotto
Tomcat e la
webapp predefinita per l'amministrazione di
Tomcat.
Il capitolo 3,
Deploying Servlet and JSP Web Applications in Tomcat analizza com'è fatta una
webapp Java e come eseguirne il deploy; mostra come configurare il file
server.xml per personalizzare il contesto, l'uso dei file WAR e l'uso della
webapp Manager per la gestione delle principali operazioni sui WAR. Infine mostra l'
uso di Ant per l'automazione delle più usuali (e ripetitive) operazioni, dal
packaging dei diversi file, fino al deploy su
Tomcat.
Nel capitolo 4,
Tomcat Performance Tuning, si affronta in dettaglio il problema del
performance tuning. Il libro evidenzia come per ogni ottimizzazione, prima di partire è indispensabile misurare le performance, per capire se gli interventi di ottimizzazione sono necessari e, successivamente, appropriati. Per le misure il libro introduce l'uso degli strumenti open source di Apache:
ab,
siege (a linea di comando) e il tool
Jakarta JMeter (che ha anche un'interfaccia grafica). Infine il capitolo dettaglia i
tuning possibili sia all'interno di
Tomcat che al suo esterno (ottimizzando JVM, sistema operativo). Un capitolo di cui consiglio la lettura a tutti coloro che vogliono installare
Tomcat in un ambiente di produzione.
Ottimo e dettagliato il capitolo 5,
Integration with the Apache Web Server, in cui si descrive come mettere in comunicazione
Tomcat con
Apache Web Server. Il capitolo inizia analizzando i casi in cui tale integrazione è auspicabile e quando no, per poi dettagliare tutte le diverse modalità di integrazione e la loro corretta configurazione. Il capitolo 6,
Tomcat Security è un capitolo che va in profondità sulla configurazione dello strumento e dell'ambiente circostante per
massimizzare la sicurezza. Giustamente, l'autore mette in guardia dal fatto che nessuna politica di sicurezza può essere sufficiente se le applicazioni scritte per
Tomcat espongono
falle di sicurezza; per convincerci
mostra le criticità più note e alcuni tra i vari possibili attacchi (
XSS,
HTML Injection,
SQL injection e
Command Injection). Questo è un capitolo da leggere anche se non si pensa di essere responsabili della configurazione di
Tomcat, ma si vuole una panoramica su come scrivere applicazioni minimizzando i rischi di incorrere in attacchi via Web.
A differenza del capitolo 2, dove c'era una panoramica di alto livello "orientata al problema", nel capitolo 7,
Configuration, si entra nel dettaglio di ogni singola opzione di configurazione. Un capitolo che, più che da leggere, è da usare come utile
reference in caso di dubbi e problemi. Il capitolo 8,
Debugging and Troubleshooting si potrebbe definire un "minicapitolo" (11 pagine in tutto) per orientarsi quando
Tomcat non si comporta come dovrebbe (problemi sulle richieste HTTP e sul ciclo di vita dell'applicazione stessa). Altro minuto capitolo (6 pagine) è il nono,
Building Tomcat from Source; in esso si dettaglia come
eseguire il build di Tomcat partendo dai sorgenti. L'autore sconsiglia vivamente questa strada ma, in fondo, non si tratta altro che di lanciare dei task
Ant. Vero è che ci sono molti punti su cui fare attenzione (usare un JDK 1.5 e non 1.6, Ant versione 1.6.0 e successiva, ma non 1.6.4, ecc.).
Un aspetto cruciale per creare un sistema performante e
fault tolerant è quello di mettere in linea più macchine con una
configurazione in cluster. Il capitolo 10,
Tomcat Clustering, spiega i dettagli per farlo con
Tomcat, evidenziando anche le problematiche che è possibile risolvere usando una configurazione "a contorno" ottimale. Infine, nel capitolo 11,
Final Words, non potevano mancare i riferimenti alle
risorse fondamentali per risolvere alcuni problemi (mailing list, canali IRC e siti). In realtà i riferimenti sono piuttosto scarni e si limitano alle risorse "ufficiali". In conclusione
ogni capitolo presenta l'essenziale (e spesso molto di più) per le problematiche presentate; davvero un bel libro, che permette di padroneggiare sia le situazioni standard che le situazioni eccezionali.