Articoli

Installazione di Tomcat 4 e Cocoon 2 su Mac OS X e Linux Debian

Questo articolo spiega come installare Cocoon 2 con Tomcat 4 su Mac OS X versione 10.1.3 (aggiornato in seguito alla 10.1.4). Tali istruzioni funzionano perfettamente anche su Linux Debian 2.2 (kernel 2.2.17).

Introduzione

Effettueremo tutte le installazioni dalla linea di comando e le eseguiremo come utente normale, non con i diritti di superuser, in una sottodirectory della nostra home utente. Probabilmente la linea di comando rappresenta una novità per molti utenti Mac, dal momento che è stata introdotta da Apple solo in questa nuova e rivoluzionaria versione del suo sistema operativo: Mac OS X, un sistema POSIX compatibile, come tutti gli altri sistemi *nix. Per questo motivo questo articolo riporta in dettaglio gran parte dei comandi necessari per installare Tomcat e Cocoon.

L'ambiente java, necessario per installare ed utilizzare questi programmi che sono interamente scritti in Java, è presente di default su Mac OS X; va invece installato su Debian, ma la procedura non presenta la minima difficoltà. Tomcat 4 si può scaricare dal sito http://archive.apache.org/dist/tomcat/tomcat-4/archive/v4.0.3/bin/, il file da prelevare è jakarta-tomcat-4.0.3.tar.gz ed è l'ultima release stabile rilasciata mentre sto scrivendo questo articolo; Cocoon 2 si può scaricare su http://archive.apache.org/dist/cocoon/, utilizzeremo due versioni: Cocoon 2.0.1 versione binaria e Cocoon 2.0.2 versione binaria e versione sorgente. I file da prelevare sono, rispettivamente: cocoon-2.0.1-bin.tar.gz, cocoon-2.0.2-bin.tar.gz e cocoon-2.0.2-src.tar.gz.

Nota per gli utenti Linux
Il framework Cocoon include anche Batik, un toolkit in Java per la generazione di immagini mediante l'utilizzo dello standard SVG. Batik richiede che il server X sia in esecuzione per funzionare correttamente; se avete installato Cocoon 2 sulla workstation che usate per effettuare i test via browser mentre sviluppate, non dovreste avere problemi, se invece volete utilizzare una macchina su cui non è installato il server X, dovrete installare Xfvb per poterlo utilizzare correttamente.

Nota per gli utenti Mac OS X
Non utilizzate Stuffit Expander per scompattare i file di distribuzione di Tomcat e Cocoon, le installazioni risultanti non funzioneranno. E non funzioneranno nemmeno se utilizzerete da un terminale il comando tar fornito di default con Mac OS X. Per ottenere delle installazioni funzionanti dovrete utilizzare il programma tar della GNU, che si richiama digitando in un terminale il comando gnutar.

Installazione di Tomcat 4.0.3

La effettueremo dai binari. Avviate un terminale, portatevi nella directory in cui avete scaricato il file di distribuzione e al prompt dei comandi digitate:

[localhost:~] marina% gnutar xfvz jakarta-tomcat-4.0.3.tar.gz

il file si scompatterà in una directory chiamata jakarta-tomcat-4.0.3, che per semplicità consiglio di rinominare tomcat4.

Tomcat normalmente risponde alle richieste sulla porta 8080, quindi prima di avviarlo controllate se avete altre applicazioni in ascolto su tale porta. In tal caso, dovrete modificare il valore della porta nel file server.xml, che trovate nella directory tomcat4/conf. Ecco il blocco di istruzioni che va modificato:

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector className="org.apache.catalina.connector.http.HttpConnector"
           port="8080" minProcessors="5" maxProcessors="75"
           enableLookups="true" redirectPort="8443"
           acceptCount="10" debug="0" connectionTimeout="60000"/>

è sufficiente sostituire al valore di default 8080 un qualsiasi altro valore superiore a 1023. Normalmente io utilizzo la porta 10080.

Se invece la porta 8080 è disponibile, resta una sola operazione da compiere prima di avviare Tomcat per la prima volta: settare le variabili d'ambiente JAVA_HOME e CATALINA_HOME.

Per comodità useremo due semplici script per settare le variabili d'ambiente ed avviare e fermare Tomcat. Aprite l'editor di testi preferito e digitate in un file che chiameremo start le seguenti righe:

#!/bin/sh
export CATALINA_HOME=/Users/marina/tomcat4
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home
$CATALINA_HOME/bin/startup.sh

la seconda riga specifica il percorso in cui avete installato Tomcat, la terza il percorso in cui è installata di default la Java Virtual Machine fornita con Mac OS X, la quarta lancia lo script che avvia Tomcat.

Una volta salvato il file conferitegli i permessi di esecuzione usando il comando:

[localhost:~] marina% chmod a+x start

a questo punto potete lanciare Tomcat con il comando:

[localhost:~] marina% ./start

avviate il browser preferito e digitate http://localhost:8080/ nella barra degli indirizzi. Se l'installazione è andata a buon fine, il browser caricherà la pagina di default di Tomcat

Per fermare Tomcat, scrivete in un file che chiameremo stop le seguenti righe:

#!/bin/sh
export CATALINA_HOME=/Users/marina/tomcat4
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home
$CATALINA_HOME/bin/shutdown.sh

questo script si differenzia dal primo in quanto nella quarta riga richiama lo script incaricato di arrestare il server. Anche in questo caso date un:

[localhost:~] marina% chmod a+x stop

per conferirgli i giusti permessi di esecuzione, dopodiché per fermare Tomcat potrete semplicemente digitare:

[localhost:~] marina% ./stop

Installazione di Cocoon 2.0.1

Installeremo dai binari. Scompattate il file di distribuzione con il comando:

[localhost:~] marina% gnutar xfvz cocoon-2.0.1-bin.tar.gz

otterrete una directory chiamata cocoon-2.0.1 che conterrà la documentazione e il file cocoon.war. Leggendo il file INSTALL potrete apprendere come per installare Cocoon 2 su Tomcat 4 sia sufficiente copiare il file cocoon.war dentro alla directory tomcat4/webapps e avviare Tomcat. Richiedendo sul browser preferito l'indirizzo: http://localhost:8080/cocoon/ Cocoon 2 finira' di compilarsi e genererà una pagina di benvenuto, con molti esempi di applicazioni.

Semplice, vero? Peccato però che la prima volta che richiamerete Cocoon non otterrete la pagina di benvenuto, ma il seguente errore:

Apache Tomcat/4.0.3 - HTTP Status 500 - Internal Server Error


type Exception report


message Internal Server Error


description


The server encountered an internal error (Internal Server Error) 
that prevented it from fulfilling this request.


exception


javax.servlet.ServletException: Servlet.init() for servlet Cocoon2
threw exception
        at org.apache.catalina.core.StandardWrapper.
loadServlet(StandardWrapper.java:935)
        at org.apache.catalina...
        [taglio il resto]

Ricercando tra gli archivi della mailing list cocoon-users troviamo la risposta a questo problema: è un bug non documentato che potete risolvere semplicemente ricopiando i file batik-libs-1.1.1.jar e xml-apis.jar dentro tomcat4/common/lib. Tali file si trovano nella directory tomcat4/lib.

Riavviate Tomcat e finalmente il browser caricherà la pagina di benvenuto di Cocoon 2.0.1.

Installazione di cocoon 2.0.2

La effettueremo a partire dai binari. Scompattate il file di distribuzione:

[localhost:~] marina% gnutar xfvz cocoon-2.0.2-bin.tar.gz

Anche in questo caso la documentazione afferma che è sufficiente copiare il file cocoon.war dentro tomcat4/webapps. Riavviando Tomcat e richiamando sul browser l'indirizzo http://localhost:8080/cocoon/, Cocoon finirà di compilarsi ed apparirà la pagina di benvenuto.

Purtroppo però anche questa volta otterrete lo stesso errore riportato in precedenza per la versione 2.0.1.
Per risolvere il problema copiate i file xalan-2.3.1.jar, xml-apis.jar, xercesImpl-2.0.0.jar, batik-all-1.5b1.jar da tomcat4/webapps/cocoon/WEB-INF/lib a tomcat4/common/lib.

Riavviate Tomcat e richiamate nuovamente sul browser http://localhost:8080/cocoon/, finalmente ora tutto funziona!

Installazione di cocoon 2.0.2

Questa volta compileremo dai sorgenti. Scompattate il file di distribuzione:

[localhost:~] marina% gnutar xfvz cocoon-2.0.2-bin.tar.gz

la directory cocoon-2.0.2 così ottenuta questa volta conterrà, oltre alla documentazione, i sorgenti e tutti gli script necessari per la compilazione.
La documentazione vi richiede per prima cosa di rimuovere il file xerces.jar da tomcat4/common/lib/. Per sicurezza lo sposteremo sul desktop.

Successivamente copiate i file: xalan-2.3.1.jar, xml-apis.jar, xercesImpl-2.0.0.jar, batik-all-1.5b1.jar in tomcat4 /common/lib. I primi tre li trovate nella directory cocoon-2.0.2/lib/core, il quarto nella directory cocoon-2.0.2/lib/optional

[localhost:cocoon-2.0.2/lib/core] marina% cp xalan-2.3.1.jar xercesImpl-2.0.0.jar xml-apis.jar /Users/marina/tomcat4/common/lib/

[localhost:cocoon-2.0.2/lib/optional] marina% cp batik-all-1.5b1.jar /Users/marina/tomcat4/common/lib/

Inserite nel file web.xml, che trovate nella directory cocoon-2.0.2/src/webapp/WEB-INF/, le seguenti righe:

<!-- extra classpath -->
<init-param>
  <param-name>extra-classpath</param-name>
  <param-value>/tomcat4/common/lib/xalan-2.3.1.jar:
  /tomcat4/common/lib/xercesImpl-2.0.0.jar:
  /tomcat4/common/lib/xml-apis.jar:
  /tomcat4/common/lib/batik-all-1.5b1.jar</param-value>
</init-param>

Per eseguire la compilazione, utilizzeremo uno scriptino che chiameremo buildc2. Aprite l'editor di testo che preferite e digitate:

#!/bin/sh
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Home
./build.sh -Dinclude.webapp.libs=yes webapp

la seconda riga imposta la JAVA_HOME, la terza riporta l'istruzione per compilare Cocoon. Assegnate allo script gli opportuni permessi di esecuzione:

[localhost:~/cocoon-2.0.2] marina% chmod a+x buildc2

ora siete pronti per compilare:

[localhost:~/cocoon-2.0.2] marina% ./buildc2

ed otterrete immediatamente l'errore:

./build: permission denied: ./build.sh [3]

assegnate i corretti permessi di esecuzione al file build.sh che trovate nella directory cocoon-2.0.2 :

[localhost:~/cocoon-2.0.2] marina% chmod a+x build.sh

e riprovate:

[localhost:~/cocoon-2.0.2] marina% ./buildc2

finalmente inizia il processo di compilazione:

Apache Cocoon Build System 
-------------------------- 
Buildfile: build.xml
init: 
-------------------------------------------------------------- 
Apache Cocoon 2.0.2 [1999-2002]  
-------------------------------------------------------------- 
Building with Ant version 1.4.1 compiled on October 11 2001 
using build file /Users/marina/cocoon-2.0.2/build.xml 
--------------------------------------------------------------
 
prepare-docs: 
Created dir: /Users/marina/cocoon-2.0.2/build/cocoon/documentation 
Created dir: ... 
 
[taglio la parte centrale]
 
... 
webapp: 
Writing: ./build/cocoon/webapp/WEB-INF/Manifest.mf 
Building jar: /Users/marina/cocoon-2.0.2/build/cocoon/cocoon.war
 
BUILD SUCCESSFUL
 
Total time: 9 minutes 2 seconds

Il file cocoon.war viene compilato dentro la directory cocoon-2.0.2/build/cocoon/; copiatelo nella directory tomcat4/webapps:

[localhost:cocoon-2.0.2/build/cocoon] marina% cp cocoon.war /Users/marina/tomcat4/webapps/

riavviate Tomcat e richiamate Cocoon digitando nel browser http://localhost:8080/cocoon/ per terminare la compilazione.
Purtroppo otterrete un altro errore:

Cocoon 2 - Internal server error
 
type fatal
 
message SAX2 driver class org.apache.xerces.parsers.SAXParser 
does not implement XMLReader
 
description java.lang.ClassCastException: org.apache.xerces.parsers.
StandardParserConfiguration
 
sender org.apache.cocoon.servlet.CocoonServlet
 
source Cocoon servlet
 
stack-trace
 
java.lang.ClassCastException: org.apache.xerces.
parsers.StandardParserConfiguration
at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(Unknown Source)
at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(Unknown Source)
at org.apache.cocoon.components.language.markup.AbstractMarkupLanguage.
generateCode(AbstractMarkupLanguage.java:377)
at org.apache.cocoon.components.language.generator.ProgramGeneratorImpl.
generateResource(ProgramGeneratorImpl.java:365)
at org.apache.cocoon.components.language.generator.ProgramGeneratorImpl.
createResource(ProgramGeneratorImpl.java:328)
at org.apache.cocoon.components.language.generator.ProgramGeneratorImpl.
load(ProgramGeneratorImpl.java:291)
at org.apache.cocoon.sitemap.Handler.run(Handler.java:270)
at java.lang.Thread.run(Thread.java:496)
 
request-uri
 
/cocoon/
 
path-info

Per eliminarlo, è sufficiente rimettere a posto il file xerces.jar:

[localhost:~/Desktop] marina% cp xerces.jar /Users/marina/tomcat4/common/lib/

riavviate Tomcat, digitate nuovamente sul browser http://loalhost:8080/cocoon/ per terminare la compilazione...

...and now it's work! Happy hacking :-)

Osservazione: ho riprovato a compilare ed installare seguendo la stessa procedura senza eliminare il file xerces.jar e tutto è andato a buon fine.

Licenza

This document is released under GNU Free Documentation License

di Marina Sturino - Dicembre 2001