<?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>Remember me...</title>
	<atom:link href="http://blog.marcoccia.net/?feed=rss2&#038;langswitch_lang=it" rel="self" type="application/rss+xml" />
	<link>http://blog.marcoccia.net</link>
	<description></description>
	<lastBuildDate>Fri, 06 Aug 2010 14:43:26 +0000</lastBuildDate>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ripristinare il software ad una precedente revision di Subversion</title>
		<link>http://blog.marcoccia.net/?p=125</link>
		<comments>http://blog.marcoccia.net/?p=125#comments</comments>
		<pubDate>Fri, 06 Aug 2010 14:43:26 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=125</guid>
		<description><![CDATA[Su Subversion, per ripristinare il software ad una precedente revision &#232; necessario effettuare un merge dei cambiamenti dalla revision corrente fino alla revision precedente a cui si vuole ritornare. Per esempio, se si vuole riportare il trunk dalla revision 682 alla 680, bisogna eseguire: svn merge -r 682:680 http://myrepository.com/my/project/trunk Subversion applica le modifiche sulla copia [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">
Su Subversion, per ripristinare il software ad una precedente revision &egrave; necessario effettuare un merge dei cambiamenti dalla revision corrente fino alla revision precedente a cui si vuole ritornare.<br/><br />
Per esempio, se si vuole riportare il trunk dalla revision 682 alla 680, bisogna eseguire:
</p>
<pre>svn merge -r 682:680 http://myrepository.com/my/project/trunk</pre>
<p align="justify">
Subversion applica le modifiche sulla copia locale.<br/><br />
Per verificare le modifiche apportate si pu&ograve; eseguire un diff:
</p>
<pre>svn diff -r 682:680 http://myrepository.com/my/project/trunk</pre>
<p align="justify">
Infine, poich&egrave; il merge &egrave; stato applicato sulla copia locale &egrave; necessario effettuarne il commit.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E+http://g77ce.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=125&amp;submitHeadline=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=125&amp;submitHeadline=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=125&amp;title=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=125&amp;title=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=125&amp;title=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=125&amp;title=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E&amp;link=http://blog.marcoccia.net/?p=125" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Ripristinare+il+software+ad+una+precedente+revision+di+Subversion%3C%2Flang_en%3E%3Clang_it%3E&amp;link=http://blog.marcoccia.net/?p=125" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=125&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rimuovere le directory .svn ricorsivamente</title>
		<link>http://blog.marcoccia.net/?p=120</link>
		<comments>http://blog.marcoccia.net/?p=120#comments</comments>
		<pubDate>Fri, 09 Apr 2010 14:44:28 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[shell]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=120</guid>
		<description><![CDATA[Con il comando find troviamo tutte le directory .svn a partire dal percorso in cui ci troviamo: $ find . -type d -name .svn A questo punto possiamo dare la lista in pasto ad rm, utilizzando il backtick (AltGr + apostrofo) per l&#8217;interpretazione di find: $ rm -rf `find . -type d -name .svn` Buzz [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Con il comando <strong>find</strong> troviamo tutte le directory .svn a partire dal percorso in cui ci troviamo:</p>
<pre>
$ find . -type d -name .svn
</pre>
<p align="justify">A questo punto possiamo dare la lista in pasto ad <strong>rm</strong>, utilizzando il backtick (AltGr + apostrofo) per l&#8217;interpretazione di find:</p>
<pre>
$ rm -rf `find . -type d -name .svn`
</pre>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Rimuovere+le+directory+.svn+ricorsivamente+http://t6cw7.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=120&amp;submitHeadline=Rimuovere+le+directory+.svn+ricorsivamente" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=120&amp;submitHeadline=Rimuovere+le+directory+.svn+ricorsivamente" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=120&amp;title=Rimuovere+le+directory+.svn+ricorsivamente" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=120&amp;title=Rimuovere+le+directory+.svn+ricorsivamente" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=120&amp;title=Rimuovere+le+directory+.svn+ricorsivamente" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=120&amp;title=Rimuovere+le+directory+.svn+ricorsivamente" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Rimuovere+le+directory+.svn+ricorsivamente&amp;link=http://blog.marcoccia.net/?p=120" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Rimuovere+le+directory+.svn+ricorsivamente&amp;link=http://blog.marcoccia.net/?p=120" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=120&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion keywords sui file Java</title>
		<link>http://blog.marcoccia.net/?p=111</link>
		<comments>http://blog.marcoccia.net/?p=111#comments</comments>
		<pubDate>Sun, 05 Apr 2009 10:10:30 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=111</guid>
		<description><![CDATA[Subversion (qui la guida) ha la capacità di sostituire delle keywords all&#8217;interno del file versionato. Le possibili keywords sono: Date &#8211; descrive l&#8217;ultima volta che il file è stato modificato nel repository. Revision &#8211; descrive l&#8217;ultima revisione nella quale il il file è stato modificato nel repository. Author &#8211; descrive l&#8217;ultimo utente che ha modificato [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Subversion (<a href="http://svnbook.red-bean.com/">qui</a> la guida) ha la capacità di sostituire delle <i>keywords</i> all&#8217;interno del file versionato. Le possibili keywords sono:</p>
<ul>
<li><b>Date</b> &#8211; descrive l&#8217;ultima volta che il file è stato modificato nel repository.</li>
<li><b>Revision</b> &#8211; descrive l&#8217;ultima revisione nella quale il il file è stato modificato nel repository.</li>
<li><b>Author</b> &#8211; descrive l&#8217;ultimo utente che ha modificato il file nel repository.</li>
<li><b>Id</b> &#8211; &egrave; una combinazione delle altre keywords.</li>
</ul>
<p align="justify" style="margin-top: 18px;">Utilizziamo le keywords all&#8217;interno della <a href="http://java.sun.com/j2se/javadoc/">JavaDoc</a> di un file Java. Un tipico header template pu&ograve; essere:</p>
<pre>
/**
 * CLASS DESCRIPTION
 *
 * @author Pasquale Marcoccia
 * @version $Revision$ on $Date$ by $Author$
 */
</pre>
<p align="justify">oppure:</p>
<pre>
/**
 * CLASS DESCRIPTION
 *
 * @author Pasquale Marcoccia
 * @version $Id$
 */
</pre>
<p align="justify">Per dire a Subversion se sostituire o meno le chiavi di un particolare file, bisogna utilizzare il sottocomando <i>propset</i>. La proprietà <i>svn:keywords</i>, quando settata su un file sotto controllo di versione, controlla quali chiavi dovranno essere sostituite su quel file. Il valore &egrave; una lista delle chiavi delimitata da spazi.</p>
<pre>svn propset svn:keywords "Date Revision Author Id" MyClass.java</pre>
<p align="justify">E&#8217; possibile settare le keywords su tutti i file Java in una directory:</p>
<pre>find myProject/ -type f -name '*.java' -exec svn propset svn:keywords "Date Revision Author Id" {}  \; -print</pre>
<p align="justify">Invece, per i file aggiunti successivamente, &egrave; possibile settare automaticamente le keywords in base al file modificando il file di configurazione di Subversion (~/.subversion/config):</p>
<pre>
[miscellany]
enable-auto-props = yes
[auto-props]
*.java = svn:keywords=Date Revision Author Id
</pre>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Subversion+keywords+sui+file+Java+http://7t2dr.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=111&amp;submitHeadline=Subversion+keywords+sui+file+Java" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=111&amp;submitHeadline=Subversion+keywords+sui+file+Java" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=111&amp;title=Subversion+keywords+sui+file+Java" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=111&amp;title=Subversion+keywords+sui+file+Java" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=111&amp;title=Subversion+keywords+sui+file+Java" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=111&amp;title=Subversion+keywords+sui+file+Java" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Subversion+keywords+sui+file+Java&amp;link=http://blog.marcoccia.net/?p=111" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Subversion+keywords+sui+file+Java&amp;link=http://blog.marcoccia.net/?p=111" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=111&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestire i progetti con Maven</title>
		<link>http://blog.marcoccia.net/?p=95</link>
		<comments>http://blog.marcoccia.net/?p=95#comments</comments>
		<pubDate>Sun, 01 Mar 2009 15:46:27 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=95</guid>
		<description><![CDATA[Per poter utilizzare a pieno le plugin (quelle core e non) consiglio di dare sempre uno sguardo alla descrizione dettagliata (che include tutti i possibili parametri) utilizzando il goal describe della plugin di help: $ mvn help:describe -Dplugin=[plugin] -Ddetail dove [plugin] &#232; l&#8217;artifactId della plugin, per es. help stessa: $ mvn help:describe -Dplugin=help -Ddetail Quando [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Per poter utilizzare a pieno le <a href="http://maven.apache.org/plugins/index.html">plugin</a> (quelle core e non) consiglio di dare sempre uno sguardo alla descrizione dettagliata (che include tutti i possibili parametri) utilizzando il goal <i>describe</i> della plugin di <i>help</i>:</p>
<pre>$ mvn help:describe -Dplugin=[plugin] -Ddetail</pre>
<p align="justify">dove <b>[plugin]</b> &egrave; l&#8217;artifactId della plugin, per es. help stessa:</p>
<pre>$ mvn help:describe -Dplugin=help -Ddetail</pre>
<p align="justify">Quando si comincia un progetto <i>ex-novo</i> &egrave; possibile crearne la struttura tramite il goal <i>create</i> della plugin <i>archetype</i> come descritto nell&#8217;<a href="http://blog.marcoccia.net/?p=62">articolo precedente</a>. Tuttavia in quel caso non &egrave; stato passato alcun valore per il parametro <b>archetypeArtifactId</b>, che rappresenta l&#8217;<i>archetipo</i> del progetto che si intende gestire. Ci&ograve; ha impatti sulla struttura della directory e sul contenuto base dei pom. Quando intendiamo utilizzare un <i>archetipo</i> diverso dal default (<b>maven-archetype-quickstart</b>) o ne conosciamo l&#8217;archetypeArtifactId oppure utilizziamo il goal <i>generate</i> che &egrave; la versione interattiva di <i>create</i>:</p>
<pre>$ mvn archetype:generate</pre>
<p align="justify">La prima richiesta necessita l&#8217;inserimento dell&#8217;<i>archetipo</i> dopo aver mostrato la lista di tutti quelli disponibili:</p>
<pre>
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: internal -> appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF)
2: internal -> appfuse-basic-spring (AppFuse archetype for creating a web application with Hibernate, Spring and Spring MVC)
3: internal -> appfuse-basic-struts (AppFuse archetype for creating a web application with Hibernate, Spring and Struts 2)
4: internal -> appfuse-basic-tapestry (AppFuse archetype for creating a web application with Hibernate, Spring and Tapestry 4)
5: internal -> appfuse-core (AppFuse archetype for creating a jar application with Hibernate and Spring and XFire)
6: internal -> appfuse-modular-jsf (AppFuse archetype for creating a modular application with Hibernate, Spring and JSF)
7: internal -> appfuse-modular-spring (AppFuse archetype for creating a modularapplication with Hibernate, Spring and Spring MVC)
8: internal -> appfuse-modular-struts (AppFuse archetype for creating a modularapplication with Hibernate, Spring and Struts 2)
9: internal -> appfuse-modular-tapestry (AppFuse archetype for creating a modular application with Hibernate, Spring and Tapestry 4)
10: internal -> maven-archetype-j2ee-simple (A simple J2EE Java application)
11: internal -> maven-archetype-marmalade-mojo (A Maven plugin development project using marmalade)
12: internal -> maven-archetype-mojo (A Maven Java plugin development project)
13: internal -> maven-archetype-portlet (A simple portlet application)
14: internal -> maven-archetype-profiles ()
15: internal -> maven-archetype-quickstart ()
16: internal -> maven-archetype-site-simple (A simple site generation project)
17: internal -> maven-archetype-site (A more complex site project)
18: internal -> maven-archetype-webapp (A simple Java web application)
19: internal -> jini-service-archetype (Archetype for Jini service project creation)
20: internal -> softeu-archetype-seam (JSF+Facelets+Seam Archetype)
21: internal -> softeu-archetype-seam-simple (JSF+Facelets+Seam (no persistence) Archetype)
22: internal -> softeu-archetype-jsf (JSF+Facelets Archetype)
23: internal -> jpa-maven-archetype (JPA application)
24: internal -> spring-osgi-bundle-archetype (Spring-OSGi archetype)
25: internal -> confluence-plugin-archetype (Atlassian Confluence plugin archetype)
26: internal -> jira-plugin-archetype (Atlassian JIRA plugin archetype)
27: internal -> maven-archetype-har (Hibernate Archive)
28: internal -> maven-archetype-sar (JBoss Service Archive)
29: internal -> wicket-archetype-quickstart (A simple Apache Wicket project)
30: internal -> scala-archetype-simple (A simple scala project)
31: internal -> lift-archetype-blank (A blank/empty liftweb project)
32: internal -> lift-archetype-basic (The basic (liftweb) project)
33: internal -> cocoon-22-archetype-block-plain ([http://cocoon.apache.org/2.2/maven-plugins/])
34: internal -> cocoon-22-archetype-block ([http://cocoon.apache.org/2.2/maven-plugins/])
35: internal -> cocoon-22-archetype-webapp ([http://cocoon.apache.org/2.2/maven-plugins/])
36: internal -> myfaces-archetype-helloworld (A simple archetype using MyFaces)
37: internal -> myfaces-archetype-helloworld-facelets (A simple archetype usingMyFaces and facelets)
38: internal -> myfaces-archetype-trinidad (A simple archetype using Myfaces and Trinidad)
39: internal -> myfaces-archetype-jsfcomponents (A simple archetype for create custom JSF components using MyFaces)
40: internal -> gmaven-archetype-basic (Groovy basic archetype)
41: internal -> gmaven-archetype-mojo (Groovy mojo archetype)
Choose a number:  (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15:
</pre>
<p align="justify">Utilizziamo l&#8217;<i>archetipo</i> <b>maven-archetype-webapp</b> con il goal <i>create</i>:</p>
<pre>
mvn archetype:create -DgroupId=net.marcoccia \
    -DartifactId=mywebapp \
    -DpackageName=net.marcoccia.mywebapp \
    -DarchetypeArtifactId=maven-archetype-webapp
</pre>
<p align="justify" style="top-margin: 18px;">La directory del progetto &egrave; cos&igrave; costituita:</p>
<ul>
<li>src
<ul>
<li>main
<ul>
<li>resources</li>
<li>webapp
<ul>
<li>WEB-INF
<ul>
<li>web.xml</li>
</ul>
</li>
<li>index.jsp</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>pom.xml</li>
</ul>
<p align="justify" style="margin-top: 18px;">Il pom.xml generato:</p>
<pre>
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;net.marcoccia&lt;/groupId&gt;
    &lt;artifactId&gt;mywebapp&lt;/artifactId&gt;
    &lt;packaging&gt;war&lt;/packaging&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;name&gt;mywebapp Maven Webapp&lt;/name&gt;
    &lt;url&gt;http://maven.apache.org&lt;/url&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;junit&lt;/groupId&gt;
            &lt;artifactId&gt;junit&lt;/artifactId&gt;
            &lt;version&gt;3.8.1&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
    &lt;build&gt;
        &lt;finalName&gt;mywebapp&lt;/finalName&gt;
    &lt;/build&gt;
&lt;/project&gt;
</pre>
<p align="justify">Nella fase package, il war (notare il campo <i>packaging</i>) viene generato col nome uguale al body del campo <i>finalName</i> (in questo caso <i>mywebapp.war</i>).<br/>Le dipendenze J2EE (di scope <i>provided</i> perch&egrave; rese disponibili dal container in cui verr&agrave; eseguita la webapp) devono essere inserite manualmente:</p>
<pre>
&lt;dependencies&gt;
    [...]
    &lt;dependency&gt;
        &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
        &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;
        &lt;version&gt;2.4&lt;/version&gt;
        &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;
</pre>
<p align="justify">Maven &egrave; anche in grado di gestire progetti con pi&ugrave; moduli. Abbiamo un progetto di nome <i>mymultimodule</i>, che richiama i sotto-moduli <i>example</i> e <i>mywebapp</i>:</p>
<ul>
<li>example
<ul>
<li>pom.xml</i>
	</ul>
</li>
<li>mywebapp
<ul>
<li>pom.xml</i>
	</ul>
</li>
<li>pom.xml</li>
</ul>
<p align="justify" style="margin-top: 18px">Il pom &#8220;padre&#8221; richiama i moduli tramite il campo <b>modules</b>:</p>
<pre>
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
        xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
        xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0

http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;

    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;net.marcoccia&lt;/groupId&gt;
    &lt;artifactId&gt;mymultimodule&lt;/artifactId&gt;
    &lt;packaging&gt;pom&lt;/packaging&gt;
    &lt;version&gt;1.0&lt;/version&gt;
    &lt;name&gt;My Multimodule Project&lt;/name&gt;

    &lt;modules&gt;
        &lt;module&gt;example&lt;/module&gt;
        &lt;module&gt;mywebapp&lt;/module&gt;
    &lt;/modules&gt;

    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;junit&lt;/groupId&gt;
            &lt;artifactId&gt;junit&lt;/artifactId&gt;
            &lt;version&gt;3.8.1&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/project&gt;
</pre>
<p align="justify">Mentre i pom &#8220;figli&#8221; fanno riferimento al &#8220;padre&#8221; tramite il campo <b>parent</b>:</p>
<pre>
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
        xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
        xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0

http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;

    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;net.marcoccia&lt;/groupId&gt;
    &lt;artifactId&gt;example&lt;/artifactId&gt;
    &lt;packaging&gt;jar&lt;/packaging&gt;
    &lt;version&gt;1.0&lt;/version&gt;
    &lt;name&gt;Example Module&lt;/name&gt;

    &lt;parent&gt;
        &lt;groupId&gt;net.marcoccia&lt;/groupId&gt;
        &lt;artifactId&gt;mymultimodule&lt;/artifactId&gt;
        &lt;version&gt;1.0&lt;/version&gt;
    &lt;/parent&gt;

    [...]
&lt;/project&gt;
</pre>
<p align="justify">In questo caso Maven localizza i pom dei sottomoduli e li carica nel Maven Reactor, un componente in grado di analizzare le dipendenze tra i moduli e stabilire l&#8217;ordine di compilazione e packaging.</p>
<p align="justify">La gestione di un progetto multimodulo spesso porta ad informazioni ridondanti, per esempio possono esserci dei moduli che richiedono una medesima dipendenza. Nel caso in cui moduli &#8220;fratelli&#8221; condividano una dipendenza &egrave; possibile (e consigliato) spostare quest&#8217;ultima nel body <b>dependencyManagement</b> del pom &#8220;padre&#8221;:</p>
<pre>
&lt;dependencyManagement&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.abc&lt;/groupId&gt;
            &lt;artifactId&gt;xyz&lt;/artifactId&gt;
            &lt;version&gt;2.0.0&lt;/version&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;dependencyManagement&gt;
</pre>
<p align="justify">non &egrave; necessario specificare lo scope qui, lo faranno i moduli (se necessario), che a loro volta non specificano la versione perch&egrave; &egrave; stato gi&agrave; fatto dal pom &#8220;padre&#8221;:</p>
<pre>
&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.abc&lt;/groupId&gt;
        &lt;artifactId&gt;xyz&lt;/artifactId&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;
</pre>
<p align="justify">Definito il progetto preoccupiamoci di reperire le dipendenze necessarie. Possiamo cercare le librerie direttamente sul repository pubblico di Maven <a href="http://www.mvnrepository.com">http://www.mvnrepository.com</a>. Cercando ad es. <a href="http://www.mvnrepository.com/search.html?query=log4j">log4j</a> troviamo diversi groupId e <a href="http://www.mvnrepository.com/artifact/log4j/log4j">dopo averne selezionato uno</a> si pu&ograve; direttamente copiare la sezione <i>POM Dependency</i> nelle <i>dependencies</i> del proprio pom.</br> Se le dipendenze richieste non sono disponibili su un repository Maven pubblico, la soluzione pi&ugrave; adatta sarebbe quella di avere un repository aziendale. Poich&egrave; ci&ograve; non &egrave; sempre possibile, la soluzione che propongo &egrave; quella di avere un repository locale nel progetto stesso. Lo so, stiamo andando contro gli <i>ideali Maven</i> ma questa soluzione &egrave; senza dubbio immediata (e direi anche indolore) soprattutto nel caso che vi sto per illustare. Se ad es. l&#8217;organizzazione <i>organization</i> rilascia la versione 2.0.0 della libreria xyz che per&ograve; ancora non &egrave; disponibile sul repository pubblico (e a sua volta questa <i>organization</i> non ha un proprio repository Maven pubblico) allora non vi resta che andare nella sezione download di <a href="http://xyz.organization.org">http://xyz.organization.org</a> e scaricare gli archivi:</p>
<ul>
<li>xyz-2.0.0.jar</li>
<li>xyz-2.0.0-javadoc.jar</li>
<li>xyz-2.0.0-sources.jar</li>
</ul>
<p align="justify" style="margin-top: 18px;">Generiamo per ogni archivio l&#8217;MD5 e lo SHA1 (solo se non si vuole ricevere dei warning), configuriamo l&#8217;xyz-2.0.0.pom:</p>
<pre>
&lt;project&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;organization&lt;/groupId&gt;
    &lt;artifactId&gt;xyz&lt;/artifactId&gt;
    &lt;version&gt;2.0.0&lt;/version&gt;
&lt;/project&gt;
</pre>
<p align="justify">e mettiamo il tutto nella directory <b>${basedir}/lib/organization/xyz/2.0.0</b> (notare il percorso groupId/artifactId/version). Non ci resta che configurare il repository e la dipendenza nel pom.xml:</p>
<pre>
&lt;repositories&gt;
    &lt;repository&gt;
        &lt;id&gt;myproject.repository&lt;/id&gt;
        &lt;name&gt;MyProject Repository&lt;/name&gt;
        &lt;url&gt;file:///${basedir}/lib&lt;/url&gt;
    &lt;/repository&gt;
&lt;/repositories&gt;
[...]
&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;organization&lt;/groupId&gt;
        &lt;artifactId&gt;xyz&lt;/artifactId&gt;
        &lt;version&gt;2.0.0&lt;/version&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;
</pre>
<p align="justify">Lo ripeto (anche per auto-convincermi): questa dovrebbe essere DAVVERO l&#8217;ultima soluzione a eventuali problemi di dipendenze non soddisfatte.</p>
<p align="justify">Per mostrare tutte le dipendenze risolte (e quindi incluse nel classpath sempre in base allo scope) possiamo lanciare:</p>
<pre>$ mvn dependency:resolve</pre>
<p align="justify">Probabilmente il risultato sar&agrave; un numero di dipendenze maggiore di quelle configurate nel nostro pom, dovuto alle ulteriori dipendenze richieste a loro volta da queste ultime. Per vedere l&#8217;albero delle dipendenze e visualizzare &#8220;chi richiede cosa&#8221; possiamo lanciare:</p>
<pre>$ mvn dependency:tree</pre>
<p align="justify">Terminiamo con l&#8217;inserimento delle informazioni a contorno (totalmente opzionali).</p>
<ul>
<li>
<p align="justify">La <i>licenza d&#8217;uso</i>:</p>
<pre>
&lt;licenses&gt;
    &lt;license&gt;
        &lt;name&gt;marcoccia.net&lt;/name&gt;
        &lt;url&gt;http://www.marcoccia.net/licenses/LICENSE-1.0.txt&lt;/url&gt;
        &lt;distribution&gt;repo&lt;/distribution&gt;
        &lt;comments&gt;An open-access license&lt;/comments&gt;
    &lt;/license&gt;
&lt;/licenses&gt;
</pre>
</li>
<li>
<p align="justify">Il <i>gruppo di sviluppo</i>:</p>
<pre>
&lt;organization&gt;
    &lt;name&gt;Marcoccia.net&lt;/name&gt;
    &lt;url&gt;http://www.marcoccia.net&lt;/url&gt;
&lt;/organization&gt;
</pre>
</li>
<li>
<p align="justify">Gli <i>sviluppatori</i>:</p>
<pre>
&lt;developers&gt;
    &lt;developer&gt;
        &lt;id&gt;pasquale.marcoccia&lt;/id&gt;
        &lt;name&gt;Pasquale Marcoccia&lt;/name&gt;
        &lt;email&gt;pasquale@marcoccia.net&lt;/email&gt;
        &lt;url&gt;http://blog.marcoccia.net&lt;/url&gt;
        &lt;organization&gt;Marcoccia.net&lt;/organization&gt;
        &lt;organizationUrl&gt;http://www.marcoccia.net&lt;/organizationUrl&gt;
        &lt;roles&gt;
            &lt;role&gt;developer&lt;/role&gt;
        &lt;/roles&gt;
        &lt;timezone&gt;+1&lt;/timezone&gt;
    &lt;/developer&gt;
    [...]
&lt;/developers&gt;
</pre>
</li>
</ul>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Gestire+i+progetti+con+Maven+http://fd5bd.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=95&amp;submitHeadline=Gestire+i+progetti+con+Maven" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=95&amp;submitHeadline=Gestire+i+progetti+con+Maven" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=95&amp;title=Gestire+i+progetti+con+Maven" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=95&amp;title=Gestire+i+progetti+con+Maven" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=95&amp;title=Gestire+i+progetti+con+Maven" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=95&amp;title=Gestire+i+progetti+con+Maven" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Gestire+i+progetti+con+Maven&amp;link=http://blog.marcoccia.net/?p=95" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Gestire+i+progetti+con+Maven&amp;link=http://blog.marcoccia.net/?p=95" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=95&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Maven al primo utilizzo</title>
		<link>http://blog.marcoccia.net/?p=62</link>
		<comments>http://blog.marcoccia.net/?p=62#comments</comments>
		<pubDate>Thu, 26 Feb 2009 20:48:41 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=62</guid>
		<description><![CDATA[Maven &#232; un tool di project management che, basandosi sul concetto di Project Object Model (POM), permette di definire degli standard, il ciclo di vita e la gestione delle dipendenze di un progetto.Maven adotta il paradigma convention over configuration e baster&#224; seguire poche convenzioni anche solo per sfruttare una parte di ci&#242; che offre (per [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><a href="http://maven.apache.org">Maven</a> &egrave; un tool di project management che, basandosi sul concetto di <a href="http://en.wikipedia.org/wiki/Project_Object_Model">Project Object Model (POM)</a>, permette di definire degli standard, il ciclo di vita e la gestione delle dipendenze di un progetto.<br/>Maven adotta il paradigma <a href="http://en.wikipedia.org/wiki/Convention_over_Configuration">convention over configuration</a> e baster&agrave; seguire poche convenzioni anche solo per sfruttare una parte di ci&ograve; che offre (per es. nella fase di compilazione e packaging).<br/><a href="http://maven.apache.org/download.html">Qui</a> il download con le istruzioni per l&#8217;installazione.</p>
<p align="justify">Per default Maven prevede la seguente struttura:</p>
<ul>
<li>in <b>${basedir}/src/main/java</b> il codice sorgente</li>
<li>in <b>${basedir}/src/main/resources</b> i file di resource</li>
<li>in <b>${basedir}/src/test/java</b> le classi di test</li>
<li>in <b>${basedir}/src/test/resources</b> le risorse per le classi di test</li>
<li>in <b>${basedir}/target/classes</b> le classi compilate</li>
<li>in <b>${basedir}/target</b> il file di distribuzione (per default &egrave; un JAR)</li>
</ul>
<p align="justify" style="margin-top: 18px;">La configurazione del progetto viene fatta tramite il file <b>pom.xml</b> nella root del progetto (${basedir}). Di seguito un esempio:</p>
<pre>
&lt;project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
        http://maven.apache.org/maven-v4_0_0.xsd"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;net.marcoccia&lt;/groupId&gt;
    &lt;artifactId&gt;example&lt;/artifactId&gt;
    &lt;packaging&gt;jar&lt;/packaging&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;name&gt;example&lt;/name&gt;
    &lt;url&gt;http://example.marcoccia.net&lt;/url&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;junit&lt;/groupId&gt;
            &lt;artifactId&gt;junit&lt;/artifactId&gt;
            &lt;version&gt;3.8.1&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/project&gt;
</pre>
<p align="justify">E&#8217; possibile creare tutta la struttura iniziale del progetto, con relativo pom.xml tramite il comando:</p>
<pre>
$ mvn archetype:create \
    -DgroupId=net.marcoccia \
    -DartifactId=example \
    -DpackageName=net.marcoccia.example
</pre>
<p align="justify">Il poker di valori <i>groupId</i>, <i>artifactId</i>, <i>packaging</i> e <i>version</i> identificano univocamente un progetto. I campi <i>name</i> e <i>url</i> sono puramente descrittivi. Il blocco <i>dependencies</i> definisce invece le dipendenze richieste dal progetto (in questo caso <a href="http://www.junit.org/">JUnit</a> per l&#8217;esecuzione delle classi di test).<br/>Come pu&ograve; Maven con queste poche righe, compilare, testare, impacchettare, creare la javadoc e un sito di documentazione? Semplice, il pom.xml in realt&agrave; estende un &#8220;super&#8221; pom. Per visualizzare il pom effettivo basta lanciare:</p>
<pre>
$ mvn help:effective-pom
</pre>
<p align="justify">La sintassi dei comandi Maven visti finora &egrave; sempre la stessa:</p>
<pre>
$ mvn [plugin]:[goal]
</pre>
<p align="justify">dove una plugin pu&ograve; offrire pi&ugrave; di un goal (per es. la plugin di compilazione prevede un goal per la compilazione del codice sorgente e un altro per la compilazione dei casi di test).</p>
<p align="justify">Un&#8217;altra tipologia di comandi Maven &egrave;:</p>
<pre>
$ mvn [phase]
</pre>
<p align="justify">Maven offre tutte le fasi del ciclo di vita di un progetto: dalla validazione dell&#8217;integrit&agrave; al deploy del deliverable in produzione. L&#8217;esecuzione di una determinata fase richiama l&#8217;esecuzione di eventuali fasi che lo precedono. Ogni fase prevede l&#8217;esecuzione di determinati [plugin]:[goal].<br/><br />
Se si lancia la fase package:</p>
<pre>$ mvn package</pre>
<p align="justify">vengono eseguite le seguenti fasi con relative coppie &#8220;plugin:goal&#8221;:</p>
<ul>
<li>process-resources &#8211; resources:resources, che copia tutti i file di resources nella directory di output</li>
<li>compile &#8211; compiler:compile, che compila il codice sorgente</li>
<li>process-test-resources &#8211; resources:testResources, che copia tutti i file di resources di test nella directory di output di test</li>
<li>test-compile &#8211; compiler:testCompile, che compila le classi di test</li>
<li>test &#8211; surfire:test, esegue le classi di test terminando il processo in caso di fallimento</li>
<li>package &#8211; jar:jar, crea il jar di distribuzione nella directory di output</li>
</ul>
<p align="justify" style="margin-top: 18px;">Pertanto avremmo avuto lo stesso risultato lanciando:</p>
<pre>
mvn resources:resources \
        compiler:compile \
        resources:testResources \
        compiler:testCompile \
        surefire:test \
        jar:jar
</pre>
<p align="justify">Maven gestisce le plugin e le dipendenze di un progetto tramite i repository. Esistono due tipi di repository:</p>
<ul>
<li><b>locale</b> &#8211; di default in ~/.m2/repository e contiene tutte le plugin e i pacchetti delle dipendenze dei progetti scaricati in locale</li>
<li><b>remoto</b> &#8211; quello di default &egrave; http://repo1.maven.org/maven2 e permette il download di plugin e dipendenze esterne</li>
</ul>
<p align="justify" style="margin-top: 18px;">Ogni dipendenza esterna &egrave; raggiungibile sul repository tramite il percorso:</p>
<pre>
/&lt;groupId&gt;/&lt;artifactId&gt;/&lt;version&gt;/&lt;artifactId&gt;-&lt;version&gt;.&lt;packaging&gt;
</pre>
<p align="justify">Eseguendo per esempio la fase <b>install</b> si potr&agrave; vedere il proprio deliverable nel repository locale.<br/>Nel pom.xml visto precedentemente la dipendenza con JUnit viene risolta scaricando il pom di rilascio all&#8217;indirizzo:</p>
<pre>

http://repo1.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.pom
</pre>
<p align="justify">Maven controlla eventuali dipendenze necessarie per JUnit descritte nel pom (effettuandone il download), quindi scarica l&#8217;archivio:</p>
<pre>

http://repo1.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.jar
</pre>
<p align="justify">Per ogni dipendenza &egrave; possibile definire uno <b>scope</b> tra quelli disponibili:</p>
<ul>
<li><b>compile</b> (default) &#8211; le dipendenze sono disponibili in tutti i classpath del progetto</li>
<li><b>provided</b> &#8211; &egrave; simile a compile, ma prevede che a runtime le dipendenze siano rese disponibili dall&#8217;ambiente di esecuzione (per es. le JavaEE APIs per un&#8217;applicazione enterprise)</li>
<li><b>runtime</b> &#8211; le dipendenze sono richieste solo in esecuzione</li>
<li><b>test</b> &#8211; le dipendenze sono richieste solo per la compilazione e l&#8217;esecuzione dei test</li>
<li><b>system</b> &#8211; la dipendenza non viene recuperata tramite repository, ma ne viene esplicitamente dichiarata la posizione locale</li>
</ul>
<p align="justify" style="margin-top: 18px">Infine la generazione della documentazione e dei reports avviene nella fase <b>site</b>:</p>
<pre>mvn site</pre>
<p align"justify">L&#8217;output &egrave; disponibile nella directory <b>${basedir}/target/site</b>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Maven+al+primo+utilizzo+http://i5afg.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=62&amp;submitHeadline=Maven+al+primo+utilizzo" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=62&amp;submitHeadline=Maven+al+primo+utilizzo" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=62&amp;title=Maven+al+primo+utilizzo" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=62&amp;title=Maven+al+primo+utilizzo" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=62&amp;title=Maven+al+primo+utilizzo" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=62&amp;title=Maven+al+primo+utilizzo" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Maven+al+primo+utilizzo&amp;link=http://blog.marcoccia.net/?p=62" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Maven+al+primo+utilizzo&amp;link=http://blog.marcoccia.net/?p=62" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=62&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ridimensionare un disco VMWare</title>
		<link>http://blog.marcoccia.net/?p=44</link>
		<comments>http://blog.marcoccia.net/?p=44#comments</comments>
		<pubDate>Wed, 21 Jan 2009 16:47:45 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=44</guid>
		<description><![CDATA[VMWare vCenter Converter &#232; lo strumento che, tra le altre cose, permette di ridimensionare un disco virtuale. Purtroppo non &#232; disponibile una versione per linux e, inoltre, il processo di ridimensionamento sembra essere abbastanza lento oltre a richiedere nuovamente l&#8217;installazione dei VMWare Tools. Questa &#232; la procedura manuale: spegnere la virtual machine rimuovere eventuali snapshots [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><a href="http://www.vmware.com/products/converter/">VMWare vCenter Converter</a> &egrave; lo strumento che, tra le altre cose, permette di ridimensionare un disco virtuale. Purtroppo non &egrave; disponibile una versione per linux e, inoltre, il processo di ridimensionamento sembra essere abbastanza lento oltre a richiedere nuovamente l&#8217;installazione dei VMWare Tools.</p>
<p aling="justify">Questa &egrave; la procedura manuale:</br></p>
<ul>
<li>spegnere la virtual machine</li>
<li>rimuovere eventuali snapshots</li>
<li>lanciare<br/><br />
<code>vmware-vdiskmanager -x {size} {disk}</code><br />
<br/>dove<br/><strong>{size}</strong> &egrave; la nuova dimensione del disco (per es. 8GB) e<br/><strong>{disk}</strong> &egrave; il path completo del file .vmdk.
</li>
</ul>
<p><br/></p>
<p align="justify">Questa procedura aumenta il disco ma non la partizione. Se il disco &egrave; partizionato, &egrave; necessario un ulteriore utility per ridimensionare la partizione (per es. <a href="http://www.symantec.com/norton/partitionmagic">Partition Magic</a>, <a href="http://gparted.sourceforge.net/livecd.php">GParted Live CD</a>, <a href="http://www.partition-manager.com/">Paragon Partition Manager</a>, etc). L&#8217;utilizzo dell&#8217;utility DiskPart di Windows &egrave; possibile solo con partizione di dati e non partizioni di boot o di sistema.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Ridimensionare+un+disco+VMWare+http://yimyi.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=44&amp;submitHeadline=Ridimensionare+un+disco+VMWare" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=44&amp;submitHeadline=Ridimensionare+un+disco+VMWare" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=44&amp;title=Ridimensionare+un+disco+VMWare" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=44&amp;title=Ridimensionare+un+disco+VMWare" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=44&amp;title=Ridimensionare+un+disco+VMWare" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=44&amp;title=Ridimensionare+un+disco+VMWare" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Ridimensionare+un+disco+VMWare&amp;link=http://blog.marcoccia.net/?p=44" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Ridimensionare+un+disco+VMWare&amp;link=http://blog.marcoccia.net/?p=44" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=44&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tracciare le chiamate concorrenti sul log di JBoss</title>
		<link>http://blog.marcoccia.net/?p=35</link>
		<comments>http://blog.marcoccia.net/?p=35#comments</comments>
		<pubDate>Tue, 02 Dec 2008 10:53:52 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[jboss]]></category>
		<category><![CDATA[logging]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=35&amp;langswitch_lang=it</guid>
		<description><![CDATA[Quando non si ha a che fare con degli unit test, analizzare il log di un&#8217;applicazione enterprise diventa un&#8217;impresa ardua per via dei processi concorrenti. Fortunatamente quando si utilizza Log4J &#232; possibile personalizzare il pattern di layout del log ed aggiungere alcune utilissime stampe. Su JBoss il file log4j.xml di configurazione sta sotto jboss-VERSION/server/SERVER_INSTANCE_NAME/conf e [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Quando non si ha a che fare con degli unit test, analizzare il log di un&#8217;applicazione enterprise diventa un&#8217;impresa ardua per via dei processi concorrenti.</p>
<p align="justify">Fortunatamente quando si utilizza <a href="http://logging.apache.org/log4j">Log4J</a> &egrave; possibile personalizzare il pattern di layout del log ed aggiungere alcune utilissime stampe.</p>
<p align="justify">Su JBoss il file <strong>log4j.xml</strong> di configurazione sta sotto <strong>jboss-VERSION/server/SERVER_INSTANCE_NAME/conf</strong> e di default presenta il seguente pattern di layout:</p>
<p><code>%d %-5p [%c] %m%n</code></p>
<p align="justify">
<strong>d</strong> &#8211; la data, che per default usa il formato ISO8601 (dd-MMM-yyyy HH:mm:ss,SSS)<br/><br />
<strong>p</strong> &#8211; il livello (DEBUG, WARN, ecc.)<br/><br />
<strong>c</strong> &#8211; la categoria (nome completo della classe)<br/><br />
<strong>m</strong> &#8211; il messaggio<br/><br />
<strong>n</strong> &#8211; il ritorno a capo nel formato del sistema operativo su cui viene eseguito
</p>
<p align="justify"><em>Nota: il %-5 davanti a p indica che la stampa deve essere giustificata a 5 caratteri (serve ad allineare il contenuto di m)</em></p>
<p align="justify">Il layout &#8220;<em>full</em>&#8221; &egrave; invece commentato ed &egrave; fatto cos&igrave;:</p>
<p><code>%d %-5r %-5p [%c] (%t:%x) %m%n</code></p>
<p align="justify">
<strong>r</strong> &#8211; i msec trascorsi per la costruzione del layout di questa stampa<br/><br />
<strong>t</strong> &#8211; il nome del thread!<br/><br />
<strong>x</strong> &#8211; l&#8217;NDC (nested diagnostic context) associato al thread
</p>
<p align="justify">E&#8217; possibile passare alla visualizzazione estesa anche con JBoss in esecuzione (N.B. se &#8220;Append&#8221; e&#8217; a false il file di log viene ricreato!).</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss+http://yytg6.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=35&amp;submitHeadline=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=35&amp;submitHeadline=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=35&amp;title=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=35&amp;title=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=35&amp;title=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=35&amp;title=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss&amp;link=http://blog.marcoccia.net/?p=35" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Tracciare+le+chiamate+concorrenti+sul+log+di+JBoss&amp;link=http://blog.marcoccia.net/?p=35" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=35&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss scheduling con data settata dinamicamente</title>
		<link>http://blog.marcoccia.net/?p=34</link>
		<comments>http://blog.marcoccia.net/?p=34#comments</comments>
		<pubDate>Wed, 27 Feb 2008 14:52:28 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[jboss]]></category>
		<category><![CDATA[scheduling]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=34&amp;langswitch_lang=it</guid>
		<description><![CDATA[Se si desidera avviare dei jobs in istanti di tempo settati dinamicamente e&#8217; necessario sfruttare quanto di buono e&#8217; offerto dai componenti JMX di JBoss. Si parte con la creazione di un TimerMBean e per farlo si hanno tre possibilità: Si aggiunge la seguente riga al file jboss-service.xml nella directory conf dell&#8217;istanza del server: &#60;mbean [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Se si desidera avviare dei jobs in istanti di tempo settati dinamicamente e&#8217; necessario sfruttare quanto di buono e&#8217; offerto dai componenti JMX di JBoss.<br/><br />
Si parte con la creazione di un TimerMBean e per farlo si hanno tre possibilità:</p>
<ul>
<li>Si aggiunge la seguente riga al file <em>jboss-service.xml</em> nella directory <em>conf</em> dell&#8217;istanza del server:<br/><br/>
<pre>
&lt;mbean code="javax.management.timer.Timer" name="MarcocciaNet:service=myTimer"/&gt;
</pre>
</li>
<li>Si crea come servizio di un&#8217;applicazione di deploy configurando un file di service (per es. mytimer-service.xml) con il seguente contenuto:<br/><br/>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;server&gt;
   &lt;mbean code="javax.management.timer.Timer" name="MarcocciaNet:service=myTimer"/&gt;
&lt;/server&gt;
</pre>
<p>lo si mette nella root dell&#8217;ear e lo si richiama nel jboss-app.xml:<br/></p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD J2EE Application 1.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd"&gt;
&lt;jboss-app&gt;
    &lt;module&gt;
        &lt;service&gt;mytimer-service.xml&lt;/service&gt;
    &lt;/module&gt;
    [...]
&lt;/jboss-app&gt;
</pre>
</li>
<li>Si crea il servizio programmaticamente:<br/><br/>
<pre>
MBeanServer server = MBeanServerFactory.createMBeanServer();
ObjectInstance timer = server.createMBean(
      "javax.management.timer.Timer",
      new ObjectName( "MarcocciaNet", "service", "myTimer" ));
server.invoke(
      timer.getObjectName(),
      "start",
      new Object[] {},
      new String[] {});
</pre>
</li>
</ul>
<p align="justify">La prima soluzione la trovo un pochino invasiva: di norma non è saggio mettere le mani in un file in cui ci sono le configurazioni di tutti gli altri servizi standard di un application server. La terza soluzione richiede attenzione soprattutto nel momento in cui è necessario decidere dove piazzare la parte di codice, che va fatto prima della registrazione listener e delle eventuali notifiche.<br/><br />
La seconda soluzione è la migliore: il servizio è deploiato con l&#8217;intera applicazione e prima di ogni altro eventuale componente enterprise. Inoltre all&#8217;atto pratico questa soluzione si dimostrerà senza dubbio più versatile.</p>
<p align="justify">Una volta istanziato il TimerMBean è necessario agganciare uno o più listener e per farlo è necessario invocare il metodo <em>addNotificationListener</em> sull&#8217;istanza dell&#8217;<em>MBeanServer</em>. Di seguito un esempio con listener anonimo:</p>
<pre>
NotificationListener notificationListener = new NotificationListener() {
    public void handleNotification(Notification notification, Object handback) {
        logWriter.debug("Notification received!");
        logWriter.debug("UserObject: " + notification.getUserData());
    }
};
try {
    ObjectName objectName = new ObjectName("MarcocciaNet:service=myTimer");
    // find the local MBeanServer
    MBeanServer server = MBeanServerLocator.locateJBoss();
    server.addNotificationListener(objectName, notificationListener, null, null);
} catch (MalformedObjectNameException ex) {
    // manage
} catch (InstanceNotFoundException ex) {
    // manage
}
</pre>
<p align="justify">Il terzo parametro di <em>addNotificationListener</em> permette al listener di filtrare le notifiche tramite un oggetto NotificationFilter, mentre il quarto parametro è un oggetto di &#8220;handback&#8221;, ovvero quello ritornato al listener all&#8217;arrivo di una notifica.<br/><br />
Adesso che abbiamo anche il listener è possibile inviare le notifiche:</p>
<pre>
public void sendNotification(Object userData, Date date){
	try {
		InitialContext initialContext = new InitialContext();
		RMIAdaptor adaptor = (RMIAdaptor) initialContext.lookup("jmx/invoker/RMIAdaptor");
		ObjectName objectName = new ObjectName("MarcocciaNet:service=myTimer");
		if (adaptor != null &#038;&#038; adaptor.isRegistered(objectName)) {
		    adaptor.invoke(
				objectName,
				"addNotification",
		        new Object[]{
		                "oneShotNotification",
		                "One shot notification sample",
		                userData,
		                date},
		        new String[]{
		                String.class.getName(),
		                String.class.getName(),
		                Object.class.getName(),
		                Date.class.getName()});
		} else {
		    logWriter.debug("---- JNDI Name error: " + adaptor + " ----");
			// manage
		}
	} catch (NamingException ex) {
		// manage
	} catch (MalformedObjectNameException ex) {
		// manage
	} catch (IOException ex) {
		// manage
	} catch (InstanceNotFoundException ex) {
		// manage
	} catch (MBeanException ex) {
		// manage
	} catch (ReflectionException ex) {
		// manage
	}
}
</pre>
<p align="justify">Una volta messo insieme i pezzi è possibile centralizzare il tutto (registrazione/rimozione listener ed invio notifiche) creando un servizio (sar) ad hoc ed esponendo i metodi di <a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/timer/Timer.html">javax.management.timer.Timer</a> che non sono esposti dal <a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/timer/TimerMBean.html">TimerMBean</a>:</p>
<pre>
public interface MyTimerMBean extends TimerMBean {

    public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback);

    public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException;

}
</pre>
<pre>
public class MyTimer extends Timer implements MyTimerMBean {

    public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback){
		super.addNotificationListener(listener, filter, handback)
    }

    public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException {
		super.removeNotificationListener(listener);
    }

}
</pre>
<p align="justify">Quest&#8217;ultima configurazione apre un&#8217;ampia gamma di scenari: è possibile gestire di un pool di listener, potento fare override di start() e&#8217; possibile registrare un listener a startup e così via&#8230;</p>
<p align="justify">Alla prossima</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=JBoss+scheduling+con+data+settata+dinamicamente+http://39zg3.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=34&amp;submitHeadline=JBoss+scheduling+con+data+settata+dinamicamente" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=34&amp;submitHeadline=JBoss+scheduling+con+data+settata+dinamicamente" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=34&amp;title=JBoss+scheduling+con+data+settata+dinamicamente" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=34&amp;title=JBoss+scheduling+con+data+settata+dinamicamente" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=34&amp;title=JBoss+scheduling+con+data+settata+dinamicamente" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=34&amp;title=JBoss+scheduling+con+data+settata+dinamicamente" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=JBoss+scheduling+con+data+settata+dinamicamente&amp;link=http://blog.marcoccia.net/?p=34" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=JBoss+scheduling+con+data+settata+dinamicamente&amp;link=http://blog.marcoccia.net/?p=34" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=34&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Loggare TRACE su JBoss</title>
		<link>http://blog.marcoccia.net/?p=33</link>
		<comments>http://blog.marcoccia.net/?p=33#comments</comments>
		<pubDate>Thu, 17 Jan 2008 10:12:22 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[jboss]]></category>
		<category><![CDATA[logging]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=33</guid>
		<description><![CDATA[Per il logging JBoss estende Log4J e aggiunge un livello custom TRACE, che si pone al di sotto di DEBUG: FATAL ERROR WARN INFO DEBUG TRACE Fin quando nella propria applicazione non si utilizza il livello TRACE tutto fila liscio. Il problema nasce nel momento in cui si vogliono visualizzare dei log di JBoss che [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Per il logging JBoss estende <a href="http://logging.apache.org">Log4J</a> e aggiunge un livello custom <b>TRACE</b>, che si pone al di sotto di DEBUG:<br/></p>
<ul>
<li>FATAL</li>
<li>ERROR</li>
<li>WARN</li>
<li>INFO</li>
<li>DEBUG</li>
<li>TRACE</li>
</ul>
<p><br/>
</p>
<p align="justify">Fin quando nella propria applicazione non si utilizza il livello TRACE tutto fila liscio. Il problema nasce nel momento in cui si vogliono visualizzare dei log di JBoss che sono a TRACE (i messaggi SOAP che arrivano al webservice sono uno dei tanti esempi). Infatti, essendo TRACE un livello custom, per loggare &egrave; necessaria una configurazione diversa nel file <b>conf/log4j.xml</b>:</p>
<pre>
&lt;category name="{package}"&gt;
     &lt;priority value="TRACE" class="org.jboss.logging.XLevel"/&gt;
&lt;/category&gt;
</pre>
<p align="justify">Il valore <b>{package}</b> va sostituito con il package della classe che logga a TRACE (org.jboss.ws.core.MessageTrace nell&#8217;esempio dei webservice).<br/><br />
E&#8217; necessario inoltre che l&#8217;appender non abbia definito il tag <b>Threshold</b>, commentando l&#8217;eventuale riga presente:</p>
<pre>
&lt;appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"&gt;
      &lt;errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/&gt;
      &lt;param name="Target" value="System.out"/&gt;
      &lt;!--&lt;param name="Threshold" value="INFO"/&gt;--&gt;

      &lt;layout class="org.apache.log4j.PatternLayout"&gt;
         &lt;!-- The default pattern: Date Priority [Category] Message\n --&gt;
         &lt;param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/&gt;
      &lt;/layout&gt;
&lt;/appender&gt;
</pre>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=Loggare+TRACE+su+JBoss+http://mras4.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=33&amp;submitHeadline=Loggare+TRACE+su+JBoss" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=33&amp;submitHeadline=Loggare+TRACE+su+JBoss" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=33&amp;title=Loggare+TRACE+su+JBoss" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=33&amp;title=Loggare+TRACE+su+JBoss" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=33&amp;title=Loggare+TRACE+su+JBoss" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=33&amp;title=Loggare+TRACE+su+JBoss" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Loggare+TRACE+su+JBoss&amp;link=http://blog.marcoccia.net/?p=33" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=Loggare+TRACE+su+JBoss&amp;link=http://blog.marcoccia.net/?p=33" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=33&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La carriera nell&#8217;IT</title>
		<link>http://blog.marcoccia.net/?p=32</link>
		<comments>http://blog.marcoccia.net/?p=32#comments</comments>
		<pubDate>Fri, 11 Jan 2008 11:20:37 +0000</pubDate>
		<dc:creator>Pasquale</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://blog.marcoccia.net/?p=32&amp;langswitch_lang=it</guid>
		<description><![CDATA[E&#8217; la prima volta che annoto qualcosa di non tecnico e tuttora sono abbastanza combattuto se farlo o meno. Non &#232; comunque mia intenzione abbandonare la linea guida che mi ero promesso di dare a questo blog, per&#242; oggi ho letto un articolo davvero interessante su Punto-Informatico in riguardo alla carriera IT e cos&#236; mi [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">E&#8217; la prima volta che annoto qualcosa di non tecnico e tuttora sono abbastanza combattuto se farlo o meno. Non &egrave; comunque mia intenzione abbandonare la linea guida che mi ero promesso di dare a questo blog, per&ograve; oggi ho letto un <a href="http://punto-informatico.it/p.aspx?id=2156595">articolo</a> davvero interessante su <a href="http://punto-informatico.it">Punto-Informatico</a> in riguardo alla carriera IT e cos&igrave; mi ritrovo a scrivere di cose che condivido e altre no.<br/></p>
<p align="justify"><em>&#8220;&#8230; l&#8217;attenzione smodata alla propria carriera si manifesta in persone dotate, assolutamente in grado di affermarsi a partire dai propri talenti. È vero, ma questa verità non sconferma la tesi che qui sosteniamo. Il fatto è che con i propri talenti è difficile convivere. Impostare su questi la propria affermazione è oneroso. I talenti esigono lavoro, vanno coltivati, fatti fruttare. E poi vanno imposti in un contesto presumibilmente dominato da persone prive di talenti, che appunto costruiscono la propria affermazione sull&#8217;autoconvinzione che i talenti non sono necessari per affermarsi. Chi è dotato di talenti troverà così comodo o rintanarsi nel suo cantuccio, rinunciando ad entrare in competizione, alimentando il proprio equilibrio attraverso la lamentela: &#8220;sono qui nell&#8217;angolo perché nessuno capisce il mio valore&#8221;. Oppure troverà comodo accettare le regole del facile gioco dell&#8217;atteggiamento arrogante: la moneta cattiva scaccia quella buona, i talenti resteranno nel cassetto, e la gara si giocherà attorno alla capacità di sgomitare e di mettere in cattiva luce l&#8217;altro.&#8221;</em></p>
<p align="justify"><b>&#8220;Chi è dotato di talenti troverà così comodo o rintanarsi nel suo cantuccio, rinunciando ad entrare in competizione&#8221;</b>: il dotato di talenti che si rintana in un cantuccio sar&agrave; anche dotato di talenti ma la sua personalit&agrave; non gli permette di farli valere. Chi non accetta la competizione o comunque non ha voglia di mettersi in gioco non ha obiettivi e chi non ha obiettivi non pu&ograve; aspirare a fare carriera. <b>&#8220;Oppure troverà comodo accettare le regole del facile gioco dell&#8217;atteggiamento arrogante&#8221;</b>: è questa l&#8217;arma che utilizza chi non vive di sana competizione e si sente gi&agrave; in una posizione di svantaggio.</p>
<p><br/></p>
<p align="justify"><em><b>&#8220;Un buon ambiente di lavoro nel quale, oltre ad uno stipendio adeguato, ci sia la possibilità di imparare continuamente cose nuove e di essere valutati in modo chiaro. Troppo spesso si predica che le persone, nell&#8217;economia della conoscenza, sono la risorsa più importante e poi a loro si dedica un decimo del tempo riservato alla valutazione di una nuova tecnologia o di un nuovo segmento di mercato&#8221;.</b></em></p>
<p align="right"><em><b>Lauro Venturi<br/>amministratore delegato di Siaer</b></em></p>
<p><br/></p>
<p align="justify"><em><b>&#8220;In ogni grande azienda, dare visibilità al proprio lavoro è fondamentale. Non importa se siete incompetenti, se siete dei super professionisti, se siete gli esperti mondiali di una materia, se siete manager, se siete gli ultimi della catena gerarchica. Se non date visibilità al vostro lavoro, siete FOTTUTI!&#8221;</b></em></p>
<p align="justify">Sante parole&#8230;</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=La+carriera+nell%E2%80%99IT+http://hrp25.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro3.png" alt="Post to Twitter" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=32&amp;submitHeadline=La+carriera+nell%E2%80%99IT" title="Post to Yahoo Buzz"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-buzz-micro3.png" alt="Post to Yahoo Buzz" /></a> <a class="tt" href="http://buzz.yahoo.com/submit?submitUrl=http://blog.marcoccia.net/?p=32&amp;submitHeadline=La+carriera+nell%E2%80%99IT" title="Post to Yahoo Buzz">Buzz This Post</a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=32&amp;title=La+carriera+nell%E2%80%99IT" title="Post to Delicious"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro3.png" alt="Post to Delicious" /></a> <a class="tt" href="http://delicious.com/post?url=http://blog.marcoccia.net/?p=32&amp;title=La+carriera+nell%E2%80%99IT" title="Post to Delicious">Delicious</a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=32&amp;title=La+carriera+nell%E2%80%99IT" title="Post to Digg"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-digg-micro3.png" alt="Post to Digg" /></a> <a class="tt" href="http://digg.com/submit?url=http://blog.marcoccia.net/?p=32&amp;title=La+carriera+nell%E2%80%99IT" title="Post to Digg">Digg This Post</a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=La+carriera+nell%E2%80%99IT&amp;link=http://blog.marcoccia.net/?p=32" title="Post to Ping.fm"><img class="nothumb" src="http://blog.marcoccia.net/wp-content/plugins/tweet-this/icons/tt-ping-micro3.png" alt="Post to Ping.fm" /></a> <a class="tt" href="http://ping.fm/ref/?method=microblog&amp;title=La+carriera+nell%E2%80%99IT&amp;link=http://blog.marcoccia.net/?p=32" title="Post to Ping.fm">Ping This Post</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.marcoccia.net/?feed=rss2&amp;p=32&amp;langswitch_lang=it</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
