Apache Cocoon
# Apache Cocoon

Apache Cocoon, spesso chiamato semplicemente Cocoon, è un framework di sviluppo web costruito intorno ai concetti di separazione dei componenti di un'applicazione web. Il framework si basa sulla tecnologia XML ed è costruito utilizzando il linguaggio Java. La flessibilità offerta dall'XML consente una rapida pubblicazione dei contenuti in diversi formati come HTML, PDF e WML. Un potente Content Management System, Apache Lenya, si può associare al framework, anche se negli ultimi periodi sono nati altri CMS compatibili con Cocoon. Cocoon è anche usato come strumento di data warehouse o come middleware per trasferire dati tra sistemi eterogenei.

## Sitemap

La sitemap è il cuore di Cocoon. È qui che lo sviluppatore configura i differenti componenti di Cocoon e definisce le interazioni Client/Server in quello che Cocoon indica come la Pipeline.

## Componenti

I componenti all'interno di Cocoon sono raggruppati per funzione.

### Matchers

I matchers sono usati per abbinare le richieste degli utenti come URL o cookie con wildcard o espressioni regolari. Ogni richiesta utente percorre la pipeline finché non trova un abbinamento. È da questo punto che la particolare richiesta è processata.

### Generators

I generators creano degli stream di dati xml sotto forma di eventi SAX. Tale stream può essere generato da un documento XML esistente oppure vi sono dei generators che possono creare XML from scratch che rappresentano ad esempio una struttura di directory o i dati relativi a delle immagini.

### Transformers

I transformers prendono uno stream di eventi SAX e li trasformano in qualche modo. Le trasformazioni più comuni sono eseguite con XSLT per trasformare un formato xml in un altro. Ma vi sono anche transformers che eseguono altri tipi di trasformazioni (SQL ad esempio, che esegue query su un database).

### Serializers

Un serializer prende uno stream di eventi SAX e lo invia al client dopo averlo trasformato in un formato compatibile con il client. Vi sono serializers che permettono di inviare i dati in molti formati differenti inclusi HTML, XHTML, PDF, RTF, SVG, WML e plain text, ad esempio.

### Selectors

I selectors offrono le stesse capacità dei matcher, ma con un approccio più simile a quello di un'istruzione switch (o if-else). Sono capaci di selezionare particolari elementi della request arrivata dal client e scegliere se una determinata parte della pipeline (ad esempio una specifica trasformazione) debba essere eseguita o meno.

### Views

Le view consentono di "interrompere" la pipeline in un punto preciso della sua esecuzione. Si usano principalmente per fare test (ad esempio per vedere l'XML prima e dopo una determinata trasformazione).

### Readers

I reader passano uno stream di dati (quindi senza alcun parsing XML) direttamente al client. Sono utilizzati per le immagini o altri file statici.

### Azioni

Le actions sono classi java che eseguono business logic.

## Pipeline

La Pipeline è usata per definire come i differenti componenti di Cocoon devono interagire con le differenti richieste per produrre una risposta da inviare al client.

