<?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>Marco's Resources</title>
	<atom:link href="http://unopuntozero.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://unopuntozero.wordpress.com</link>
	<description>Java, JBoss e chissà... forse qualcos'altro</description>
	<lastBuildDate>Fri, 22 May 2009 18:40:08 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='unopuntozero.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/224949132bef7e59e4808baeb7eb084e?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Marco's Resources</title>
		<link>http://unopuntozero.wordpress.com</link>
	</image>
			<item>
		<title>Servizi HA-Singleton in JBoss</title>
		<link>http://unopuntozero.wordpress.com/2009/05/22/servizi-ha-singleton-in-jboss/</link>
		<comments>http://unopuntozero.wordpress.com/2009/05/22/servizi-ha-singleton-in-jboss/#comments</comments>
		<pubDate>Fri, 22 May 2009 18:40:08 +0000</pubDate>
		<dc:creator>markoPO</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[ha-singleton]]></category>

		<guid isPermaLink="false">http://unopuntozero.wordpress.com/?p=13</guid>
		<description><![CDATA[HA-Singleton è un particolare servizio di JBoss che consente ad una applicazione distribuita in un cluster di essere eseguita come singleton (una sola istanza in esecuzione) e, nel contempo, garantire alta disponibilità. Come è facile intuire si tratta di una soluzione adatta per tutte quelle applicazioni che, per motivi progettuali, non possono essere eseguite in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unopuntozero.wordpress.com&blog=4206168&post=13&subd=unopuntozero&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>HA-Singleton è un particolare servizio di JBoss che consente ad una applicazione distribuita in un cluster di essere eseguita come singleton (una sola istanza in esecuzione) e, nel contempo, garantire alta disponibilità. Come è facile intuire si tratta di una soluzione adatta per tutte quelle applicazioni che, per motivi progettuali, non possono essere eseguite in istanze multiple. Si prenda ad esempio un semplice job schedulato.</p>
<p>Il principio si basa sulla presenza di un nodo master (allo startup è il primo nodo avviato) su cui vengono eseguite tutte queste applicazioni. In caso di failure del nodo master, il cluster procede ad una elezione di un nuovo master fra i nodi esistenti e su quello vengono avviate le applicazioni.</p>
<p>Il modo più semplice per avere una applicazione in HA-Singleton è di fare il deploy nella directory deploy-hasingleton. Questa directory viene monitorizzata esclusivamente alla partenza del nodo master e il deploy delle applicazioni in essa contenute viene effettuato solo in quel nodo. Lo svantaggio principale di questo tipo di deploy consiste nel fatto che non è possibile fare deploy a caldo in quanto tale directory non viene letta dal deployer in nessun altro momento se non all&#8217;avvio del nodo master.</p>
<p>Se prendiamo ad esempio il seguente file <em>scheduler-service.xml</em> che rappresenta un semplice job schedulato:</p>
<pre><span style="color:#99cc00;"><span style="color:#339966;">&lt;?xml </span><span style="color:#339966;">version</span><span style="color:#339966;">=</span><span style="color:#339966;">"1.0"</span><span style="color:#339966;"> </span><span style="color:#339966;">encoding</span><span style="color:#339966;">=</span><span style="color:#339966;">"UTF-8"</span><span style="color:#339966;">?&gt;
&lt;server&gt;
    &lt;mbean </span><span style="color:#339966;">code</span><span style="color:#339966;">=</span><span style="color:#339966;">"org.jboss.varia.scheduler.Scheduler"</span><span style="color:#339966;"> </span><span style="color:#339966;">name</span><span style="color:#339966;">=</span><span style="color:#339966;">"it.test:service=Scheduler"</span><span style="color:#339966;">&gt;
        &lt;attribute </span><span style="color:#339966;">name</span><span style="color:#339966;">=</span><span style="color:#339966;">"StartAtStartup"</span><span style="color:#339966;">&gt;</span><span style="color:#339966;">true</span><span style="color:#339966;">&lt;/attribute&gt;
        &lt;attribute </span><span style="color:#339966;">name</span><span style="color:#339966;">=</span><span style="color:#339966;">"SchedulableClass"</span><span style="color:#339966;">&gt;</span><span style="color:#339966;">it.test.SchedulableClass</span><span style="color:#339966;">
        &lt;/attribute&gt;
        &lt;attribute </span><span style="color:#339966;">name</span><span style="color:#339966;">=</span><span style="color:#339966;">"InitialStartDate"</span><span style="color:#339966;">&gt;</span><span style="color:#339966;">NOW</span><span style="color:#339966;">&lt;/attribute&gt;
        &lt;attribute </span><span style="color:#339966;">name</span><span style="color:#339966;">=</span><span style="color:#339966;">"SchedulePeriod"</span><span style="color:#339966;">&gt;</span><span style="color:#339966;">5000</span><span style="color:#339966;">&lt;/attribute&gt;
        &lt;attribute </span><span style="color:#339966;">name</span><span style="color:#339966;">=</span><span style="color:#339966;">"InitialRepetitions"</span><span style="color:#339966;">&gt;</span><span style="color:#339966;">-1</span><span style="color:#339966;">&lt;/attribute&gt;
        &lt;depends&gt;
            &lt;mbean </span><span style="color:#339966;">code</span><span style="color:#339966;">=</span><span style="color:#339966;">"javax.management.timer.Timer"</span><span style="color:#339966;"> </span><span style="color:#339966;">name</span><span style="color:#339966;">=</span><span style="color:#339966;">"jboss:service=Timer"</span><span style="color:#339966;"> /&gt;
        &lt;/depends&gt;
    &lt;/mbean&gt;
&lt;/server&gt;</span></span></pre>
<p>Posto all&#8217;interno della directory deploy di uno dei nodi, il risultato sarà che il nostro scheduler andrà in esecuzione esclusivamente nel nodo dove l&#8217;abbiamo pubblicato. Ma in caso di failure di questo nodo avremo il problema che il nostro scheduler si ferma inesorabilmente.</p>
<p>Se invece lo poniamo all&#8217;interno della directory farm avremo che il nostro scheduler andrà distribuito in tutto il cluster, ma anche che sarà avviato su tutti i nodi. E questo, con ogni probabilità, è un effetto indesiderato.</p>
<p>Ponendolo infine nella directory deploy-hasingleton di ciascun nodo (è importante!) e analizzando le varie jmx-console, vedremo che il servizio sarà presente solo e soltanto su un nodo e nella fattispecie il primo avviato.</p>
<p>Questo metodo come abbiamo avuto modo di ricordare non consente deploy a caldo, salvo forzare manualmente il deploy tramite la jmx-console e il servizio MainDeployer. Un po&#8217; una scocciatura. Esiste però un altro metodo, basato sempre sullo stesso servizio, che consente di ottenere lo stesso risultato pratico facendo il canonico deploy della applicazione in farm. E&#8217; sufficiente aggiungere al deployment descriptor la seguente dipendenza:</p>
<pre><span style="color:#339966;">&lt;depends&gt;jboss.ha:service=HASingletonDeployer,type=Barrier&lt;/depends&gt;</span></pre>
<p>Una volta fatto questo, l&#8217;applicazione distribuita in farm ha un comportamento interessante: viene effettivamente distribuita sul cluster e su ciascun nodo viene effettuato il deploy, ma viene avviata solo sul nodo master. L&#8217;alta disponibilità è garantita dal fatto che nel momento in cui il nodo master andrà down l&#8217;applicazione verrà avviata sul neo-eletto master. Inutile dire che questo è il mio modo preferito di pubblicare applicazioni HA-Singleton.</p>
<p>Da notare che il deploy tramite Barrier ha effetto solo sullo start/stop del servizio, non sulla sua creazione o distruzione.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/unopuntozero.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/unopuntozero.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/unopuntozero.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/unopuntozero.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/unopuntozero.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/unopuntozero.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/unopuntozero.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/unopuntozero.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/unopuntozero.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/unopuntozero.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unopuntozero.wordpress.com&blog=4206168&post=13&subd=unopuntozero&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://unopuntozero.wordpress.com/2009/05/22/servizi-ha-singleton-in-jboss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d10904326c3760d8bfd8db4c4753c64b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markoPO</media:title>
		</media:content>
	</item>
		<item>
		<title>Le date in Java</title>
		<link>http://unopuntozero.wordpress.com/2008/07/17/le-date-in-java/</link>
		<comments>http://unopuntozero.wordpress.com/2008/07/17/le-date-in-java/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 22:05:21 +0000</pubDate>
		<dc:creator>markoPO</dc:creator>
				<category><![CDATA[elementi del linguaggio]]></category>
		<category><![CDATA[Calendar]]></category>
		<category><![CDATA[Date]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://unopuntozero.wordpress.com/?p=8</guid>
		<description><![CDATA[Una delle domande più ricorrenti del linguaggio Java è perchè la classe java.util.Date non fornisca alcun metodo di conversione e, oltretutto, quelli presenti sono deprecati oramai dalla versione 1.1 del JDK.
Per conoscere la risposta occorre sapere cosa questa classe rappresenta. Una istanza di java.util.Date contiene il numero di millisecondi trascorsi dalla mezzanotte del primo gennaio [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unopuntozero.wordpress.com&blog=4206168&post=8&subd=unopuntozero&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Una delle domande più ricorrenti del linguaggio Java è perchè la classe java.util.Date non fornisca alcun metodo di conversione e, oltretutto, quelli presenti sono deprecati oramai dalla versione 1.1 del JDK.<br />
Per conoscere la risposta occorre sapere cosa questa classe rappresenta. Una istanza di java.util.Date contiene il numero di millisecondi trascorsi dalla mezzanotte del primo gennaio 1970, ora di Greenwich. Il suo significato quindi è quello di fornire <span style="text-decoration:underline;"><em>le coordinate assolute</em></span> di un istante di tempo, con precisione al millisecondo.<br />
Quando si va a convertire una java.util.Date da o verso una data di calendario si hanno due ordini di problemi: il fuso orario (o timezone) e il calendario. Il fatto che l&#8217;ora mondiale sia suddivisa in timezone e cosa ben nota, un po&#8217; meno noto è il fatto che non tutti i paesi del mondo adottano lo stesso nostro calendario Gregoriano.<br />
Con il JDK 1.1 è stata introdotta la classe astratta java.util.Calendar, da questa classe derivano le varie implementazioni concrete dei calendari associati ai vari Locale.</p>
<p>java.util.Calendar è quindi astratta, ovvero non può essere istanziata direttamente. Però implementa un metodo statico getInstance() che restituisce la corretta implementazione concreta sulla base del TimeZone e del Locale. Esso è disponibile in quattro overload:</p>
<pre>public static <a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html">Calendar</a> <strong>getInstance</strong>();
public static <a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html">Calendar</a> <strong>getInstance</strong>(<a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/TimeZone.html">TimeZone</a> zone);
public static <a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html">Calendar</a> <strong>getInstance</strong>(<a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Locale.html">Locale</a> aLocale);
public static <a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html">Calendar</a> <strong>getInstance</strong>(<a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/TimeZone.html">TimeZone</a> zone, <a title="class in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Locale.html">Locale</a> aLocale);</pre>
<p>In tutti i casi il metodo restituisce una istanza che punta alla data/ora di sistema. Il tipo concreto restituito dipenderà invece dal Locale passato, nella maggior parte dei casi java.util.GregorianCalendar che è una rappresentazione del calendario Gregoriano in vigore in gran parte dei paesi del mondo (compresa ovviamente l&#8217;Italia).<br />
Se invece provate a reperire il calendario per la Locale Thailandese:</p>
<pre>Calendar.getInstance(new Locale("th","TH"));</pre>
<p>vedrete il calendario risultante sarà di tipo sun.util.BuddhistCalendar.<br />
Locale e TimeZone sono due parametri indipendenti l&#8217;uno dall&#8217;altro, nel senso che si può ottenere un Calendar relativo ad un Locale di un determinato paese del mondo ma che punta ad un fuso orario diverso. Se uno di questi parametri viene ommesso, si assume quello di sistema della JVM in esecuzione.</p>
<p>Una volta ottenuta una istanza di Calendar, questa deve essere utilizzata per qualsiasi conversione e/o operazione sulle date. Il metodo set() consente di impostare sul calendario una data/ora specifica; il metodo add() consente operazioni di aggiunta o sottrazione di un certo numero di unità (ore, giorni, mesi, anni, etc&#8230;); i metodi after() e before() consentono di fare comparazioni di data; infine, i metodi setTime() e getTime() consentono la conversione di una specifica data, espressa come java.util.Date, da/a questo Calendar.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/unopuntozero.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/unopuntozero.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/unopuntozero.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/unopuntozero.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/unopuntozero.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/unopuntozero.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/unopuntozero.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/unopuntozero.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/unopuntozero.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/unopuntozero.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/unopuntozero.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/unopuntozero.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unopuntozero.wordpress.com&blog=4206168&post=8&subd=unopuntozero&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://unopuntozero.wordpress.com/2008/07/17/le-date-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d10904326c3760d8bfd8db4c4753c64b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markoPO</media:title>
		</media:content>
	</item>
		<item>
		<title>JBoss, webservices e Spring</title>
		<link>http://unopuntozero.wordpress.com/2008/06/05/jboss-webservices-e-spring/</link>
		<comments>http://unopuntozero.wordpress.com/2008/06/05/jboss-webservices-e-spring/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 20:55:00 +0000</pubDate>
		<dc:creator>markoPO</dc:creator>
				<category><![CDATA[jboss]]></category>
		<category><![CDATA[jsr 181]]></category>
		<category><![CDATA[spring framework]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://unopuntozero.wordpress.com/2008/06/05/jboss-webservices-e-spring/</guid>
		<description><![CDATA[Problema: supponiamo di avere una applicazione (web o non web) basata su Spring e di voler pubblicare come web service su JBoss uno o più degli oggetti business gestiti da Spring.
La prima cosa che salta all&#8217;occhio è che qualora si utilizzino le comodissime annotazioni standard per fare il deploy del web service, il vostro oggetto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unopuntozero.wordpress.com&blog=4206168&post=4&subd=unopuntozero&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Problema: supponiamo di avere una applicazione (web o non web) basata su Spring e di voler pubblicare come web service su JBoss uno o più degli oggetti business gestiti da Spring.<br />
La prima cosa che salta all&#8217;occhio è che qualora si utilizzino le comodissime <a href="http://jcp.org/en/jsr/detail?id=181">annotazioni standard</a> per fare il deploy del web service, il vostro oggetto manager non viene istanziato tramite l&#8217;<a href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html">IOC container di Spring</a>, quindi diventa sostanzialmente inutilizzabile.<br />
Una soluzione potrebbe essere convertire il progetto a Ejb3, chi può farlo lo faccia, ma chi non può? Per non parlare di chi non vuole&#8230;<br />
In questi casi il metodo conveniente è quello di derivare la vostra classe che esporrà il web service da una n-esima classe di supporto di Spring, la <a href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/web/context/support/SpringBeanAutowiringSupport.html"><span style="font-family:courier new;">SpringBeanAutowiringSupport</span>.</a> Questa classe astratta abilita l&#8217;annotazione <span style="font-family:courier new;">@Autowire</span> su qualsiasi istanza di oggetto purchè creata all&#8217;interno di una Web Application Spring-based.  In questo modo potete &#8220;iniettare&#8221; oggetti configurati nel vostro IOC container di Spring nel vostro Web Service, esattamente come se fosse esso stesso un oggetto di Spring, continuando quindi ad utilizzare il paradigma del <a href="http://en.wikipedia.org/wiki/Inversion_of_Control">inversion of control</a>.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/unopuntozero.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/unopuntozero.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/unopuntozero.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/unopuntozero.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/unopuntozero.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/unopuntozero.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/unopuntozero.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/unopuntozero.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/unopuntozero.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/unopuntozero.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/unopuntozero.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/unopuntozero.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=unopuntozero.wordpress.com&blog=4206168&post=4&subd=unopuntozero&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://unopuntozero.wordpress.com/2008/06/05/jboss-webservices-e-spring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d10904326c3760d8bfd8db4c4753c64b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">markoPO</media:title>
		</media:content>
	</item>
	</channel>
</rss>