<?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>SlashCode &#187; Java</title>
	<atom:link href="http://davideaversa.it/slashcode/category/guide/java-guide/feed/" rel="self" type="application/rss+xml" />
	<link>http://davideaversa.it/slashcode</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 14:28:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Oltre Java: Ceylon</title>
		<link>http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/</link>
		<comments>http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 11:50:39 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[TheSlashCodeProject]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[ceylon]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=811</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/"><img title="Oltre Java: Ceylon" src="http://davideaversa.it/slashcode/wp-content/uploads/2012/04/ceylon_icon_128px.png" alt="Oltre Java: Ceylon"  width="200" height="200" /></a></div><br/>Chi mi conosce sa bene il mio rapporto di amore-odio con Java. Amore perché Java è un linguaggio performante, di alto livello e soprattutto portabile. L&#8217;ho usato spesso, lo uso tutt&#8217;ora e ci ho fatto addirittura del game development. Odio perché, proprio perché ci ho combattuto tanto, ne conosco tutti i difetti, i limiti e <a href='http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2012%2F04%2Foltre-java-ceylon%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Oltre Java: Ceylon" data-url="http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Chi mi conosce sa bene il mio rapporto di amore-odio con <strong>Java</strong>. <strong>Amore perché</strong> Java è un linguaggio performante, di alto livello e soprattutto portabile. L&#8217;ho usato spesso, lo uso tutt&#8217;ora e ci ho fatto addirittura del game development. <strong>Odio perché</strong>, proprio perché ci ho combattuto tanto, ne conosco tutti i difetti, i limiti e le idiosincrasie. Java è sintatticamente prolisso e ha qualche problema di &#8220;vecchiaia&#8221; che andrebbe risolto (ed <a href="http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java">il confronto con C# è impietoso</a>). <span id="more-811"></span></p>
<p>Giusto per fare un esempio in Java è abitudine leggere (o scrivere) codice raccapricciante quale</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">foo.setAttributeX(bar.getAttributeY());</div></div>
<p>che in C# si risolve con un semplice</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">foo.X = bar.Y;</div></div>
<p>Qualcuno considererà questa caratteristica (tecnicamente si parla di <em>Accessor</em> e <em>Mutators</em>) un puro vezzo sintattico, ma quando si lavora con decine e decine di classi vi posso assicurare che questo facilita di un fattore dieci la produttività e la manutenibilità del codice. Problemi come questo ed altri più &#8220;concreti&#8221; sono ciò che mi hanno spinto a passare <em>al lato oscuro della forza</em> ogni qualvolta mi è possibile.</p>
<p><img src="http://davideaversa.it/slashcode/wp-content/uploads/2012/04/ceylon_icon_128px.png" alt="" title="Ceylon Icon" width="128" height="128" class="alignleft size-full wp-image-812" /></p>
<p>In attesa che Java venga riformato (sperando nella <a href="ww.theregister.co.uk/2011/10/03/java8_revolution_not_evolution_oracle/">rivoluzionaria (?) versione 8 e 9 del linguaggio</a>) la comunità si è messa in moto in modo autonomo. Uno dei progetti a mio avviso più interessanti è senza dubbio <strong><a href="http://ceylon-lang.org/">Ceylon</a></strong>, di <strong>Red-Hat</strong>.</p>
<p>Ceylon è un linguaggio JVM-based, ovvero che viene compilato generando <em>byte-code</em> compatibile con la Java Virtual Machine. Questo garantisce due vantaggi: il linguaggio sfrutta la portabilità e le ottime performance della JVM ed è potenzialmente compatibile con le librerie Java esistenti.</p>
<p>Ceylon è un linguaggio molto interessante perché non solo alleggerisce Java da tutti gli inutili orpelli sintattici di cui è infestato ma aggiunge anche una sorta di dinamismo opzionale nella gestione delle variabili (tramite il tipo jolly <em>value</em>). Ma facciamo qualche esempio.</p>
<div class="codecolorer-container java dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">doc <span style="color: #0000ff;">&quot;The classic Hello World program&quot;</span><br />
by <span style="color: #0000ff;">&quot;Gavin&quot;</span><br />
see <span style="color: #009900;">&#40;</span>goodbye<span style="color: #009900;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a><span style="color: #009900;">&#41;</span><br />
<span style="color: #000066; font-weight: bold;">void</span> hello<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; value message <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Hello,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;World!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; print<span style="color: #009900;">&#40;</span>message.<span style="color: #006633;">normalized</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Come non partire dal mitico <em>&#8220;Hello, World!&#8221;</em>? In realtà non è un &#8220;Hello, World!&#8221; semplice perché ci mostra due nuove caratteristiche del linguaggio. La prima è il modo con cui vengono documentati metodi e classi: niente commenti,  ma una sintassi specifica che può essere letta dal generatore di documentazione integrato di Ceylon. La seconda è il tipo variabile <code class="codecolorer text dawn"><span class="text">value</span></code> che può essere usato per simulare una certa dinamicità del linguaggio. Da notare però che nessuno ci obbliga ad usarlo: se siamo sicuri che la variabile <code class="codecolorer text dawn"><span class="text">message</span></code> sia una stringa possiamo direttamente dichiararla come tale tramite <code class="codecolorer text dawn"><span class="text">String message</span></code>.</p>
<p>Un&#8217;altra funzionalità molto utile è l&#8217;operatore di <em>null check</em>. Vediamolo in azione:</p>
<div class="codecolorer-container java dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> shoutedGreeting <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;HELLO, &quot;</span> <span style="color: #339933;">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name<span style="color: #339933;">?</span>.<span style="color: #006633;">uppercased</span> <span style="color: #339933;">?</span> <span style="color: #0000ff;">&quot;WORLD&quot;</span><span style="color: #339933;">;</span></div></div>
<p>In questo esempio troviamo i due operatori in azione. Il primo è l&#8217;operatore <strong>&#8220;?&#8221;</strong>. Considerando il codice precedente, tale operatore restituisce <code class="codecolorer text dawn"><span class="text">name.uppercased</span></code> se e solo se quest&#8217;ultimo è diverso da <code class="codecolorer text dawn"><span class="text">null</span></code>, altrimenti restituisce il valore che lo segue (in questo caso la stringa &#8220;WORLD&#8221;). L&#8217;altro operatore nell&#8217;esempio è <strong>&#8220;?.&#8221;</strong>. Quest&#8217;ultimo fa in modo che si acceda alla funzione/attributo <code class="codecolorer text dawn"><span class="text">uppercased</span></code> se e solo se <code class="codecolorer text dawn"><span class="text">name</span></code> è diverso da <code class="codecolorer text dawn"><span class="text">null</span></code>. Questi due operatori ci risparmiano quindi tutta una serie di noiosi &#8220;if&#8221; annidati!</p>
<p>Le caratteristiche di Ceylon sono numerosissime e per maggiori informazioni vi rimando alla loro <a href="http://ceylon-lang.org/documentation/1.0/tour/basics/">pagina ufficiale</a>. Ceylon è ancora in fase di sviluppo ma è già possibile scaricare delle versioni preliminari!</p>
<p>Come se non bastasse è in progetto lo sviluppo di un backend che compili Ceylon in JavaScript rendendone possibile l&#8217;uso anche per lo sviluppo di applicazioni web.</p>
<p>Insomma, Ceylon è un progetto che vi consiglio caldamente di tenere d&#8217;occhio! </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=811&amp;md5=3517c61620eabb35afb16675110a175d" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2012/04/oltre-java-ceylon/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2012%2F04%2Foltre-java-ceylon%2F&amp;language=it_IT&amp;category=text&amp;title=Oltre+Java%3A+Ceylon&amp;description=Chi+mi+conosce+sa+bene+il+mio+rapporto+di+amore-odio+con+Java.+Amore+perch%C3%A9+Java+%C3%A8+un+linguaggio+performante%2C+di+alto+livello+e+soprattutto+portabile.+L%26%238217%3Bho+usato+spesso%2C+lo+uso...&amp;tags=C%2Cceylon%2Cjava%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java – Trasferimento XML via Socket – Parte 2</title>
		<link>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 09:20:36 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=283</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/"><img title="Java – Trasferimento XML via Socket – Parte 2" src="http://img201.imageshack.us/img201/9095/homer13so5.gif" alt="Java – Trasferimento XML via Socket – Parte 2"  width="200" height="150" /></a></div><br/>PROTOCOLLO DI TRASFERIMENTO IN PRATICA &#8211; INVIO Per questo punto abbiamo visto che è necessario serializzare il documento XML in uno stream secondario che useremo per calcolare la dimensione dei dati inviati e che poi riverseremo direttamente nello stream di output del socket. Per fare questo estendiamo ByteArrayOutputStream, in questo modo sfrutteremo tutti i metodi <a href='http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java – Trasferimento XML via Socket – Parte 2" data-url="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="wp-caption aligncenter" style="width: 330px"><img src="http://img201.imageshack.us/img201/9095/homer13so5.gif" alt="Aaaaaargh!" width="320" height="240" /><p class="wp-caption-text">Aaaaaargh!</p></div>
<p><strong>PROTOCOLLO DI TRASFERIMENTO IN PRATICA &#8211; INVIO</strong></p>
<p>Per questo punto abbiamo visto che è necessario serializzare il documento XML in uno stream secondario che useremo per calcolare la dimensione dei dati inviati e che poi riverseremo direttamente nello stream di output del socket.</p>
<p><span id="more-283"></span></p>
<p>Per fare questo estendiamo <strong>ByteArrayOutputStream</strong>, in questo modo sfrutteremo tutti i metodi di questa classe, fra i quali, quello che ci fornisce la dimensione dei dati contenuti. Tale classe dovrà avere inoltre:</p>
<ol>
<li>Un attributo che memorizza lo stream di output reale. Nel nostro caso memorizzerà lo stream di output del socket.</li>
<li>Un metodo <em>send</em> che fa quello che vogliamo. Prende i dati memorizzati e li invia nel canale di output preceduti da un intero che indica la quantità di dati inviati.</li>
</ol>
<p>Per il canale di output ho scelto <em>DataOutputStream </em>poiché fornisce in modo nativo molte funzioni a cui siamo interessati, fra cui l&#8217;invio diretto di un Int.</p>
<p>La classe risultante è:</p>
<pre>public class XMLOutputStream extends  ByteArrayOutputStream {

 private DataOutputStream outchannel;

 public XMLOutputStream(OutputStream outchannel) {
     super();
     this.outchannel = new DataOutputStream(outchannel);
 }

 public void send() throws IOException {
     byte[] data = toByteArray();
     outchannel.writeInt(data.length);
     outchannel.write(data);
     reset();
 }
}</pre>
<p>Ora però vogliamo che tale classe sia gestibile in modo più semplice. Vogliamo infatti un metodo in cui noi inseriamo un documento XML e lo stream di uscita del socket e lui faccia tutto il lavoro di serializzazione e invio.</p>
<pre>public class XMLSender {

 public static void send(Document tosend, OutputStream channel) throws TransformerConfigurationException, IOException {
     XMLOutputStream out = new XMLOutputStream(channel);

     StreamResult sr = new StreamResult(out);
     DOMSource ds = new DOMSource(tosend);
     Transformer tf = TransformerFactory.newInstance().newTransformer();

     try {
         tf.transform(ds, sr);
     } catch (TransformerException ex) {
         Logger.getLogger(XMLSender.class.getName()).log(Level.SEVERE, null, ex);
     }

     out.send();
 }
}</pre>
<p>Questa classe fa proprio ciò che vogliamo. Contiene un unico metodo statico che prende come parametri documento XML e canale di uscita e si occupa di serializzare e inviare il tutto in modo corretto sfruttando il nostro XMLOutputStream.</p>
<p><strong>PROTOCOLLO DI TRASFERIMENTO IN PRATICA &#8211; INVIO</strong></p>
<p>Per la ricezione sfruttiamo un meccanismo simile anche se, per mantenere una certa linearità di funzionamento sono stato costretto ad usare in modo piuttosto sporco la classe <strong>ByteArrayInputStream</strong> ma al momento era l&#8217;unica soluzione coerente che mi veniva in mente. Funziona a patto di tollerare il mio intervento brutale sugli attributi della classe.</p>
<p>public class XMLInputStream extends ByteArrayInputStream {</p>
<p>private DataInputStream inchannel;</p>
<pre>public class XMLInputStream extends ByteArrayInputStream {

 private DataInputStream inchannel;

 public XMLInputStream(InputStream inchannel) {
     super(new byte[2]); //MOLTO BRUTTO.
     this.inchannel = new DataInputStream(inchannel);
 }

 public void recive() throws IOException {
     int i = inchannel.readInt(); //Legge l'int con il numero di byte.
     byte[] data = new byte[i];
     inchannel.read(data, 0, i); //Legge esattamente quel numero di byte.
     this.buf = data; //BRUTTO ANCHE QUESTO.
     this.count = i;
     this.mark = 0;
     this.pos = 0;
 }

}</pre>
<p>Come potete vedere rispetta esattamente il nostro protocollo. Anche in questo caso vogliamo una classe involucro che ci permetta, dato lo stream di input del socket di restituire il documento corrispondente.</p>
<pre>public class XMLReceiver {

 public static Document receive(InputStream channel) throws ParserConfigurationException, TransformerConfigurationException, IOException, SAXException {
     //Inizializza il DOM per la ricezione del pacchetto.
     DocumentBuilderFactory docBuilderFact = DocumentBuilderFactory.newInstance();
     DocumentBuilder docBuilder = docBuilderFact.newDocumentBuilder();
     Document request = null;

     //Inizializza il canale.
     XMLInputStream xmlin = new XMLInputStream(channel);

     xmlin.recive();

     request = docBuilder.parse(xmlin);

     return request;
 }
}</pre>
<p>Anche in questo caso eccovi accontentati. Lascio qui di seguito un archivio contenente tutte le classi di cui abbiamo parlato.</p>
<p><a href="http://dl.getdropbox.com/u/89889/XMLTransfer.tar.gz">DOWNLOAD XMLTRANSFER</a></p>
<p><strong>LICENZA:</strong></p>
<p><strong>Tutte le classi sono estratte dal progetto Enea. Come tali ereditano la sua licenza GPLv3. Nonostante ciò non è che per 10 righe di codice mi straccerò i vestiti se la licenza non è applicata. E&#8217; solo premura citare me e questo. A questo ci terrei. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p><strong>Grazie ad </strong><strong>andbin del forum di HTML.it per il supporto.<br />
</strong></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=283&amp;md5=fdad80a08a25c6e3c7283730332ad860" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-2%2F&amp;language=it_IT&amp;category=text&amp;title=Java+%E2%80%93+Trasferimento+XML+via+Socket+%E2%80%93+Parte+2&amp;description=PROTOCOLLO+DI+TRASFERIMENTO+IN+PRATICA+%26%238211%3B+INVIO+Per+questo+punto+abbiamo+visto+che+%C3%A8+necessario+serializzare+il+documento+XML+in+uno+stream+secondario+che+useremo+per+calcolare+la+dimensione+dei...&amp;tags=java%2Cparsing%2Csocket%2Cxml%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java &#8211; Trasferimento XML via Socket &#8211; Parte 1</title>
		<link>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 23:03:27 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=281</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/"><img title="Java &#8211; Trasferimento XML via Socket &#8211; Parte 1" src="http://www.adnandoric.com/wp-content/uploads/2009/03/zoidberg-why.png" alt="Java &#8211; Trasferimento XML via Socket &#8211; Parte 1"  width="" /></a></div><br/>Ho perso settimane alla ricerca di un modo elegante e pulito di trasferire informazioni fra server e client tramite un protocollo basato su XML. Possibile che nessuno abbia fatto una classe nelle librerie standard in grado di trasferire facilmente una manciata di tag XML? Non lo so. Fatto sta che il web non conteneva nessuna risposta alla mia domanda, così, domandando in giro sono arrivato a sviluppare 4 classi in grado di trasferire con un solo comando pacchetti XML attraverso un Socket. Vediamo quindi come fare. Alla fine vi allegerò un archivio con le mie 4 classi pronte per l'uso.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-1%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java &#8211; Trasferimento XML via Socket &#8211; Parte 1" data-url="http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="wp-caption aligncenter" style="width: 409px"><img src="http://www.adnandoric.com/wp-content/uploads/2009/03/zoidberg-why.png" alt="" width="399" height="241" /><p class="wp-caption-text">Perché!? Perché!?</p></div>
<p style="text-align:left;">Ho perso settimane alla ricerca di un modo elegante e pulito di trasferire informazioni fra server e client tramite un protocollo basato su XML. Possibile che nessuno abbia fatto una classe nelle librerie standard in grado di trasferire facilmente una manciata di tag XML? Non lo so. Fatto sta che il web non conteneva nessuna risposta alla mia domanda, così, domandando in giro sono arrivato a sviluppare 4 classi in grado di trasferire con un solo comando pacchetti XML attraverso un Socket.</p>
<p style="text-align:left;"><span id="more-281"></span></p>
<p style="text-align:left;"><strong>SERIALIZZAZIONE E PARSING</strong></p>
<p style="text-align:left;">Quando si lavora con un documento che contiene dati bisogna, innanzitutto, essere in grado di leggerlo. L&#8217;azione che compie un programma quando legge un documento/file e ne interpreta il contenuto si chiama <strong>parsing</strong>. Il parsing di un file consiste, quindi, nell&#8217;estrarre da una sequenza di caratteri le informazioni da noi desiderate ed organizzarle in una struttura logica all&#8217;interno della memoria.</p>
<p style="text-align:left;">La <strong>serializzazione</strong>, invece, è esattamente il contrario del parsing. Serializzare un oggetto consiste nel <em>trasformare </em>tale struttura dati in una sequenza lineare di caratteri.</p>
<p style="text-align:left;">Questi due passaggi sono essenziali per lavorare con i file in modo avanzato: il computer gestisce nativamente solo sequenza di byte (e quindi caratteri) e quindi tutto ciò che non risiede in memoria deve poter essere memorizzato in questo formato.</p>
<p style="text-align:left;"><strong>LIMITI DEL TRASFERIMENTO XML NATIVO</strong></p>
<p style="text-align:left;">Le classi che gestiscono XML sia secondo metodologia SAX che DOM permettono di <strong>serializzare</strong> e di <strong>parsare</strong> un documento XML direttamente in/da uno Stream dati. Possiamo cioè serializzare un documento XML direttamente in un OutputStream e analogamente possiamo parsare un file XML attingendo direttamente da un InputStream. Questa è l&#8217;interfaccia che ci offrono gli strumenti base.</p>
<p style="text-align:left;">Il problema è che questo meccanismo non funziona attraverso un Socket. Supponiamo che un client voglia inviare una richiesta ad un server. Il client crea il suo documento XML con la richiesta e la serializza nell&#8217;OutputStream del socket. A questo punto il server riceve questi dati effettuando direttamente il parsing dall&#8217;InputStream del socket.</p>
<p style="text-align:left;">Qui avviente l&#8217;intoppo. XML non prevede un terminatore esplicito. Il server rimane quindi in attesa perenne che il flusso dati provenienti dal client si interrompa (inviando un EOF, Endo-Of-File).</p>
<p style="text-align:left;">Questo però non può avvenire in nessun caso. Infatti:</p>
<ol>
<li>Se il client forza l&#8217;invio di un EOF (inviando un byte contenente 0&#215;00) il parser del server lancia eccezione. Tale terminatore non può essere parsato!</li>
<li>Se il client chiude lo stream, automaticamente il socket viene disconnesso e la connessione viene interrotta. Il server quindi non può più rispondere, a meno di non instaurare una nuova connessione.</li>
</ol>
<p>La soluzione non può essere risolta in questo modo. Bisogna escogitare soluzioni alternative.</p>
<p><strong>TROVIAMO UNA SOLUZIONE</strong></p>
<p>Il problema ci appare subito chiaro. Dobbiamo indicare al server che il documento è finito così che lui possa interrompere l&#8217;attesa e proseguire con l&#8217;esecuzione. Per fare ciò abbiamo due modi:</p>
<ol>
<li>Inviare alla fine del documento qualcosa che segnali al server che non verrà inviato più nulla.</li>
<li>Istruire il server a leggere solo un TOT di byte corrispondendi alla lunghezza del messaggio.</li>
</ol>
<p>Il primo metodo lo abbiamo già scartato: qualunque cosa inviamo alla fine del documento verrà parsata generando l&#8217;eccezione del server. Ci rimane la seconda soluzione.</p>
<p>Questa presuppone la conoscenza a priori della dimensione del documento. Ma di questo non siamo affatto sicuri. Come potremmo esserlo? Anche per questa cosa abbiamo fondamentalmente due soluzioni:</p>
<ol>
<li>Dare una dimensione fissata ad ogni pacchetto riempendo lo spazio non usato di dati casuali (inseriti in un campo CDATA).</li>
<li>Inviare <strong>prima</strong> del documento il numero di byte che verranno inviati.</li>
</ol>
<p>La prima soluzione è ovviamente uno spreco enorme di memoria. E&#8217; utile nel caso la dimensione di ogni pacchetto sia più o meno sempre la stessa poiché questa soluzione ha il vantaggio di essere trasparente al client.</p>
<p>La seconda soluzione invece è molto più scalabile ed &#8220;elegante&#8221;. Il problema è: come facciamo a sapere quanti byte verranno inviati? La soluzione è ancora più semplice: invece di serializzare il documento direttamente sullo stream del socket lo serializziamo su un nostro stream privato, valutiamo la sua dimensione e dopodiché la inviamo seguita dal contenuto del nostro stream temporaneo.</p>
<p>Nel lato di ricezione invece leggiamo in questo modo: prima leggiamo il numero di byte (contenuto nei primi 4byte del messaggio) e poi trasferiamo questo esatto numero di byte provenienti dal socket in un nostro stream che poi faremo parsare.</p>
<p>La soluzione non fa una grinza. Ci manca solo di integrarla al meglio per rendere il più semplice possibile l&#8217;uso di questo <em>protocollo</em> all&#8217;interno della nostra applicazione.</p>
<p>Per oggi è tutto. Vedremo fra poco come fare tutto questo in pratica.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=281&amp;md5=179423abe393be81d8f7a62af430de29" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/09/java-trasferimento-xml-via-socket-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-trasferimento-xml-via-socket-1%2F&amp;language=it_IT&amp;category=text&amp;title=Java+%26%238211%3B+Trasferimento+XML+via+Socket+%26%238211%3B+Parte+1&amp;description=Ho+perso+settimane+alla+ricerca+di+un+modo+elegante+e+pulito+di+trasferire+informazioni+fra+server+e+client+tramite+un+protocollo+basato+su+XML.+Possibile+che+nessuno+abbia+fatto+una...&amp;tags=java%2Cparsing%2Csocket%2Cstream%2Cxml%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java Tip &#8211; Tipi Unsigned</title>
		<link>http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 23:22:13 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[byte]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[segni]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=241</guid>
		<description><![CDATA[Il Java penso sia il linguaggio che più odio. Lo trovo un affarone sconclusionato che unisce la complessità di un linguaggio compilato alla pesantezza di un linguaggio di scripting. Dopo questa premessa che sa molto di sfogo possiamo arrivare al dunque. Mi è capitato in questi giorni di avere bisogno di gestire dei singoli byte. <a href='http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-tip-tipi-unsigned%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java Tip &#8211; Tipi Unsigned" data-url="http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><em>Il Java penso sia il linguaggio che più odio. Lo trovo un affarone sconclusionato che unisce la complessità di un linguaggio compilato alla pesantezza di un linguaggio di scripting.</em></p>
<p>Dopo questa premessa che sa molto di sfogo possiamo arrivare al dunque. Mi è capitato in questi giorni di avere bisogno di gestire dei singoli byte. Il Java ha il tipo byte al suo interno ma li gestisce con il segno, il che è abbastanza stupido dato che di solito uno che lavora con i byte li vuole unsigned. Dire che i byte sono interpretati come <em>signed</em> significa che degli 8bit che costituiscono un byte ne vengono usati 7 per rappresentare il numero e 1 per il segno. Questo causa fondamentalmente due problemi:</p>
<ol>
<li>Il massimo numero positivo rappresentabile non è più 255 ma 127.</li>
<li>Bisogna stare attenti al segno. Ad esempio non si può fare un ciclo da 0 a 255 che scandisca tutti i possibili byte ma bisogna farlo da -128 a 127. Insomma, una rottura.</li>
</ol>
<p>In tutti gli altri linguaggi esiste la parola chiave <strong>unsigned<em> </em></strong>che permette con facilità di passare da interpretazioni <em>con segno</em> a interpretazioni senza segno. Nel Java NO. In Java <strong>tutti i tipi di dato sono sempre considerati signed<em> </em></strong>ad eccezione del tipo<strong><em> char.</em></strong></p>
<p>Abbiamo quindi bisogno di un modo per utilizzare dati unsigned.</p>
<p>La soluzione consiste nel promuovere il tipo di dato a quello più grande e passarlo in una maschera. Un esempio chiarirà il concetto:</p>
<p><strong>Passare da byte signed a unsigned:</strong></p>
<pre>public static int unsignedByte(byte b) {
    int result = b &amp; 0xFF;
    return result;
}</pre>
<p>Come vedete basta inserire il byte in un int e fare un <em>and </em>bit-a-bit per annullare tutto all&#8217;infuori del byte.</p>
<p>Questo può sembrarvi uno spreco di memoria in quanto memorizzate 1 byte in un int (4 byte).  Invace no. In Java, per questioni prestazionali, il tipo <em>byte</em> occupa comunque 4 byte. Quindi lo spazio utilizzato è sempre lo stesso.</p>
<p>Analogamente potete creare un <em>unsigned int</em> inserendo un <em>int</em> in un <em>long</em> e mettendo in <em>and</em> con 0xFFFFFFFF. Questa volta però un po di spazio lo buttate.</p>
<p><strong>Passare da int signed a unsigned:</strong></p>
<pre>public static long unsignedInt(int b) {
    long result = b &amp; 0xFFFFFFFF;
    return result;
}</pre>
<p>E&#8217; bene tenere presente però che per molte operazioni l&#8217;uso di byte signed o unsigned è del tutto equivalente come ad esempio l&#8217;operazione di divisione intera o di modulo.</p>
<p>Ora non vi resta che divertirvi a giocare con i segni nella speranza che vi divertiate più di quanto mi sia divertito io a trovare la soluzione a questo problema.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=241&amp;md5=7c4299467dedc89d5165171129088100" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/09/java-tip-tipi-unsigned/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fjava-tip-tipi-unsigned%2F&amp;language=it_IT&amp;category=text&amp;title=Java+Tip+%26%238211%3B+Tipi+Unsigned&amp;description=Il+Java+penso+sia+il+linguaggio+che+pi%C3%B9+odio.+Lo+trovo+un+affarone+sconclusionato+che+unisce+la+complessit%C3%A0+di+un+linguaggio+compilato+alla+pesantezza+di+un+linguaggio+di+scripting.+Dopo...&amp;tags=byte%2Cjava%2Csegni%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java &#8211; Multithreading</title>
		<link>http://davideaversa.it/slashcode/2008/11/java-multithreading/</link>
		<comments>http://davideaversa.it/slashcode/2008/11/java-multithreading/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 08:24:08 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=149</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2008/11/java-multithreading/"><img title="Java &#8211; Multithreading" src="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads-281x300.png" alt="Java &#8211; Multithreading"  width="187" height="200" /></a></div><br/>Posto qui di seguito la prima di una serie di guide pratiche su Java e sul Multithread che sta portando avanti un mio amico di università Dymios sul suo blog. Per ora metto solo la prima parte. Potete continuare la lettura sul suo blog. Multithreading in Java &#8211; di Dymios Una normale applicazione che gira <a href='http://davideaversa.it/slashcode/2008/11/java-multithreading/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fjava-multithreading%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2008/11/java-multithreading/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java &#8211; Multithreading" data-url="http://davideaversa.it/slashcode/2008/11/java-multithreading/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="entry">
<p style="text-align:justify;">Posto qui di seguito la prima di una serie di <em>guide pratiche</em> su Java e sul Multithread che sta portando avanti un mio amico di università Dymios sul suo blog. Per ora metto solo la prima parte. Potete continuare la lettura sul <a title="Dymios" href="http://dymios.soloingegneria.com">suo blog</a>.</p>
<p style="text-align:justify;"><span id="more-149"></span></p>
<p style="text-align:justify;"><em>Multithreading in Java &#8211; di Dymios</em></p>
<p style="text-align:justify;">Una normale applicazione che gira sulla nostra macchina ha un solo flusso di esecuzione: si dice che ha un <em>singolo thread attivo</em>. Con la tecnica del multithreading è possibile creare diversi flussi di istruzioni in esecuzione per una singola applicazione. In questo modo possiamo delegare un certo compito ad un thread mentre noi nel programma principale eseguiamo qualche altra operazione. Possiamo cioè effettuare più calcoli ed operazioni <strong>in parallelo</strong>.</p>
<p style="text-align:center;"><a href="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads.png"><img class="size-medium wp-image-219 aligncenter" title="threads" src="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads-281x300.png" alt="" width="281" height="300" /></a></p>
<p style="text-align:justify;">Java offre due possibilità per fare questo, vediamole una per volta:</p>
<p><strong>1) Estendere la classe Thread<br />
</strong>Le operazioni da eseguire in un thread vanno scritte nel metodo run() di un oggetto che estende la classe java predefinita Thread. La classe chiamante dovrà creare un oggetto di tale classe ed invocare il metodo start(). La JVM a questo punto creerà il nuovo thread e invocherà il metodo run().</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> Main <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">static</span> <span style="color:#000066;font-weight:bold;">void</span> main<span style="color:#009900;">(</span><span style="color:#003399;">String</span> args<span style="color:#009900;">[</span><span style="color:#009900;">]</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      MioThread t <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> MioThread<span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
      t.<span style="color:#006633;">start</span><span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span>

<span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> MioThread <span style="color:#000000;font-weight:bold;">extends</span> <span style="color:#003399;">Thread</span> <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> MioThread<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span> ...<span style="color:#006633;">costruttore</span>... <span style="color:#009900;">}</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000066;font-weight:bold;">void</span> run<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      <span style="color:#003399;">System</span>.<span style="color:#006633;">out</span>.<span style="color:#006633;">println</span><span style="color:#009900;">(</span><span style="color:#0000ff;">"Sono il Thread t!"</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span></pre>
</div>
</div>
<p><strong>2) Implementare l’interfaccia Runnable</strong><br />
Metodo molto simile al precedente.</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> Main <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">static</span> <span style="color:#000066;font-weight:bold;">void</span> main<span style="color:#009900;">(</span><span style="color:#003399;">String</span> args<span style="color:#009900;">[</span><span style="color:#009900;">]</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      MioRunnable runnable <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> MioRunnable<span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
      <span style="color:#003399;">Thread</span> t <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> <span style="color:#003399;">Thread</span><span style="color:#009900;">(</span>MioRunnable<span style="color:#009900;">)</span>;
      t.<span style="color:#006633;">start</span><span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span>

<span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> MioRunnable <span style="color:#000000;font-weight:bold;">implements</span> <span style="color:#003399;">Runnable</span> <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> MioRunnable<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span> ...<span style="color:#006633;">costruttore</span>... <span style="color:#009900;">}</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000066;font-weight:bold;">void</span> run<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      <span style="color:#003399;">System</span>.<span style="color:#006633;">out</span>.<span style="color:#006633;">println</span><span style="color:#009900;">(</span><span style="color:#0000ff;">"Sono il Thread t!"</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span></pre>
</div>
</div>
</div>
<p><!-- You can start editing here. --> <!-- If comments are open, but there are no comments. --></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=149&amp;md5=123764062f07e46d14374aedc2265c43" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2008/11/java-multithreading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fjava-multithreading%2F&amp;language=it_IT&amp;category=text&amp;title=Java+%26%238211%3B+Multithreading&amp;description=Posto+qui+di+seguito+la+prima+di+una+serie+di+guide+pratiche+su+Java+e+sul+Multithread+che+sta+portando+avanti+un+mio+amico+di+universit%C3%A0+Dymios+sul+suo+blog....&amp;tags=classe%2Cguida%2Cjava%2Cthread%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

