<?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/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>JugSalerno</title>
	<atom:link href="http://jugsalerno.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jugsalerno.wordpress.com</link>
	<description>Java User Group Salerno</description>
	<lastBuildDate>Tue, 25 Aug 2009 16:03:18 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='jugsalerno.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/f4d03fd27980105e672add00e2686a50?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>JugSalerno</title>
		<link>http://jugsalerno.wordpress.com</link>
	</image>
			<item>
		<title>Podcast del primo Scala Meeting a Lugano e qualche risorsa per iniziare</title>
		<link>http://jugsalerno.wordpress.com/2009/08/19/video-del-primo-scala-meeting-a-lugano-e-qualche-risorsa-per-iniziare/</link>
		<comments>http://jugsalerno.wordpress.com/2009/08/19/video-del-primo-scala-meeting-a-lugano-e-qualche-risorsa-per-iniziare/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 11:54:40 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=154</guid>
		<description><![CDATA[Sulla mailing list del JUG Lugano è stato di recente postato il link del podcast del primo meeting dedicato a Scala.
Se siete interessati a questo nuovo linguaggio di programmazione di cui si parla molto nell&#8217;ultimo periodo ve ne consiglio vivamente la visione  
Se non sapete cosa sia Scala e volete approfondire l&#8217;argomento vi consiglio [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=154&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sulla mailing list del JUG Lugano è stato di recente postato il link del <a title="Podcast del primo meeting su Scala" href="http://vimeo.com/6159765" target="_blank">podcast del primo meeting dedicato a Scala</a>.</p>
<p>Se siete interessati a questo nuovo linguaggio di programmazione di cui si parla molto nell&#8217;ultimo periodo ve ne consiglio vivamente la visione <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Se non sapete cosa sia Scala e volete approfondire l&#8217;argomento vi consiglio due link in italiano:</p>
<p><span id="more-154"></span></p>
<ul>
<li><a title="Libro su Scala" href="http://scala.ugolandini.com/page0/book.html" target="_blank">http://scala.ugolandini.com/page0/book.html</a>: Dove potete trovare un libro gratuito ma in corso di lavorazione scritto da Ugo Landini.</li>
<li><a title="Presentazione su Scala JavaDay 2008 - Roma" href="http://roma.javaday.it/javaday2009/presentazioni/DellAversana-Scala.pdf" target="_blank">http://roma.javaday.it/javaday2009/presentazioni/DellAversana-Scala.pdf</a>: La presentazione tenuta la JavaDay 2009 a Roma  e quda Raffaele Dell&#8217;Aversana</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/154/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/154/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/154/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=154&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2009/08/19/video-del-primo-scala-meeting-a-lugano-e-qualche-risorsa-per-iniziare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>
	</item>
		<item>
		<title>JBoss 5 in cluster e con sessione replicata su uno stesso PC</title>
		<link>http://jugsalerno.wordpress.com/2009/08/19/jboss-5-in-cluster-e-con-sessione-replicata-su-uno-stesso-pc/</link>
		<comments>http://jugsalerno.wordpress.com/2009/08/19/jboss-5-in-cluster-e-con-sessione-replicata-su-uno-stesso-pc/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 11:41:57 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[application server]]></category>
		<category><![CDATA[http session replication]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jboss]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=149</guid>
		<description><![CDATA[Di recente mi è capitato di dover sviluppare un applicazione web utilizzabile in cluster su JBoss 5 e con la sessione http replicata.

Il primo problema con cui ci troviamo a combattere è far partire 2 istanze di JBoss sullo stesso computer. Per risolvere ciò è necessario creare delle copie identiche della cartella [jboss-X]/server/all e chiamarle [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=149&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Di recente mi è capitato di dover sviluppare un applicazione web utilizzabile in cluster su JBoss 5 e con la sessione http replicata.</p>
<p><span id="more-149"></span></p>
<p>Il primo problema con cui ci troviamo a combattere è far partire 2 istanze di JBoss sullo stesso computer. Per risolvere ciò è necessario creare delle copie identiche della cartella [jboss-X]/server/all e chiamarle rispettivamente node1, node2.<br />
Queste cartelle saranno tutte identiche e rappresentaranno il &#8220;workspace&#8221; della nodo.<br />
Per eseguire il primo nodo basta scrivere:</p>
<p style="padding-left:30px;"><strong><span style="color:#339966;">&gt; sh run.sh -c node1</span></strong></p>
<p>Dove la parola che segue &#8220;-c&#8221; indica la configurazione da utilizzare per l&#8217;avvio.<br />
Ora il primo nodo partirà sulla porta 8080.</p>
<p>Se andiamo ad avviare il secondo nodo cambiando solo node1 con node2 non funzionerà perchè andrà ad occupare la stessa porta. Per evitare ciò andiamo ad aggiungere una opzione al comando che diventerà:</p>
<p style="padding-left:30px;"><strong><span style="color:#339966;">&gt; sh run.sh -c node2  -Djboss.service.binding.set=ports-01 -Djboss.messaging.ServerPeerID=1</span></strong></p>
<p>l&#8217;opzione della virtual machine jboss.service.binding.set indica che questa configurazione dovrà partire sulla porta 8180.</p>
<p>Ora possiamo accedere ai due nodi agli indirizzi:</p>
<p><a href="http://localhost:8080">http://localhost:8080</a><br />
<a href="http://localhost:8180"> http://localhost:8180</a></p>
<p>Ma come possiamo sapere se tutto è andato a buon fine? Per fare questo ho creato 2 semplici jsp:</p>
<p><strong><em>set.jsp:</em></strong><br />
<code><br />
<em>id di sessione: &lt;%=request.getSession().getId()%&gt;<br />
&lt;br /&gt;<br />
&lt;%request.getSession().setAttribute("test", "test ok");%&gt;</em><br />
</code></p>
<p><strong>get.jsp:</strong></p>
<p><em><code> id di sessione: &lt;%=request.getSession().getId()%&gt;<br />
&lt;br /&gt;</code><br />
</em><code><em> Parametro: &lt;%=request.getSession().getAttribute("test").toString()%&gt;</em></code></p>
<p>E nel web.xml subito dopo il tag display-name o comunque all&#8217;interno del tag web-app inseriamo:</p>
<p>&lt;distributable /&gt;</p>
<p>Questo dirà al nostro application server che questa applicazione è distribuita.</p>
<p>Entrambe le pagine jsp create in precedenza stampano a video l&#8217;id della sessione.<br />
La pagina set.jsp imposta un valore nella sessione, mentre la pagina get.jsp lo legge, quindi se accediamo agli indirizzi:</p>
<p>http://localhost:8080/[nome_webapp]/set.jsp<br />
http://localhost:8180/[nome_webapp]/get.jsp</p>
<p>Verificheremo che l&#8217;id della sessione siano identici e che in get.jsp venga stampato il messaggio: &#8220;tutto ok!&#8221;.</p>
<p>Se il test è andato bene vuol dire che la sessione è stata replicata con successo.</p>
<p>Per il momento questo è tutto. Se avete bisogno di aiuti, chiarimenti e simili commentate pure.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=149&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2009/08/19/jboss-5-in-cluster-e-con-sessione-replicata-su-uno-stesso-pc/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>
	</item>
		<item>
		<title>Domani Jug Roma Meeting</title>
		<link>http://jugsalerno.wordpress.com/2009/05/04/domani-jug-roma-meeting/</link>
		<comments>http://jugsalerno.wordpress.com/2009/05/04/domani-jug-roma-meeting/#comments</comments>
		<pubDate>Mon, 04 May 2009 22:49:33 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=147</guid>
		<description><![CDATA[Domani Davide Cerbo e Stefano Linguerri presso Asset Data in Roma terranno 2 talk sull&#8217;utilizzo di Javascript come linguaggio Object Oriented e sul framework Google Web Toolkit.
Primo Talk (18:00-19:00 ca)
OBJECT ORIENTED JAVASCRIPT CON PROTOTYPE
Javascript viene sempre consiederato un linguaggio di serie B in cui
è impossibile seguire le buone regole della programmazione ad oggetti.
Ma non è [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=147&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:left;">Domani Davide Cerbo e Stefano Linguerri presso Asset Data in Roma terranno 2 talk sull&#8217;utilizzo di Javascript come linguaggio Object Oriented e sul framework Google Web Toolkit.</p>
<h2>Primo Talk (18:00-19:00 ca)</h2>
<h3>OBJECT ORIENTED JAVASCRIPT CON PROTOTYPE</h3>
<p>Javascript viene sempre consiederato un linguaggio di serie B in cui<br />
è impossibile seguire le buone regole della programmazione ad oggetti.<br />
Ma non è così! In questa presentazione scopriremo come questo sia un<br />
linguaggio in continua evoluzione e come sia possibile sviluppare<br />
seguendo i paradigmi della programmazione ad oggetti. Scopriremo tool<br />
e librerie che ci permetteranno di sviluppare creando batterie di<br />
test, oggetti mock e inserire istruzioni di log nel nostro codice.<br />
Durante questa presentazione illustreremo anche la libreria Prototype<br />
che ci sarà di supporto durante gli esempi.</p>
<h2>Secondo Talk (19:00-20:00 ca)</h2>
<h3>YAGTWO: Yet Another GWT Overview</h3>
<p>La programmazione web sta facendo passi da gigante e oggi l’utente si<br />
aspetta che l’esperienza di utilizzo si avvicini sempre di più a<br />
quella a cui è abituato nei classici applicativi desktop.<br />
Il mondo degli sviluppatori ha risposto inventanto una nuova sigla:<br />
RIA, cioè Rich Internet Application.<br />
Google non è stata a guardare e ha fornito la sua risposta a questa<br />
esigenza donando alla community Google Web Toolkit.<br />
Questo nuovo framework permette di sviluppare in Java tutta<br />
l’interfaccia utente per poi ottenere un codice javascript che<br />
funzionerà su qualsiasi browser web senza l’installazione di plugin<br />
aggiuntivi.<br />
In questa presentazione vedremo:</p>
<ul>
<li>perchè sviluppare applicazioni RIA</li>
<li>perchè usare GWT</li>
<li>come GWT utilizza AJAX per comunicare con il server</li>
<li>le ottimizzazione che avremo utilizzando GWT</li>
<li>come uscire dal browser con Google Gear e Mozilla Prism</li>
<li>e non solo…</li>
</ul>
<p>Alla fine della presentazione sarà disponibile anche il codice<br />
sorgente degli esempi.</p>
<p>Per altre informazioni: http://www.jugevents.org/jugevents/event/15294</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=147&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2009/05/04/domani-jug-roma-meeting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>
	</item>
		<item>
		<title>Working Capital Camp: Enterprise Social Network</title>
		<link>http://jugsalerno.wordpress.com/2009/04/28/working-capital-camp-enterprise-social-network/</link>
		<comments>http://jugsalerno.wordpress.com/2009/04/28/working-capital-camp-enterprise-social-network/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 19:51:17 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[eventi]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=145</guid>
		<description><![CDATA[Domani parteciperò al Working Capital Camp di Catania e parlerò di:
Enterprise Social Network
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=145&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Domani parteciperò al Working Capital Camp di Catania e parlerò di:</p>
<p><a href="http://www.workingcapitalcamp.com/2009/04/davide-cerbo-enterprise-social-network/">Enterprise Social Network</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=145&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2009/04/28/working-capital-camp-enterprise-social-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>
	</item>
		<item>
		<title>Javaday 2009: The Hitchhiker&#8217;s Guide to testable code</title>
		<link>http://jugsalerno.wordpress.com/2009/01/30/javaday-2009-the-hitchhikers-guide-to-testable-code/</link>
		<comments>http://jugsalerno.wordpress.com/2009/01/30/javaday-2009-the-hitchhikers-guide-to-testable-code/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 11:31:00 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javaday]]></category>
		<category><![CDATA[roma]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=140</guid>
		<description><![CDATA[Ecco le slide della presentazione che ho tenuto a Javaday di Roma il 24 gennaio 2009!.
The Hitchhiker&#8217;s Guide to testable code
Se volete lasciare commenti fatelo qui.
Grazie  
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=140&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ecco le slide della presentazione che ho tenuto a Javaday di Roma il 24 gennaio 2009!.</p>
<p><a title="The Hitchickers Guite to testable code" href="http://jesty.it/javaday2009/slides.html" target="_blank">The Hitchhiker&#8217;s Guide to testable code</a></p>
<p>Se volete lasciare commenti fatelo qui.</p>
<p>Grazie <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=140&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2009/01/30/javaday-2009-the-hitchhikers-guide-to-testable-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>
	</item>
		<item>
		<title>La dura legge di Demetra</title>
		<link>http://jugsalerno.wordpress.com/2008/11/18/impariamo-a-rispettare-la-legge-di-demetra/</link>
		<comments>http://jugsalerno.wordpress.com/2008/11/18/impariamo-a-rispettare-la-legge-di-demetra/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 22:16:27 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[Pillole di OO]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[object oriented design]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=135</guid>
		<description><![CDATA[La legge di Demetra (Law of Demeter o LoD o Principle of Least Knowledge) è una regola alla base della programmazione ad oggetti che consiglia di far conoscere ad un dato oggetto il minor numero di informazioni riguardo la struttura o le proprietà degli altri oggetti.
Ad esempio la seguente classe viola questa regola:
class WordDocument {
private [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=135&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La <a href="http://en.wikipedia.org/wiki/Law_of_Demeter" target="_blank"><strong>legge di Demetra</strong></a> (Law of Demeter o LoD o Principle of Least Knowledge) è una regola alla base della programmazione ad oggetti che consiglia di far conoscere ad un dato oggetto il minor numero di informazioni riguardo la struttura o le proprietà degli altri oggetti.</p>
<p>Ad esempio la seguente classe viola questa regola:</p>
<p><em>class WordDocument {<br />
private String title;<br />
&#8230;<br />
WordDocument(HtmlDocument htmlDocument){<br />
this.title = htmlDocument.getTitle();<br />
}<br />
&#8230;<br />
}</em></p>
<p>Mentre il seguente esempio la rispetta:</p>
<p><span id="more-135"></span><br />
<em>class WordDocument {<br />
private String title;<br />
&#8230;<br />
WordDocument(String title){<br />
this.title = title;<br />
}<br />
&#8230;<br />
}</em></p>
<p>Perchè WordDocument deve conoscere HtmlDocument? Il vantaggio potrebbe essere quello di convertire facilmente un documento Word in uno Html, ma non è questo il caso perchè l&#8217;unica informazione che realmente serve è il titolo del documento. Gli svantaggi invece sono tanti:</p>
<ul>
<li>posso costruire un documento Word solo a partire da un documento html, qualcuno potrebbe suggerire l&#8217;inserimento di due costruttori nella classe, ma in tal caso assegnerei una responsabilità impropria a WordDocument, una soluzione potrebbe essere l&#8217;utilizzo del pattern Factory.</li>
<li> non è chiaro all&#8217;utilizzatore della mia classe di cosa veramente abbia bisogno un documento word per essere inizializzato.</li>
<li>la complessità nella creazione di test unitari in isolamento aumenta perchè abbiamo a che con un altro oggetto di cui potremmo non conoscere il comportamento e per avere un test in isolamento dovremmo ricorrere a oggetti mock, ammesso che HtmlDocument sia una interfaccia.</li>
<li>il livello di accoppiamento nel codice aumenta e tutti noi sappiamo che non è cosa buona: vero?</li>
</ul>
<p>Qualcuno potrebbe obiettare che questo esempio non è attendibile perchè troppo semplice. Ad esempio per la costruzione di un WordDocument potrei avere bisogno di altre informazioni:</p>
<p><em>class WordDocument {<br />
private String title;<br />
private String subtitle;<br />
private String authorName;<br />
private String authorSurname;<br />
private String description;<br />
private  int pageNumber;<br />
&#8230;<br />
WordDocument(String title, String subtitle, String authorName, String authorSurname String description, int pageNumber){<br />
this.title = title;<br />
this.subtitle = subtitle;<br />
this.authorName = authorName;<br />
this.authorSurname = authorSurame;<br />
this.description = description;<br />
this.pagenumber = pagenumber;<br />
}<br />
&#8230;<br />
}</em></p>
<p>E&#8217; facile notare che il costruttore è cresciuto non poco e utilizzare una istanza di HtmlDocument avrebbe semplificato notevolmente il codice.<br />
Una soluzione consigliata da Craig Larman nel libro &#8220;Applicare UML e pattern&#8221; è l&#8217;utilizzo delle &#8220;classi descrizione&#8221; che trai vari vantaggi hanno quello di ridurre informazioni ridondanti o ripetute, infatti il costruttore simile a quello di WordDocument potrebbe essere presente in HtmlDocument, quindi:</p>
<p>class DocumentInfo {<br />
private String title;<br />
private String subtitle;<br />
private String authorName;<br />
private String authorSurname;<br />
private String description;<br />
private  int pageNumber;<br />
&#8230;<br />
DocumentInfo(String title, String subtitle, String authorName, String authorSurname String description, int pageNumber){<br />
this.title = title;<br />
this.subtitle = subtitle;<br />
this.authorName = authorName;<br />
this.authorSurname = authorSurame;<br />
this.description = description;<br />
this.pagenumber = pagenumber;<br />
}<br />
&#8230;<br />
}</p>
<p style="text-align:left;">e WordDocument diventa:</p>
<p>class WordDocument {<br />
private DocumentInfo documentInfo;<br />
WordDocument(DocumentInfo documentInfo){<br />
this.documentInfo = documentInfo;<br />
}<br />
}</p>
<p>Ora sono quasi soddisfatto, ma la legge di Demetra è ancora violata dall&#8217;utilizzo di authorName e authorSurname per descrivere le informazioni relative all&#8217;autore del documento. Questo proprio non va perchè stiamo rappresentando con dei semplici attributi una classe concettuale, cioè la classe Author:</p>
<p>class DocumentInfo {<br />
&#8230;<br />
DocumentInfo(String title, String subtitle, Author author, String description, int pageNumber){<br />
this.title = title;<br />
this.subtitle = subtitle;<br />
this.author = author;<br />
this.description = description;<br />
this.pagenumber = pagenumber;<br />
}<br />
&#8230;<br />
}</p>
<p>In questo caso la creazione di una classe porta al rispetto della legge di Demetra perchè al documento non interessa conoscere il nome e cognome dell&#8217;autore ma l&#8217;entità autore. Questo avviene perchè s<em>e nel mondo reale non pensiamo a una determinata classe concettuale X come a un numero o a un testo, allora probabilmente X è una classe concettuale, non un attributo </em>(sempre grazie a Larman per questa linea guida).</p>
<p>E se ancora non avete capito bene la legge di Demetra pensate a questo:</p>
<p style="text-align:center;"><strong>&#8220;Se in un negozio comprate qualcosa e dovete pagare €20. Date al commesso €20 o gli date il portafogli e gli dite di prendere €20?&#8221;</strong></p>
<p style="text-align:left;">Bibliografia<strong>:</strong></p>
<ul>
<li><a href="http://misko.hevery.com/2008/11/11/clean-code-talks-dependency-injection/">Clean Code Talks &#8211; Dependency Injection</a> di Misko Havery</li>
<li><a href="http://www.craiglarman.com/wiki/index.php?title=Books_by_Craig_Larman">Applied UML and Patterns</a> di Craig Larman<strong><br />
</strong></li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/135/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/135/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/135/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=135&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2008/11/18/impariamo-a-rispettare-la-legge-di-demetra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>
	</item>
		<item>
		<title>Javascript: basta con l&#8217;alert per debuggare!</title>
		<link>http://jugsalerno.wordpress.com/2008/10/15/javascript-basta-con-lalert-per-debuggare/</link>
		<comments>http://jugsalerno.wordpress.com/2008/10/15/javascript-basta-con-lalert-per-debuggare/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 20:28:35 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[blackbird]]></category>
		<category><![CDATA[firebug]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=131</guid>
		<description><![CDATA[Uno dei problemi più comuni dello sviluppo con Javascript sono il logging ed il debugging.
Il primo di questi problemi lo possiamo risolvere con Blackbird, un simpatico script js ed un css che una volta inseriti nella nostra pagina web ci daranno la possibilità di visualizzare una accativante console dove inserire i nostri messaggi di log [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=131&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Uno dei problemi più comuni dello sviluppo con Javascript sono il logging ed il debugging.</p>
<p>Il primo di questi problemi lo possiamo risolvere con <a href="http://www.gscottolson.com/blackbirdjs/">Blackbird</a>, un simpatico script js ed un css che una volta inseriti nella nostra pagina web ci daranno la possibilità di visualizzare una accativante console dove inserire i nostri messaggi di log tramite i classici metodi log.debug(&#8230;), log.warn(&#8230;), per capirci proprio come se stessimo usando il nostro amato log4j <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Altro poblema molto comune è invece il debug. Qui non posso che consigliare uno dei migliori plugin per Firefox che la mente umana abbia mai partorito: <a href="http://getfirebug.com/">Firebug</a>.<br />
Oltre a permettere l&#8217;inserimento di breakpoint nel codice javascript tramite questo plugin è anche possibile ispezionare visivamente il codice di una pagina html, editare in tempo reale i CSS e molte altre funzionalità utilissime nello sviluppo di applicativi web.</p>
<p><em>(p.s.: Questo sito parla per lo più di programmazione Java, ma è anche vero che spesso ci troviamo a lavorare con Javascript e quindi, ogni tanto, mi sembra anche giusto parlarne)</em></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=131&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2008/10/15/javascript-basta-con-lalert-per-debuggare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>
	</item>
		<item>
		<title>Google Developer Day</title>
		<link>http://jugsalerno.wordpress.com/2008/10/13/google-developer-day/</link>
		<comments>http://jugsalerno.wordpress.com/2008/10/13/google-developer-day/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 13:30:59 +0000</pubDate>
		<dc:creator>jesty</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=124</guid>
		<description><![CDATA[Il 21 ottobre 2008 a Milano si svolgerà il

La partecipazione è totalmente gratuita. Il calendario sembra interessante, anche perchè oltre ad ascoltare si potrà anche mettere in pratica tramite dei laboratori.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=124&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Il 21 ottobre 2008 a Milano si svolgerà il</p>
<p style="text-align:center;"><a href="http://code.google.com/intl/it/events/developerday/2008/about.html"><img class="aligncenter" title="Google Developer Day" src="http://code.google.com/intl/it/events/developerday/2008/images/logo.gif" alt="" width="137" height="101" /></a></p>
<p>La partecipazione è totalmente gratuita. Il calendario sembra interessante, anche perchè oltre ad ascoltare si potrà anche mettere in pratica tramite dei laboratori.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/124/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=124&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2008/10/13/google-developer-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ad257770290a322b0656a4742eb93938?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jesty</media:title>
		</media:content>

		<media:content url="http://code.google.com/intl/it/events/developerday/2008/images/logo.gif" medium="image">
			<media:title type="html">Google Developer Day</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaScript Object Notation ovvero JSON</title>
		<link>http://jugsalerno.wordpress.com/2008/08/19/javascript-object-notation-ovvero-json/</link>
		<comments>http://jugsalerno.wordpress.com/2008/08/19/javascript-object-notation-ovvero-json/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 18:48:20 +0000</pubDate>
		<dc:creator>hal9k</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[json eval]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=115</guid>
		<description><![CDATA[JSON, è un formato di scambio dati che utilizza la notazione letterale fornita da JavaScript per rappresentare dati strutturati. È a tutti gli effetti un sottinsieme del linguaggio JavaScript. Ok, ma non esiste già il nostro simpaticissimo XML? Giusta osservazione, ma come vedremo JSON permette l&#8217;uso di dati che vengono interpretati direttamente come oggetti JavaScript [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=115&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>JSON, è un formato di scambio dati che utilizza la notazione letterale fornita da JavaScript per rappresentare dati strutturati. È a tutti gli effetti un sottinsieme del linguaggio JavaScript. Ok, ma non esiste già il nostro simpaticissimo XML? Giusta osservazione, ma come vedremo JSON permette l&#8217;uso di dati che vengono interpretati direttamente come oggetti JavaScript o come array.<br />
Quindi a differenza di XML, JSON fa uso di primitive ben supportate dai browser più comuni ce ne rendono estremamente efficiente la gestione.<br />
Tutto ciò risulta molto comodo in Ajax, dove lo spreco di banda ed il parsing delle response sono sempre cruciali.</p>
<p><span id="more-115"></span></p>
<p>Ovviamente JSON è completamente indipendente dal tipo di linguaggio di programmazione utilizzato. Inoltre è ampliamente supportato dalla maggior parte dei linguaggi di programmazione grazie alla disponibilità di numerose librerie.</p>
<p><strong>Tipi di dati e sintassi</strong></p>
<p>I dati che si possono rappresentare in JSON sono di tipo:</p>
<p><em>object</em>: ovvero una collezione di coppie chiave:valore separate da virgola e racchiusi all&#8217;interno di parentesi graffe. (ad es. { “cpu” : “AMD K10”, “ram” : “Kingston DDR3” } )</p>
<p><em>array</em>: sequenza ordinata di valori separati da virgola (ad esempio “email” : [ “pincopallino@pippo.it”, “pluto@pippo.it” ] )</p>
<p><em>value</em>: un singolo valore che può essere una stringa racchiusa tra virgolette, oppure un number, un object, un array o un boolean.</p>
<p><strong>Esempio</strong></p>
<p>Vediamo ora un esempio di testo in formato JSON:</p>
<pre>{“person”: {
	“personalData”: {
		“firstName”: ”Giuseppe”,
		“lastName” : ”Pace”,
		“email”    : ”giuseppe.paceATpronetics.it”,
		“phones”   : [ “123456789”, “123456789”, “089123456”]
		“age”	     : 26
       }
}</pre>
<p>Abbiamo un oggetto root &#8220;person&#8221; e un oggetto nodo &#8220;personalData&#8221;. Quest&#8217;ultimo a sua volta contiene (come da definizione di oggetto JSON) delle coppie chiave:valore. Notiamo che la chiave &#8220;phones&#8221; in realtà è un array, quindi una sequenza di valori.</p>
<p><strong>JSON in JavaScript</strong></p>
<p>Ora supponiamo di aver ricevuto dal server il testo dell&#8217;esempio precedente e supponiamo di volerlo “parsare” tramite JavaScript. Per fare questo basterà semplicemente usare la funzione JavaScript eval() come segue:</p>
<p>var myObject = eval(&#8216;(&#8216; + myJSONtext + &#8216;)&#8217;);</p>
<p>Se ad esempio volessimo recuperare il valore del campo “email” contenuto all&#8217;interno del testo basterà usare la sintassi myObject.person.personalData.email.<br />
Bisogna però stare attenti al fatto che eval() esegue qualsiasi codice JavaScript gli venga passato.Di conseguenza l&#8217;uso di questa funzione è indicato solamente quando sappiamo che la sorgente del messaggio è sicura. Inoltre non è detto che il messaggio JSON ricevuto sia valido.<br />
Per questo è meglio usare un <a href="http://www.json.org/json2.js">JSON parser</a> come segue:</p>
<p>var myObject = JSON.parse(myJSONtext, reviver);</p>
<p>dove il parametro opzionale reviver è una funzione che verrà eseguita per ogni coppia chiave:valore.<br />
Ogni valore sarà sostituito dal valore restituito dalla funzione reviver.<br />
Il JSON parser fornito da questa libreria accetta solo testi in formati JSON, quindi niente script maliziosi!</p>
<p>Bene dopo aver visto cos&#8217;è JSON e come può essere usato in JavaScript non resta che chiedersi quale formato di interscambio è preferibile usare nelle nostre applicazioni.<br />
Ovviamente dipende dal contesto e dai requisiti dell&#8217;applicazione stessa. Inoltre bisogna anche valutare quanto un certo formato piuttosto che un altro sia supportato dal linguaggio di programmazione usato.<br />
Di conseguenza è importante la disponibilità di librerie per il &#8216;marshalling&#8217; degli oggetti e &#8216;unmarshalling&#8217;.<br />
A questo proposito mi piacerebbe approfondire la cosa con i membri del JUG! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Peppe Pace.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jugsalerno.wordpress.com/115/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jugsalerno.wordpress.com/115/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/115/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=115&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2008/08/19/javascript-object-notation-ovvero-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7065da1bd43a9edaccdd7544bd808916?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hal9k</media:title>
		</media:content>
	</item>
		<item>
		<title>GC Tweaks</title>
		<link>http://jugsalerno.wordpress.com/2008/07/23/gc-tweaks/</link>
		<comments>http://jugsalerno.wordpress.com/2008/07/23/gc-tweaks/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 09:22:44 +0000</pubDate>
		<dc:creator>mspike</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jugsalerno.wordpress.com/?p=106</guid>
		<description><![CDATA[Ho letto sul sito della Sun un HowTo su come settare alcuni parametri
riguardanti la garbage collection in modo da renderla meno
&#8220;penalizzante&#8221; su sistemi che hanno vincoli stringenti in termini di
troughput o tempi di risposta. Provo a sintetizzare quel che mi è
parso di capire.

Non sono elencati tutti i parametri di &#8220;fine tuning&#8221; del
gc, nè tantomeno vengono [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=106&subd=jugsalerno&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ho letto sul sito della Sun un HowTo su come settare alcuni parametri<br />
riguardanti la garbage collection in modo da renderla meno<br />
&#8220;penalizzante&#8221; su sistemi che hanno vincoli stringenti in termini di<br />
troughput o tempi di risposta. Provo a sintetizzare quel che mi è<br />
parso di capire.</p>
<p><span id="more-106"></span></p>
<p>Non sono elencati tutti i parametri di &#8220;fine tuning&#8221; del<br />
gc, nè tantomeno vengono spiegati tutti i principi di funzionamento<br />
indicati nei documenti (che ho elencato in fondo a questo post) o i<br />
casi in cui è meglio optare per una soluzione piuttosto che un&#8217;altra.<br />
Ho seguito gli esempi presentati sul sito e mi sono occupato<br />
principalmente delle ottimizzazioni maggiorimente utili per<br />
applicazioni enterprise.</p>
<p>Se qualcuno ha avuto modo di sperimentare direttamente altre questioni<br />
collegate alla configurazioni del garbage collection, sono benvenute<br />
integrazioni (ho visto che nelle versioni più recenti di java esistono<br />
altre opzioni, alcune però utilizzabili solo su macchine Solaris in<br />
quanto vanno ad agire in modo strettamente correlato col sitema<br />
operativo &#8211; es. si può decidere di non trasferire alcune pagine di<br />
memoria su disco)</p>
<p>dalla jvm 1.3 in poi si possono usare 2 tipi di garbage collection</p>
<p>(a)- una è bloccante ma parallelizzabile (quindi su sistemi<br />
multicore/multicpu scala bene). tale tipologia è anche chiamata<br />
&#8220;throughput garbage collector&#8221;</p>
<p>(b)- una è composta di 4 fasi, 2 brevi e bloccanti e 2 più lunghe ma<br />
concorrenti&#8230; può essere utile per migliorare i tempi di risposta, ma<br />
non viene parallelizzato. anche noto come &#8220;concurrent garbage collector&#8221;</p>
<p>- per jre 1.4.2+ oltre ai collector &#8220;troughput&#8221; e &#8220;concurrent&#8221; esiste<br />
il gc &#8220;incremental&#8221; (detto anche &#8220;train&#8221;)</p>
<p>il ciclo di vita di un oggetto, dalla creazione alla garbage<br />
collection, passa attraverso 3 aree di memoria, su cui le policy di<br />
garbage collection sono diverse<br />
- eden<br />
- young (o survivor)<br />
- old</p>
<p>per gli oggetti che si trovano nello stato &#8220;old&#8221; viene adottata la<br />
policy (b), per gli altri la (a)</p>
<p>ci sono diversi parametri per stabilire quando un&#8217;oggetto passa da<br />
un&#8217;area di memoria all&#8217;altra e quanto l&#8217;intervento del gc deve essere<br />
aggressivo, intendendo con cioò sia quanta (poco) spazio sull&#8217;heap<br />
deve restare prima che il gc intervenga, quanto tempo debba essere<br />
trascorso dall&#8217;ultima operazione di gc e quanto spazio si debba<br />
effettivamente tentare di liberare.</p>
<p>benché la garbage collection resti un evento imprevedibile, a seconda<br />
del contesto applicativo si possono comunque regolare questi parametri<br />
al fine di avere interruzioni più brevi, menoi frequenti o comunque<br />
meno bloccanti per l&#8217;applicazione</p>
<p>le opzioni sono</p>
<p>-XX:+UseParNewGC (jre 1.4.1+) parallelizzazione della GC per &#8220;young&#8221;<br />
-ovvero la policy (a), può essere usato contemporaneamente alla policy<br />
(b) per gli old<br />
-XX:ParallelGCThreads=n che ritengo autoesplicativo e va settato al<br />
numero di cpu o jvm sul sistema in uso<br />
-XX:+UseParallelGC (jre 1.3+) viene usata esclusivamente la policy (a)<br />
-XX:+CMSParallelRemarkEnabled da utilizzare per ridurre le pause nella<br />
fase di remark (la terza su 4)</p>
<p>-XX:+AggressiveHeap (RAM 256+Mb) ottimizza per applicazioni<br />
&#8220;memory-allocation intensive&#8221;&#8230; è pensato per sistemi con molta<br />
memoria e molti processori, ma &#8211; per jre 1.4.1+ &#8211; funziona bene anche<br />
con &#8220;solo&#8221; 4 cpu</p>
<p>-XX:+UseAdaptiveSizePolicy regola automaticamente l&#8217;utilizzo di una<br />
parte dell&#8217;heap (young/tenured ratio)</p>
<p>-Xincgc per abilitare l&#8217;utilizzo del GC &#8220;incremental&#8221;</p>
<p>-XX:+UseConcMarkSweepGC (jre 1.4.1+) uso della GC concorrente per<br />
&#8220;old&#8221;, può essere usato contemporaneamente alla policy (a) per gli<br />
young<br />
-XX:CMSInitiatingOccupancyFraction=n indica la frazione di heap<br />
occupato prima che avvenga la gc&#8230; impostarlo all&#8217;80-90% può<br />
garantire interruzioni meno frequenti. Attenzione! Siccome il GC in 4<br />
fasi non disabilita i setter metre libera la memoria, impostarla ad un<br />
valore troppo elevato può causare problemi di OutOfMemory quando con<br />
l&#8217;utilizzo della policy (a) non se ne avrebbero avuti</p>
<p>-XX:SurvivorRatio=z quanta parte del &#8220;survivor space heap&#8221; deve essere<br />
usata prima che gli oggetti vengano promossi ad &#8220;old&#8221;. il default è<br />
50%</p>
<p>-XX;MaxTenuringThreshold=y quanto gli oggetti debbano &#8220;invecchiare&#8221;,<br />
ovvero quante volte debbano essere copiati, prima di diventare &#8220;old&#8221;</p>
<p>in ambito web, dove molti oggetti sono usati una o poche volte prima<br />
di essere dereferenziati, è possibile settare y a zero per forzare<br />
l&#8217;intervento della policy b e quindi causare interruzioni + brevi. è<br />
conveniente associare questo parametro ad un valore molto alto di<br />
-XX:SurvivorRatio in modo che si passi direttamente da &#8220;eden&#8221; a &#8220;old&#8221;</p>
<p>-XX:+AggressiveOpts utilizza ottimizzazioni che saranno probabilmente<br />
attive di default nella prossima release della jvm&#8230; attenzione: le<br />
prestazioni possono variare da versione a versione&#8230; da una relese<br />
all&#8217;altra potrebbero cambiare le opzioni e non è garantito che le<br />
ottimizzazioni che attualmente hanno luogo se si attiva quest&#8217;opzione,<br />
effettivamente poi saranno di default.</p>
<p>un esempio pratico evidenzia che in un&#8217;applicazione SIP migliori le<br />
performances semplicemente cambiando i parametri che regolano il<br />
funzionamento del GC</p>
<p>caso 1:<br />
java -Xmx512m -Xms512m -XX:MaxNewSize=24m -XX:NewSize=24m -XX:SurvivorRatio=2</p>
<p>&#8220;old&#8221; latency     3s   (!!!!)<br />
&#8220;young&#8221; latency     110ms<br />
GC sequential overhead    18.9%</p>
<p>caso 2:<br />
java -Xmx512m -Xms512m -XX:MaxNewSize=24m -XX:NewSize=24m<br />
-XX:SurvivorRatio=128 -XX:+UseConcMarkSweepGC<br />
-XX:MaSInitiatingOccupancyfraction=60</p>
<p>&#8220;old&#8221; latency    115ms<br />
&#8220;young&#8221; latency    100ms<br />
GC sequential overhead     8.6%</p>
<p>caso 3:<br />
java -Xmx512m -Xms512m -XX:MaxNewSize=24m -XX:NewSize=24m<br />
-XX:SurvivorRatio=2 -XX:UseParNewGC +UseConcMarkSweepGC<br />
-XX:MaSInitiatingOccupancyfraction=60</p>
<p>&#8220;old&#8221; latency     145ms<br />
&#8220;young&#8221; latency     50ms<br />
GC sequential overhead      5.9%</p>
<p>passare da 18.9% a 5.9% non mi pare male<br />
e nemmeno dai 3 secondi di interruzione per una GC a 145ms&#8230;</p>
<p>non dimetichiamoci che, oltre alle opzioni relative al garbage<br />
collector, per applicazioni enterprise è necessario<br />
- aumentare la dimensione massima dell&#8217;heap (quella di default è<br />
veramente bassa)<br />
- settare -Xms e -Xmx allo stesso valore in modo da avere un<br />
comportamento più costante nel tempo</p>
<p>per determinare in che modo dimensionare le varie parti dell&#8217;heap si<br />
può procedere nel seguente modo<br />
- di fa una raffigurazione del ciclo di vita degli oggetti sul piano<br />
cartesiano e si stima la quantità di &#8220;young&#8221; e &#8220;old&#8221;&#8230; è bene<br />
comunque fare diverse prove<br />
- se ci sono molte pause dovute alla gc, conviene assegnare via via<br />
più memoria per &#8220;young&#8221;<br />
- va tenuto conto che quando ci si avvicina a metà della dimensione<br />
dell&#8217;heap assegnato a &#8220;young&#8221;, le prestazioni peggiorano</p>
<p>riferimenti<br />
http://java.sun.com/docs/hotspot/gc1.4.2/<br />
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html (più<br />
aggiornato ma non contiene la spiegazione di tutti i dettagli)</p>
<p>http://java.sun.com/developer/technicalArticles/Programming/turbo/</p>
<p>http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp (elenco<br />
di varie opzioni per la vm)</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jugsalerno.wordpress.com/106/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jugsalerno.wordpress.com/106/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jugsalerno.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jugsalerno.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jugsalerno.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jugsalerno.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jugsalerno.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jugsalerno.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jugsalerno.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jugsalerno.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jugsalerno.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jugsalerno.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jugsalerno.wordpress.com&blog=569398&post=106&subd=jugsalerno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jugsalerno.wordpress.com/2008/07/23/gc-tweaks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/309087ddb8afe692a15610876815f809?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mspike</media:title>
		</media:content>
	</item>
	</channel>
</rss>