<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Democratic ambitions... and software dev juices &#187; Cocoon</title>
	<atom:link href="http://www.alessandro.vincelli.name/tag/cocoon/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alessandro.vincelli.name</link>
	<description>by alessandro vincelli</description>
	<lastBuildDate>Mon, 09 Jan 2012 10:02:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>My open work</title>
		<link>http://www.alessandro.vincelli.name/2008/08/23/my-open-work/</link>
		<comments>http://www.alessandro.vincelli.name/2008/08/23/my-open-work/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 18:04:53 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Cocoon]]></category>

		<guid isPermaLink="false">http://www.alessandro.vincelli.name/?p=34</guid>
		<description><![CDATA[I started a new site: http://devel.alessandro.vincelli.name/ The site is powered by a CMS developed by myself:  DealsCMS. I&#8217;m sharing blocks of code extracted form Deals CMS and other my personal works in this site. Now I&#8217;m focused on Apache Cocoon and related technologies.]]></description>
			<content:encoded><![CDATA[<p>I started a new site:</p>
<p><a title="Open work Alessandro Vincelli" href="http://devel.alessandro.vincelli.name/" target="_blank">http://devel.alessandro.vincelli.name/</a></p>
<p>The site is powered by a CMS developed by myself:  DealsCMS. I&#8217;m sharing blocks of code extracted form Deals CMS and other my personal works in this site. Now I&#8217;m focused on Apache Cocoon and related technologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandro.vincelli.name/2008/08/23/my-open-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cocoon 2.2 &#8211; prime impressioni</title>
		<link>http://www.alessandro.vincelli.name/2007/12/21/cocoon-22-prime-impressioni/</link>
		<comments>http://www.alessandro.vincelli.name/2007/12/21/cocoon-22-prime-impressioni/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 12:10:01 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Cocoon]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.alessandro.vincelli.name/2007/12/21/cocoon-22-prime-impressioni/</guid>
		<description><![CDATA[Bene, alla fine mi sono deciso a mettere le mani sulla nuova versione di Cocoon. Ho lavorato sulla RC2, ed è parsa decisamente stabile. Inizialmente ho giocato un po&#8217; seguendo i tutorials sul nuovo sito, e visto il successo delle prime applicazioni giocattolo, tirate su in due balletti, mi sono buttato a fare l&#8217;aggiornamento di [...]]]></description>
			<content:encoded><![CDATA[<p>Bene, alla fine mi sono deciso a mettere le mani sulla nuova versione di Cocoon. Ho lavorato sulla RC2, ed è parsa decisamente stabile. Inizialmente ho giocato un po&#8217; seguendo i <em>tutorials</em> sul <a href="http://cocoon.apache.org/">nuovo sito</a>, e visto il successo delle prime applicazioni giocattolo, tirate su in due balletti, mi sono buttato a fare l&#8217;aggiornamento di una applicazione esistente basata sulla 2.1.10.</p>
<p>Risultati ottimi. E&#8217; filato quasi tutto liscio.</p>
<p>Mi piace molto la gestione del progetto con <strong>maven</strong> in particolare:</p>
<ul>
<li>grazie agli <em>archetype</em> specifici per Cocoon, semplicità e velocità nella costruzione di un nuovo progetto  (ci voleva proprio <img src='http://www.alessandro.vincelli.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , <a href="http://cocoon.apache.org/1370_1_1.html">vedi i tutorial</a>)</li>
<li>comoda gestione delle librerie, maven permette di definirle in modo centralizzato e gestise dipende e download in automatico</li>
<li>comodità e rapidità nello sviluppo con il Cocoon Maven Plugin, si può sviluppare a <em>runtime</em> senza ricaricare tutto il contesto ad ogni build, il plugin si occupa di ricaricare solo le classi modificate.<strong><br />
</strong></li>
</ul>
<p>Mi ha colpito molto la struttura di partenza di un nuovo progetto creata dagli <em>archetype</em>, praticamente non c&#8217;è niente da fare, la configurazione iniziale è  minima.</p>
<ul>
<li>files in<em> /META-INF/cocoon/spring/*.xml </em>configurano tramite<em> Spring </em>tutta la nostra applicazione, inizialmente troviamo solo <em>servlet-service.xml</em> e  <em>demoservlet-service.xml </em>che configura un bean di demo</li>
<li>il file <em>servlet-service.xml</em> inizialmente contiene solo <em>context</em> e <em>mount-point</em> dell&#8217;applicazione. Da qui si attivano e configurano i <em>block.</em></li>
</ul>
<p>Sitemap e tutto il resto sono nella directory <em>COB-INF, </em>in<em> src </em>i sorgenti<em> java.</em></p>
<p>La prima impressione è che sia stato fatto un gran bello sforzo per rendere semplice, pulita e ben mantenibile la struttura  del progetto. Maven è stato introdotto con molto raziocionio.</p>
<p>Grazie alla comunità di Cocoon</p>
<p>&#8230;in attesa del rilascio definitivo della versione 2.2, sembra per la fine di Gennaio 2008</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandro.vincelli.name/2007/12/21/cocoon-22-prime-impressioni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Cocoon e il Design Pattern MVC (2)</title>
		<link>http://www.alessandro.vincelli.name/2007/12/20/apache-cocoon-e-il-design-pattern-mvc-2/</link>
		<comments>http://www.alessandro.vincelli.name/2007/12/20/apache-cocoon-e-il-design-pattern-mvc-2/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 15:27:11 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Cocoon]]></category>
		<category><![CDATA[continuation]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://www.alessandro.vincelli.name/2007/12/20/apache-cocoon-e-il-design-pattern-mvc-2/</guid>
		<description><![CDATA[Voglio approfondire il Controller. Negli anni il pattern MVC si è evoluto o mutato, infatti oggi si parla di Model1 e Model2. In soldoni l&#8217;MVC1 prevede che il Controller si limiti a girare le richieste dalla View al Model. Ma la pratica, o meglio la crescente complessità del Model e dei processi che lo regolano, [...]]]></description>
			<content:encoded><![CDATA[<p> Voglio approfondire il <em>Controller.</em> Negli anni il pattern MVC si è evoluto o mutato, infatti oggi si parla di Model1 e Model2. In soldoni l&#8217;MVC1 prevede che il <em>Controller </em>si limiti a girare le richieste dalla <em>View</em> al <em>Model. </em>Ma la pratica, o meglio la crescente complessità del Model e dei processi che lo regolano,  hanno portato il <em>Controller</em> ad assumere più responsabilità, in particolare ad occuparsi anche del controllo della <em>business logic</em> legata al <em>Model</em>.<br />
In Cocoon è possibile applicare il Model1 utilizzando la <em>sitemap</em>. Come nella figura seguente:</p>
<p><a href="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/mvc1.png" title="MVC, Model 1"><img src="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/mvc1.thumbnail.png" alt="MVC, Model 1" align="texttop" /></a></p>
<p>l&#8217;unico ruolo del <em>Controller</em>, impersonata dalla <em>sitemap</em>, è quello di gestire le richieste<br />
del client e selezionare le pagine da mostrare<em>.</em></p>
<p>Il Model2 è invece applicabile con l&#8217;utilizzo congiunto di <em>sitemap</em> e  <em>continuation: </em></p>
<p><a href="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/mvc2.png" title="MVC, Model 2"><img src="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/mvc2.thumbnail.png" alt="MVC, Model 2" /></a></p>
<p>In questo caso il <em>Controller </em>prima<em> </em> si occupa di intercettare la richiesta tramite la <em>sitemap</em>, poi il controllo passa all<em>a Continuation</em> che dirige la <em>business logic</em> e l&#8217;invio del <em>Model</em> alla <em>View.</em></p>
<p>L&#8217;argomento andrebbe approfondito meglio. Ma un concetto deve essere ben fermo: la <em>continaution</em> deve occuparsi solo di dirigire, ovvero deve fare solo da <em>Controller</em>, forte infatti è la tentazione utilizzarla per operazioni che intervengono sul Model. Rispettare il pattern MVC rende l&#8217;applicazione più razionale e mantenibile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandro.vincelli.name/2007/12/20/apache-cocoon-e-il-design-pattern-mvc-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Cocoon e il Design Pattern MVC (1)</title>
		<link>http://www.alessandro.vincelli.name/2007/12/07/9/</link>
		<comments>http://www.alessandro.vincelli.name/2007/12/07/9/#comments</comments>
		<pubDate>Fri, 07 Dec 2007 14:08:44 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Cocoon]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://www.alessandro.vincelli.name/?p=9</guid>
		<description><![CDATA[L&#8217;architettura MVC è un design pattern che aiuta a risolvere i problemi che nascono nel definire le relazioni e le comunicazioni tra i dati, l&#8217;applicazione e la presentazione. Nell&#8217; MVC il Model rappresenta i dati dell&#8217;applicazioni e contiene le regole fondamentali di accesso e mantenimento degli stessi. Tipicamente il Model, come suggerisce il nome, riflette [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;architettura MVC è un design pattern che aiuta a risolvere i problemi<br />
che nascono nel definire le relazioni e le comunicazioni tra i dati, l&#8217;applicazione<br />
e la presentazione. Nell&#8217; MVC il Model rappresenta i dati dell&#8217;applicazioni<br />
e contiene le regole fondamentali di accesso e mantenimento degli stessi. Tipicamente<br />
il Model, come suggerisce il nome, riflette o modella un processo<br />
del mondo reale, per esempio l&#8217;organizzazione di un magazzino, la gestione dei documenti di un sito  Web.</p>
<p>La View si occupa di organizzare la presentazione del modello, accede<br />
ai dati e li presenta in modo opportuno. La view ha bisogno di mantenere<br />
una rappresentazione consistente del modello, quindi, se c&#8217;è un cambiamento<br />
in quest&#8217;ultimo, deve ricevere una notifica del cambio e provvedere ad una<br />
vista aggiornata del modello. Nell&#8217;architettura MVC ci possono essere più viste dello stesso modello.</p>
<p>Infine c&#8217;è il Controller che cattura le richieste dell&#8217;utente, trasformandole<br />
in opportune interazioni tra il modello e le viste.<br />
La Figura seguente</p>
<p><a href="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/mvc-2.png" title="Modello MVC"><img src="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/mvc-2.thumbnail.png" alt="Modello MVC" /></a></p>
<p>mostra i componenti dell&#8217;architettura MVC e come questi<br />
interagiscono tra di loro. <u>Il beneficio principale che l&#8217;architettura MVC offre<br />
allo sviluppo di un&#8217;applicazione è quello di aiutare a separare l&#8217;organizzazione,<br />
l&#8217;elaborazione, la presentazione delle informazioni.</u> Questa separazione è fondamentale per costruire applicazioni complesse in modo veloce e razionale.<br />
<u>Implementare un pattern MVC in Cocoon è molto semplice, anzi quasi<br />
naturale</u>.<u><br />
</u></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandro.vincelli.name/2007/12/07/9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Cocoon &#8211; Control Flow</title>
		<link>http://www.alessandro.vincelli.name/2007/12/06/apache-cocoon-control-flow/</link>
		<comments>http://www.alessandro.vincelli.name/2007/12/06/apache-cocoon-control-flow/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 17:19:40 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[applesflow]]></category>
		<category><![CDATA[Cocoon]]></category>
		<category><![CDATA[Control Flow]]></category>
		<category><![CDATA[flowscript]]></category>
		<category><![CDATA[javaflow]]></category>

		<guid isPermaLink="false">http://www.alessandro.vincelli.name/?p=4</guid>
		<description><![CDATA[La mancanza di stato Quando si sviluppa una applicazione web, si deve fare i conti con una caratteristica del protocollo HTTP: la mancanza di stato. Non c&#8217;è nessuna informazione sulla storia delle request/response intercorse tra un client ed un server. Questo rende problematico lo sviluppo di applicazioni web complesse. Da un lato la mancanza di [...]]]></description>
			<content:encoded><![CDATA[<p><strong>La mancanza di stato</strong></p>
<p>Quando si sviluppa una applicazione web, si deve fare i conti con una caratteristica del protocollo HTTP: la mancanza di stato. Non c&#8217;è nessuna informazione sulla storia delle request/response intercorse tra un<br />
client ed un server. Questo rende problematico lo sviluppo di applicazioni web complesse.</p>
<p>Da un lato la mancanza di stato garantisce un&#8217;ottima scalabilità dell&#8217;applicazione,<br />
poichè non c&#8217;è la necessità di mantenere un servizio o una servlet<br />
per ogni utente. D&#8217;altro canto l&#8217;onere di gestire lo stato della conversazione<br />
passa tutto sullo spalle dello sviluppatore.</p>
<p align="justify">Si può pensare ad una applicazione<br />
web come una coppia di request/response come nella figura seguente:
</p>
<p align="justify"><a href="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/cont_modello_req_resp.png" title="Modello request/response"><img src="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/cont_modello_req_resp.thumbnail.png" alt="Modello request/response" /></a></p>
<p>Con questo modello il controllo sta tutto nel browser. L&#8217;applicazione si<br />
attiva solo in corrispondenza di richieste fatte dal browser. Questo modello<br />
funziona bene se le richieste sono piccole e indipendenti, ma entra in crisi<br />
in contesti complessi. Basta pensare ad un carrello elettronico, se si fa un<br />
doppio click sul pulsante di invio del form, troveremo due oggetti identici nel<br />
nostro carrello.</p>
<p><strong>Continuation</strong></p>
<p>L&#8217;idea alla base della <em>continuation</em> è la seguente: ad ogni richiesta del client,<br />
lasciare al framework il compito di caricare e salvare lo stato, all&#8217;inizio e alla fine di ogni richiesta.</p>
<p>Cocoon mette a disposizione tre implementazioni della <em>continuation</em>:<br />
una in JavaScript basata su Rhino JavaScript di Mozilla detta<br />
<strong>flowscript</strong>, due in Java:  <strong>JavaFlow</strong> e l&#8217;<strong>Apples Flow</strong>.<br />
Per capire come funziona la <em>continuazione</em> vediamo subito<br />
un esempio in  <strong>JavaFlow</strong>:</p>
<ol>
<li> import org.apache.cocoon.components. flow. java.AbstractContinuable;</li>
<li> import org.apache.cocoon.components. flow. java.VarMap;</li>
<li> public class CalculatorFlow extends AbstractContinuable {</li>
<li> public void doCalculator() {</li>
<li> sendPageAndWait(&#8220;getNumberA.html&#8221;) ;</li>
<li> float a = Float .parseFloat(getRequest() .getParameter(&#8220;a&#8221;)) ;</li>
<li> sendPageAndWait(&#8220;getNumberB.html&#8221;) ;</li>
<li> float b = Float .parseFloat(getRequest() .getParameter(&#8220;a&#8221;)) ;</li>
<li> sendPageAndWait(&#8220;getOperator.html&#8221;) ;</li>
<li> String op = getRequest() .getParameter(&#8220;operator&#8221;) ;</li>
<li> i f (op. equals(&#8220;plus&#8221;)) {</li>
<li> sendPage(&#8220;page/calculator?result&#8221;, new VarMap() .add(&#8220;result&#8221;, a + b))</li>
<li>;</li>
<li> } else i f (op. equals(&#8220;minus&#8221;)) {</li>
<li> sendPage(&#8220;page/calculator?result&#8221;, new VarMap() .add(&#8220;result&#8221;, a ? b))</li>
<li>;</li>
<li> } else i f (op. equals(&#8220;multiply&#8221;)) {</li>
<li> sendPage(&#8220;page/calculator?result&#8221;, new VarMap() .add(&#8220;result&#8221;, a  b))</li>
<li>;</li>
<li> } else i f (op. equals(&#8220;divide&#8221;)) {</li>
<li> i f (b == 0f )</li>
<li> sendPageAndWait(&#8220;page/calculator?message&#8221;, new VarMap() .add(&#8220;</li>
<li>message&#8221;, &#8220;Error: Cannot divide by zero!&#8221;)) ;</li>
<li> sendPage(&#8220;page/calculator?result&#8221;, new VarMap() .add(&#8220;result&#8221;, a / b))</li>
<li>;</li>
<li> } else {</li>
<li> sendPageAndWait(&#8220;page/calculator?message&#8221;, new VarMap() .add(&#8220;message&#8221;</li>
<li>, &#8220;Error: Unkown operator !&#8221;)) ;</li>
<li> }</li>
<li> }</li>
<li>}</li>
</ol>
<p>Quando un client richiede l&#8217;applicazione calcolatrice viene avviata la funzione<br />
<em>doCalculator</em>. Alla linea 5 del listato c&#8217;è la funzione speciale<br />
<em>sendPageAndWait</em>; questa funzione è in grado di invocare pagine web,<br />
selezionado una pipeline, e di passare dei parametri, una mappa di parametri<br />
come si vede alla riga 15 dove c&#8217;è l&#8217;altra funzione speciale <em>sendPage</em>. Quando<br />
la funzione <em>sendPageAndWait</em> invia una pagina, viene bloccata l&#8217;esecuzione<br />
del thread fino a quando l&#8217;utente cliccando su un link non invia una nuova<br />
richiesta al server. Intercettata la richiesta, l&#8217;applicazione riparte dal punto<br />
in cui si era fermata, e continua l&#8217;esecuzione del programma, riga 6 del listato, catturando il parametro passato dalla pagina. Al passo seguente viene inviata una seconda pagina al client e rimane in attesa.<br />
<u>E&#8217; evidente che con questo approccio possiamo scrivere il flusso di controllo<br />
di un&#8217;applicazione web come quello di un normale programma.</u></p>
<p>La <em>continuation</em><br />
può semplificare molto lo sviluppo di applicazioni web. Lo schema<br />
senza stati può esser ridisegnato<br />
come in figura seguente:</p>
<p><a href="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/cont_modello_flow.png" title="Modello ?Applicazione?"><img src="http://www.alessandro.vincelli.name/wp-content/uploads/2007/12/cont_modello_flow.thumbnail.png" alt="Modello ?Applicazione?" /></a></p>
<p>Quando un utente avvia una applicazione è il webserver che ha il controllo.<br />
Una applicazione web, invece di essere un insieme di richieste in<br />
ordine casuale, diviene una conversazione con l&#8217;utente unificata e controllata.<br />
I vantaggi offerti da questo approccio possono esser così schematizzati:</p>
<ul>
<li> assenza di stato tra le richieste. Il framework può identicare una singola <em>continuation</em> dalla URL e salvarla in sessione. Di conseguenza l&#8217;architettura di comunicazione non viene appesantita, anzi nella pratica Cocoon si limita a passare un solo ID alfanumerico che serve ad identificare la <em>continuation</em>.</li>
<li>il modello di programmazione è di tipo stateful, ossia con informazioni<br />
sullo stato. Il framework è in grado di riportarsi in ogni momento ad<br />
ogni stadio del suo ciclo di vita.</li>
<li>è possibile invalidare la <em>continuation</em>, questo può essere utile, per<br />
esempio, nei casi di invii multipli dello stesso form.</li>
<li>il pulsante indietro del browser non crea problemi visto che il<br />
framework, si occupa di ripristinare anche gli stati precedenti.</li>
</ul>
<p>Uno svantaggio è che il framework utilizza molta memoria per gestire<br />
la <em>continuation</em>. Questo è da tenere in considerazione per fare un uso oculato<br />
delle risorse. E&#8217; comunque da segnalare che ormai la <em>continuation</em><br />
in cocoon è una implementazione matura; a conferma di questo ci sono le<br />
esperienze pratiche da me maturate negli ultimi due anni, non si sono mai<br />
verificati decadimenti delle prestazioni e/o condizioni di out of memory anche<br />
in condizioni di stress per il framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandro.vincelli.name/2007/12/06/apache-cocoon-control-flow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Cocoon &#8211; Cron</title>
		<link>http://www.alessandro.vincelli.name/2007/12/04/apache-cocoon-cron/</link>
		<comments>http://www.alessandro.vincelli.name/2007/12/04/apache-cocoon-cron/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 15:40:58 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Cocoon]]></category>

		<guid isPermaLink="false">http://www.alessandro.vincelli.name/?p=5</guid>
		<description><![CDATA[Era diverso tempo che non mi serviva&#8230; l&#8217;ho rispolverato in questi giorni. Innanzitutto il file local.blocks.properties deve avere la seguente riga commentata: #include.block.cron=false fatto il build avremo in WEB-INF/lib/ la libreria cocoon-cron-block.jar. La configurazione è tutta nel cocoon.xconf e in questo file ci sono già degli esempi di configurazioni. Per esempio: &#60;component class="org.apache.cocoon.components.cron.CocoonQuartzJobScheduler" logger="cron" role="org.apache.cocoon.components.cron.JobScheduler"&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Era diverso tempo che non mi serviva&#8230; l&#8217;ho rispolverato in questi giorni.</p>
<p>Innanzitutto il file <em>local.blocks.properties</em> deve avere la seguente riga commentata: <strong><br />
</strong></p>
<pre><strong>#include.block.cron=false</strong></pre>
<p>fatto il build avremo in WEB-INF/lib/ la libreria cocoon-cron-block.jar.</p>
<p>La configurazione è tutta nel cocoon.xconf e in questo file ci sono già degli esempi di configurazioni.</p>
<p>Per esempio:</p>
<pre>&lt;component class="org.apache.cocoon.components.cron.CocoonQuartzJobScheduler" logger="cron" role="org.apache.cocoon.components.cron.JobScheduler"&gt;</pre>
<p>&#8230;</p>
<pre>&lt;!-- Definintions of triggers --&gt;
&lt;triggers&gt;
&lt;trigger name="pipeline-test"
target="org.apache.cocoon.components.cron.CronJob/test-cron"
concurrent-runs="true"&gt;
&lt;seconds&gt;10&lt;/seconds&gt;
&lt;minutes&gt;*&lt;/minutes&gt;
&lt;hours&gt;*&lt;/hours&gt;
&lt;days&gt;*&lt;/days&gt;
&lt;months&gt;*&lt;/months&gt;
&lt;/trigger&gt;
&lt;/triggers&gt;
&lt;/component&gt;
&lt;component role="org.apache.cocoon.components.cron.CronJob/test-cron"
class="org.apache.cocoon.components.cron.CocoonPipelineCronJob"
logger="cron.pipeline"&gt;
&lt;pipeline&gt;samples/updateCacheContext.flow&lt;/pipeline&gt;
&lt;/component&gt;</pre>
<p>E&#8217; stato configurato un trigger con nome <em>&#8220;pipeline-test&#8221; e </em>target <em>&#8230;/test-cron </em>che verrà eseguito ogni minuto per tutti i giorni, per la precisione al decimo secondo di ogni minuto<em>.</em> Attenzione all&#8217;attributo  <em>concurrent-runs,</em> indica al cron se  può eseguire un nuovo comando anche se quello precedente ancora non è terminato.</p>
<p>Di seguito il trigger è configurato per invocare una semplice pipeline:
<pre><em>samples/updateCacheContext.flow.</em></pre>
<p>Funziona tutto per bene, quindi anche stavolta non mi sono visto java.util.TimerTask.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alessandro.vincelli.name/2007/12/04/apache-cocoon-cron/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

