<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">

<channel>
	<title>pcollaog's blog</title>
	
	<link>http://blog.pcollaog.cl</link>
	<description>Linux, Java, Música y otras hierbas...</description>
	<lastBuildDate>Sat, 19 May 2012 14:03:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/pcollaog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="pcollaog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/2.5/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><item>
		<title>Foto de sábado por la mañana</title>
		<link>http://blog.pcollaog.cl/2012/05/19/foto-de-sabado-por-la-manana/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=foto-de-sabado-por-la-manana</link>
		<comments>http://blog.pcollaog.cl/2012/05/19/foto-de-sabado-por-la-manana/#comments</comments>
		<pubDate>Sat, 19 May 2012 14:03:26 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[Sin Categorí­a]]></category>
		<category><![CDATA[familia]]></category>
		<category><![CDATA[Javi]]></category>
		<category><![CDATA[Javiera]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=785</guid>
		<description><![CDATA[Tweet
]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton785" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FKBdKvb&amp;text=RT%20%40pcollaog%20Foto%20de%20s%C3%A1bado%20por%20la%20ma%C3%B1ana&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2012%2F05%2F19%2Ffoto-de-sabado-por-la-manana%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2012/05/19/foto-de-sabado-por-la-manana/"></g:plusone></div><p><img title="" class="alignnone" alt="image" src="http://blog.pcollaog.cl/wp-content/uploads/2012/05/wpid-IMG_20120519_100136.jpg" /></p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/GkGq1mTZ1y0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2012/05/19/foto-de-sabado-por-la-manana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La @javicollaov en colación</title>
		<link>http://blog.pcollaog.cl/2012/05/06/la-javicollaov-en-colacion/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=la-javicollaov-en-colacion</link>
		<comments>http://blog.pcollaog.cl/2012/05/06/la-javicollaov-en-colacion/#comments</comments>
		<pubDate>Sun, 06 May 2012 21:32:07 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[familia]]></category>
		<category><![CDATA[Javi]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=779</guid>
		<description><![CDATA[Tweet
]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton779" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FJ7I0uA&amp;text=RT%20%40pcollaog%20La%20%40javicollaov%20en%20colaci%C3%B3n&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2012%2F05%2F06%2Fla-javicollaov-en-colacion%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2012/05/06/la-javicollaov-en-colacion/"></g:plusone></div><p><img class="aligncenter" title="" src="http://blog.pcollaog.cl/wp-content/uploads/2012/05/wpid-IMG_20120506_160537.jpg" alt="image" /></p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/AilnxV8L7_0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2012/05/06/la-javicollaov-en-colacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regaloneando con la prima</title>
		<link>http://blog.pcollaog.cl/2012/04/29/regaloneando-con-la-prima/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=regaloneando-con-la-prima</link>
		<comments>http://blog.pcollaog.cl/2012/04/29/regaloneando-con-la-prima/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 14:57:31 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[familia]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[Javiera]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=774</guid>
		<description><![CDATA[Tweet
]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton774" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FIAqRdG&amp;text=RT%20%40pcollaog%20Regaloneando%20con%20la%20prima&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2012%2F04%2F29%2Fregaloneando-con-la-prima%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2012/04/29/regaloneando-con-la-prima/"></g:plusone></div><p><img class="aligncenter" title="" src="http://blog.pcollaog.cl/wp-content/uploads/2012/04/wpid-IMG_20120429_115426.jpg" alt="image" /></p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/iwbLqP2r5PI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2012/04/29/regaloneando-con-la-prima/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Haciendo maldades yo?</title>
		<link>http://blog.pcollaog.cl/2012/04/29/haciendo-maldades-yo/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=haciendo-maldades-yo</link>
		<comments>http://blog.pcollaog.cl/2012/04/29/haciendo-maldades-yo/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 13:23:14 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[familia]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[Javiera]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=771</guid>
		<description><![CDATA[Tweet
]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton771" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FIBHguW&amp;text=RT%20%40pcollaog%20Haciendo%20maldades%20yo%3F&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2012%2F04%2F29%2Fhaciendo-maldades-yo%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2012/04/29/haciendo-maldades-yo/"></g:plusone></div><p><a href="http://blog.pcollaog.cl/wp-content/uploads/2012/04/wpid-IMG_20120422_1023141.jpg"><img class="aligncenter" title="" src="http://blog.pcollaog.cl/wp-content/uploads/2012/04/wpid-IMG_20120422_102314.jpg" alt="image" /></a></p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/B45XA_KukPI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2012/04/29/haciendo-maldades-yo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extraer tracks de audio desde archivos flac y cue</title>
		<link>http://blog.pcollaog.cl/2012/04/28/extraer-tracks-de-audio-desde-archivos-flac-y-cue/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=extraer-tracks-de-audio-desde-archivos-flac-y-cue</link>
		<comments>http://blog.pcollaog.cl/2012/04/28/extraer-tracks-de-audio-desde-archivos-flac-y-cue/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 16:40:30 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[cue]]></category>
		<category><![CDATA[flac]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=762</guid>
		<description><![CDATA[TweetMe he encontrado mas de alguna vez con los estos archivos y aquí les dejo el cómo extraerlos para su mejor uso, dado que muchas veces viene un solo archivo FLAC con un pequeño archivo CUE.
¿Qué son estos archivos?

FLAC es la abreviación de &#8220;Free Lossless Audio Codec&#8221; y es codec que permite  [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton762" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FIbITkH&amp;text=RT%20%40pcollaog%20Extraer%20tracks%20de%20audio%20desde%20archivos%20flac%20y%20cue&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2012%2F04%2F28%2Fextraer-tracks-de-audio-desde-archivos-flac-y-cue%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2012/04/28/extraer-tracks-de-audio-desde-archivos-flac-y-cue/"></g:plusone></div><p>Me he encontrado mas de alguna vez con los estos archivos y aquí les dejo el cómo extraerlos para su mejor uso, dado que muchas veces viene un solo archivo <strong>FLAC</strong> con un pequeño archivo <strong>CUE</strong>.</p>
<p>¿Qué son estos archivos?</p>
<p><a href="http://en.wikipedia.org/wiki/File:Flac_logo_vector.svg"><img class="aligncenter" title="FLAC" src="http://upload.wikimedia.org/wikipedia/commons/e/e0/Flac_logo_vector.svg" alt="" width="262" height="130" /></a></p>
<p><strong>FLAC</strong> es la abreviación de <em>&#8220;Free Lossless Audio Codec&#8221; </em>y es <em>codec</em> que permite guardar música en alta resolución o dicho de otra forma, audio de baja compresión o sin pérdidas. Por otro lado <strong>CUE</strong> es un descriptor de archivos, es decir, describe (en el caso de audio) los tracks del disco (cuando comienzan y cuando terminan).</p>
<p>Como tenemos estos dos archivos,ahora&#8230; como podemos usarlos para extraer los tracks que contiene el album, manos a la obra.</p>
<p>Primero debemos tener las herramientas para hacerlo (en este caso para ubuntu):</p>
<pre>$ sudo apt-get install cuetools shntool flac</pre>
<p>Luego nos posicionamos en el directorio donde se encuentran los dos archivos (FLAC/CUE) y procedemos a separar los archivos segun el descriptor (CUE):</p>
<pre>$ cuebreakpoints archivo.cue | shnsplit -o flac archivo.flac</pre>
<p>Si todo sale bien y si los archivos están sin problemas, aparecerá algo como esto:</p>
<pre>Splitting [Album.flac] (47:27.20) --&gt; [split-track01.flac] (4:45.17) : 100% OK
Splitting [Album.flac] (47:27.20) --&gt; [split-track02.flac] (6:37.45) : 100% OK
Splitting [Album.flac] (47:27.20) --&gt; [split-track03.flac] (5:11.33) : 100% OK
Splitting [Album.flac] (47:27.20) --&gt; [split-track04.flac] (6:53.02) : 100% OK
Splitting [Album.flac] (47:27.20) --&gt; [split-track05.flac] (4:04.28) : 100% OK
Splitting [Album.flac] (47:27.20) --&gt; [split-track06.flac] (4:24.10) : 100% OK
Splitting [Album.flac] (47:27.20) --&gt; [split-track07.flac] (6:36.52) : 100% OK
Splitting [Album.flac] (47:27.20) --&gt; [split-track08.flac] (8:54.58) : 100% OK</pre>
<p>Lo último que queda por hacer, es extraer las descripciones de los <em>tracks</em> que están dentro del archivo CUE, esto hará que la <em>metadata</em> sea almacenada en cada uno de los archivos extraidos.</p>
<pre>$ cuetag archivo.cue split-track*.flac</pre>
<p>Simple o no?</p>
<p>Mas información en wikipedia:</p>
<ul>
<li>
<p id="firstHeading"><a title="Cue Sheet" href="http://en.wikipedia.org/wiki/Cue_sheet_%28computing%29">Cue sheet (computing)</a></p>
</li>
<li><a title="FLAC" href="http://en.wikipedia.org/wiki/Flac">Flac</a></li>
<li><a title="Lossless data compression" href="http://en.wikipedia.org/wiki/Lossless_compression">Lossless data compression</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/ViJNsCxBJSw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2012/04/28/extraer-tracks-de-audio-desde-archivos-flac-y-cue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Para ti, qué son las vacaciones?</title>
		<link>http://blog.pcollaog.cl/2012/01/11/para-ti-que-son-las-vacaciones/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=para-ti-que-son-las-vacaciones</link>
		<comments>http://blog.pcollaog.cl/2012/01/11/para-ti-que-son-las-vacaciones/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 20:01:16 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[familia]]></category>
		<category><![CDATA[Javiera]]></category>
		<category><![CDATA[Vacaciones]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=750</guid>
		<description><![CDATA[TweetEstas son nuestras primeras vacaciones con mi hija Javiera, hasta el momento de vacaciones tienen bien poco. Nos despertamos temprano, nos acostamos tarde y hay que estar constantemente jugando, mirando, vigilando y enseñando a la @javicollaov. Y esto es todos los días.
Antes&#8230; vacaciones para  [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton750" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fy7b8qX&amp;text=RT%20%40pcollaog%20Para%20ti%2C%20qu%C3%A9%20son%20las%20vacaciones%3F&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2012%2F01%2F11%2Fpara-ti-que-son-las-vacaciones%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2012/01/11/para-ti-que-son-las-vacaciones/"></g:plusone></div><p>Estas son nuestras primeras vacaciones con mi hija <em>Javiera</em>, hasta el momento de vacaciones tienen bien poco. Nos despertamos temprano, nos acostamos tarde y hay que estar constantemente jugando, mirando, vigilando y enseñando a la @javicollaov. Y esto es todos los días.</p>
<p>Antes&#8230; vacaciones para mi era desconectarme del trabajo y comenzar a pensar en mis proyectos personales, como por ejemplo, avanzar en mis códigos, estudiar o simplemente sacar un buen tema en la guitarra (de esos que te dejan pegado por mas de 1 semana). Muchos me decían, esas no son vacaciones (por lo de seguir programando o estudiar) y es que existe un vínculo/paradigma de que vacaciones es necesariamente playa, sol o viajes alrededor del mundo, disculpen pero yo no estoy de acuerdo con eso!</p>
<p>Ahora bien, con familia todo cambia, hay que pensar en que salir de vacaciones fuera de Santiago se deben adaptar para @javicollaov (que tiene 1 año 5 meses), pues bien hay que pensar en sus comidas, en los pañales y se deben cubrir todas sus necesidades a la perfección, de lo contrario podrías pasar unas pésimas vacaciones. Por suerte su mamá la @guzyy, siempre se preocupa de hasta el mas mínimo detalle y hay que decirlo, se preocupa de cosas que yo ni pensaría.</p>
<p>A pesar de todo, no hay nada mas lindo que la sonrisa de mi hija, cuando se come el yogurt a cucharadas, cuando te dice &#8220;papapapaaaaa&#8221; o simplemente cuando le preguntas la hora (si la ven no duden en preguntarle la hora), todo lo cansado, somnoliento o enojado simplemente desaparece.</p>
<div id="attachment_752" class="wp-caption aligncenter" style="width: 510px"><img src="http://blog.pcollaog.cl/wp-content/uploads/2012/01/javi_comiendo_yogurt.jpg" alt="" title="Javiera Comiendo Yogurt" width="500" height="423" class="size-full wp-image-752" /><p class="wp-caption-text">Javiera Comiendo Yogurt</p></div>
<p>Y es que espero que estas vacaciones (aunque no muy descansadas) lo vamos a pasar <del datetime="2012-01-11T19:40:41+00:00">la raja</del>, increíble, de pelos, maravilloso y todo eso porque llevamos a la @javicollaov, esa <em>personita</em> que nos mueve todos los días y nos hace la vida mas feliz.</p>
<p><strong>Y para ti? qué son las vacaciones?</strong></p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/Phaukg_76T8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2012/01/11/para-ti-que-son-las-vacaciones/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Todo calza pollo… los 33</title>
		<link>http://blog.pcollaog.cl/2011/09/29/todo-calza-pollo-los-33/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=todo-calza-pollo-los-33</link>
		<comments>http://blog.pcollaog.cl/2011/09/29/todo-calza-pollo-los-33/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 14:20:49 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[cumpleaños]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=721</guid>
		<description><![CDATA[Tweet
Hoy llegue al número que tanto se ha hablado durante mucho rato, el 33. Donde han salido innumerables personajes tratando de hacer que todo sume 33, a eso hay que agregar la coincidencia de los 33 mineros, los 33 caracteres (incluyendo los espacios) del mensaje de los mineros, fueron  [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton721" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpRvAPr&amp;text=RT%20%40pcollaog%20Todo%20calza%20pollo%26%238230%3B%20los%2033&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2011%2F09%2F29%2Ftodo-calza-pollo-los-33%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2011/09/29/todo-calza-pollo-los-33/"></g:plusone></div><p><img class="aligncenter size-full wp-image-743" title="32-33" src="http://blog.pcollaog.cl/wp-content/uploads/2011/09/32-33.png" alt="" width="380" height="250" /><br />
Hoy llegue al número que tanto se ha hablado durante mucho rato, el <strong>33</strong>. Donde han salido innumerables personajes tratando de hacer que todo sume 33, a eso hay que agregar la coincidencia de los 33 mineros, los 33 caracteres (incluyendo los espacios) del mensaje de los mineros, fueron encontrados en la semana 33 del año 2010, 33 la edad de Cristo y así un sin fin de otras posibles combinaciones que den 33.</p>
<p><img class="aligncenter size-full wp-image-744" title="Mensaje Mineros" src="http://blog.pcollaog.cl/wp-content/uploads/2011/09/MensajeMineros.jpg" alt="" width="380" height="126" /></p>
<p>&nbsp;</p>
<p>Para mi no es mas que un número que llevare durante todo año y lo mas lindo que lo llevaré junto a mi hermosa familia, con el amor de mi hija @javicollaov y mi @guzyy.</p>
<p><img class="aligncenter size-full wp-image-745" title="Mi Hija asombrada" src="http://blog.pcollaog.cl/wp-content/uploads/2011/09/DSC00455.jpg" alt="" width="530" height="355" /></p>
<p>Muchas gracias a todos y todas por sus saludos y que siga la música</p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/UJ5m5PMLRWY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2011/09/29/todo-calza-pollo-los-33/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>La simplicidad de Apache Jexl</title>
		<link>http://blog.pcollaog.cl/2011/08/29/la-simplicidad-de-apache-jexl/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=la-simplicidad-de-apache-jexl</link>
		<comments>http://blog.pcollaog.cl/2011/08/29/la-simplicidad-de-apache-jexl/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 17:39:36 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[EL]]></category>
		<category><![CDATA[expresion language]]></category>
		<category><![CDATA[jexl]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=730</guid>
		<description><![CDATA[Tweet
Este artículo puede ser útil para todos aquellos que alguna vez tuvieron que hacer cientos o miles de líneas de código usando reflexión para poder acceder a atributos, navegar mapas y recorrer listas en Java. Ahora bien si le agregamos que esas listas o mapas pueden tener más de lo mismo o  [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton730" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FmUT7H1&amp;text=RT%20%40pcollaog%20La%20simplicidad%20de%20Apache%20Jexl&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2011%2F08%2F29%2Fla-simplicidad-de-apache-jexl%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2011/08/29/la-simplicidad-de-apache-jexl/"></g:plusone></div><p><img alt="" src="http://commons.apache.org/jexl/images/jexl-logo-white.png" title="Apache Jexl" class="alignright" width="230" height="83" /><br />
Este artículo puede ser útil para todos aquellos que alguna vez tuvieron que hacer cientos o miles de líneas de código usando reflexión para poder acceder a atributos, navegar mapas y recorrer listas en Java. Ahora bien si le agregamos que esas listas o mapas pueden tener más de lo mismo o más complejo aún, objetos que contienen listas o mapas.</p>
<p>Aquí <a href="http://commons.apache.org/jexl/" title="Apache Jexl">Apache Jexl</a> hace bien su trabajo utilizando un lenguaje cómodo para poder acceder a esos recónditos lugares.</p>
<p><a href="http://commons.apache.org/jexl/" title="Apache Jexl">Apache Jexl</a> (Java EXpresion Language) fue inspirado por <a href="http://velocity.apache.org/">Apache Velocity</a> y por la definición de Expresion Language para JSTL y JSP 2.0. Ademas en la versión 2.0 se agregaron funcionalidades de <a href="http://java.sun.com/products/jsp/reference/techart/unifiedEL.html" title="Unified EL">Unified EL</a>.</p>
<p>Un pequeño ejemplo para que lo véan en acción:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TestDTO <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399; font-weight: bold;">String</span> _name<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399; font-weight: bold;">Map</span><span style="color: #339933;">&lt;</span><span style="color: #003399; font-weight: bold;">String</span>, <span style="color: #003399; font-weight: bold;">Object</span><span style="color: #339933;">&gt;</span> _dataBag<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/** Se omiten los setter y getter **/</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Esta es la definición de un DTO que tiene dos atributos, uno de ellos es un <strong>String</strong> y otro un <strong>Map</strong> cuya clave siempre será <strong>String</strong> y su valor puede ser un <strong>Object</strong>.</p>
<p>La problemática es obtener un valor desde ese DTO mediante reflexión, es decir, el ente que ejecuta la extracción del parámetro no conoce la definición <em>a priori</em> de esa clase. Es aquí donde entra Jexl y mediante un simple lenguaje le podemos indicar hasta donde acceder. A ese <em>cómo</em> y <em>qué</em> le llamaremos <strong>Expresión</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JexlEvaluator <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> JexlEngine jexl = <span style="color: #000000; font-weight: bold;">new</span> JexlEngine<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span>
		jexl.<span style="color: #006633;">setCache</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">512</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		jexl.<span style="color: #006633;">setLenient</span><span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		jexl.<span style="color: #006633;">setSilent</span><span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399; font-weight: bold;">Object</span> getValue<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> expresion, <span style="color: #003399; font-weight: bold;">Object</span> object<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399; font-weight: bold;">Expression</span> e = jexl.<span style="color: #006633;">createExpression</span><span style="color: #009900;">&#40;</span>expresion<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		JexlContext context = <span style="color: #000000; font-weight: bold;">new</span> MapContext<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		context.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;fua&quot;</span>, object<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">return</span> e.<span style="color: #006633;">evaluate</span><span style="color: #009900;">&#40;</span>context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Esta simple clase en su bloque estático configura <a href="http://commons.apache.org/jexl/" title="Apache Jexl">Apache Jexl</a> para luego ser utilizado en el método <strong>getValue</strong>. </p>
<p>El método <strong>getValue</strong> recibe como parámetros, la expresión y el objeto a evaluar. Dentro del método se crea el contexto de <a href="http://commons.apache.org/jexl/" title="Apache Jexl">Apache Jexl</a> (muy similar a un HashMap) al cual se le pasa el Objeto a inspecionar y luego evalúa la expresión.</p>
<p>Aquí les dejo el test unitario y la salida:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JexlEvaluatorTest <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> Log logger = LogFactory.<span style="color: #006633;">getLog</span><span style="color: #009900;">&#40;</span>JexlEvaluatorTest.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	@Test
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> testJexl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		JexlEvaluator je = <span style="color: #000000; font-weight: bold;">new</span> JexlEvaluator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">/* Expresión a evaluar */</span>
		<span style="color: #003399; font-weight: bold;">String</span> expresion = <span style="color: #0000ff;">&quot;fua.dataBag.hola2&quot;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003399; font-weight: bold;">Map</span><span style="color: #339933;">&lt;</span><span style="color: #003399; font-weight: bold;">String</span>, <span style="color: #003399; font-weight: bold;">Object</span><span style="color: #339933;">&gt;</span> map = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">HashMap</span><span style="color: #339933;">&lt;</span><span style="color: #003399; font-weight: bold;">String</span>, <span style="color: #003399; font-weight: bold;">Object</span><span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		map.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hola&quot;</span>, <span style="color: #0000ff;">&quot;Hola 1 del MAP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003399; font-weight: bold;">Map</span><span style="color: #339933;">&lt;</span><span style="color: #003399; font-weight: bold;">String</span>, <span style="color: #003399; font-weight: bold;">Object</span><span style="color: #339933;">&gt;</span> map2 = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">HashMap</span><span style="color: #339933;">&lt;</span><span style="color: #003399; font-weight: bold;">String</span>, <span style="color: #003399; font-weight: bold;">Object</span><span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		map2.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hola2&quot;</span>, <span style="color: #0000ff;">&quot;Hola 2 del MAP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		map.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hola2&quot;</span>, map2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		TestDTO testDTO = <span style="color: #000000; font-weight: bold;">new</span> TestDTO<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		testDTO.<span style="color: #006633;">setDataBag</span><span style="color: #009900;">&#40;</span>map2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		testDTO.<span style="color: #006633;">setName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;DTO Interesante&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003399; font-weight: bold;">Object</span> result = je.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span>expresion, testDTO<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		logger.<span style="color: #006633;">info</span><span style="color: #009900;">&#40;</span>result.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>La ejecución de ese test debería retornar lo siguiente:</p>
<pre>
[29/08/11 09:08:16:016 CLT] [ INFO] [JexlEvaluatorTest:44] - Hola 2 del MAP
</pre>
<p>Más adelante espero poder escribir sobre <a href="http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/expressions.html" title="Spring EL">Spring EL</a>, otra solución para evaluación de expresiones para Java.</p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/HF6VyU68D7k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2011/08/29/la-simplicidad-de-apache-jexl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Junit, ServletContextAware y MockServletContext</title>
		<link>http://blog.pcollaog.cl/2011/08/26/junit-servletcontextaware-y-mockservletcontext/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=junit-servletcontextaware-y-mockservletcontext</link>
		<comments>http://blog.pcollaog.cl/2011/08/26/junit-servletcontextaware-y-mockservletcontext/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 15:50:04 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[springframework]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=720</guid>
		<description><![CDATA[TweetSe me generó el siguiente problema al hacer un test unitario sobre una clase que implementa la interfaz de Spring Framework ServletContextAware.

public interface ServletContextAware &#123;
&#160;
	void setServletContext&#40;ServletContext servletContext&#41;;
&#160;
&#125;

Mediante esta interfaz puedes inyectar el  [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton720" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fpwxia3&amp;text=RT%20%40pcollaog%20Junit%2C%20ServletContextAware%20y%20MockServletContext&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2011%2F08%2F26%2Fjunit-servletcontextaware-y-mockservletcontext%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2011/08/26/junit-servletcontextaware-y-mockservletcontext/"></g:plusone></div><p>Se me generó el siguiente problema al hacer un test unitario sobre una clase que implementa la interfaz de Spring Framework <a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/context/ServletContextAware.html" title="ServletContextAware - Spring Framework API">ServletContextAware</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> ServletContextAware <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #006600; font-weight: bold;">void</span> setServletContext<span style="color: #009900;">&#40;</span>ServletContext servletContext<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Mediante esta interfaz puedes inyectar el <strong>servletContext</strong> a la configuración de tu Bean, siempre y cuando tengas un contexto web funcionando.</p>
<p>He aquí el segundo problema, <strong>¿ Cómo puedo tener el un contexto web dentro de un Junit ?</strong>. Puede que exista una mejor forma de hacerlo pero lo logré de la siguiente manera.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> </span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:context</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/context&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:p</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/p&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans </span>
<span style="color: #009900;">	http://www.springframework.org/schema/beans/spring-beans.xsd</span>
<span style="color: #009900;">	http://www.springframework.org/schema/context</span>
<span style="color: #009900;">	http://www.springframework.org/schema/context/spring-context-3.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.mock.web.MockServletContext&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Con esto y usando la anotación <a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html" title="Autowired - Spring Framework">Autowired</a> funciona de pelos la inyección del ServletContext.</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ReadFileFromWebinf <span style="color: #009900;">&#123;</span>
&nbsp;
	@Autowired
	<span style="color: #000000; font-weight: bold;">private</span> ServletContext _servletContext<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/*Se omite el resto de los métodos*/</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pero!!! cuando quise utilizar la interfaz <strong>ServletContextAware</strong> no funcionó y me quede con una propiedad en <strong>null</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ReadFileFromWebinf implement ServletContextAware <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> ServletContext _servletContext<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> setServletContext<span style="color: #009900;">&#40;</span>ServletContext servletContext<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		_servletContext=servletContext<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">/*Se omite el resto de los métodos*/</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Buscando por todos lados encontré que a mi test unitario le faltaba un par de configuraciones para la lectura del contexto Spring.</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">@RunWith<span style="color: #009900;">&#40;</span>SpringJUnit4ClassRunner.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>
@ContextConfiguration<span style="color: #009900;">&#40;</span>locations = <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">&quot;/test/test-context.xml&quot;</span> <span style="color: #009900;">&#125;</span>
@TestExecutionListeners<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> DependencyInjectionTestExecutionListener.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ReadFileFromWebinfTest <span style="color: #009900;">&#123;</span>
&nbsp;
	@Autowired
	<span style="color: #000000; font-weight: bold;">private</span> ReadFileFromWebinf _readFileFromWebinf<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> testReadFile<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #003399; font-weight: bold;">String</span> fileContent = _readFileFromWebinf.<span style="color: #006633;">load</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;archivo.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>fileContent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Las dos primeras anotaciones son para decirle a <strong>Spring</strong> que se va a utilizar <strong>Junit</strong> para ejecutar la clase y cual o cuales son los contextos a cargar.</p>
<p>Luego viene la anotación que me arregló el día, <strong>TestExecutionListeners</strong> y el <em>listener</em> asociado para la completar las inyecciones de dependencia de todos los <em>beans</em>. (Antes con <a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html" title="Autowired - Spring Framework">Autowired</a> solo hacía algunos).</p>
<p>Espero les sirva, cualquier duda bienvenida sea.</p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/XZ6ZNwMGzyw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2011/08/26/junit-servletcontextaware-y-mockservletcontext/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Framework – InitializingBean</title>
		<link>http://blog.pcollaog.cl/2011/08/21/spring-framework-initializingbean/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=spring-framework-initializingbean</link>
		<comments>http://blog.pcollaog.cl/2011/08/21/spring-framework-initializingbean/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 00:55:23 +0000</pubDate>
		<dc:creator>pcollaog</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[springframework]]></category>

		<guid isPermaLink="false">http://blog.pcollaog.cl/?p=697</guid>
		<description><![CDATA[Tweet
InitializingBean
Esta interfaz de Spring Framework te permite una vez configurado el contexto, ejecutar el método  afterPropertiesSet(), y como su nombre lo dice, lo ejecuta luego de ejecutar los métodos setter del bean (post configurar el bean).

public interface InitializingBean &#123;
&#160;
	void  [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton697" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpcA6sr&amp;text=RT%20%40pcollaog%20Spring%20Framework%20%26%238211%3B%20InitializingBean&amp;related=&amp;lang=es&amp;count=vertical&amp;counturl=http%3A%2F%2Fblog.pcollaog.cl%2F2011%2F08%2F21%2Fspring-framework-initializingbean%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://blog.pcollaog.cl/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><div class="plus-one-wrap"><g:plusone href="http://blog.pcollaog.cl/2011/08/21/spring-framework-initializingbean/"></g:plusone></div><p><img src="http://blog.pcollaog.cl/wp-content/uploads/2011/08/logo-e1313974441614.jpg" alt="Spring Framework - Logo" title="Spring Framework - Logo" width="150" height="100" class="alignright size-full wp-image-715" /></p>
<h2>InitializingBean</h2>
<p>Esta interfaz de <a href="http://www.springsource.org" title="SpringFramework">Spring Framework</a> te permite una vez configurado el contexto, ejecutar el método  <strong>afterPropertiesSet()</strong>, y como su nombre lo dice, lo ejecuta luego de ejecutar los métodos <em>setter</em> del bean (post configurar el bean).</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> InitializingBean <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #006600; font-weight: bold;">void</span> afterPropertiesSet<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399; font-weight: bold;">Exception</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Algunas aplicaciones de esta interfaz:</strong></p>
<ul>
<li>Validar que los atributos de un Bean estén correctamente inicializados.</li>
<li>A partir de los atributos ya setteados, generar otra propiedad en tiempo de configuración. Por ejemplo, se configura el bean con dos atributos de tipo <strong>int</strong> y en tiempo de configuración quiero calcular la suma de ambos y dejarlo en otra propiedad. ¿ Qué gano con esto ? que esa propiedad no se calcula cada vez que hago el <em>getter</em> sino que ya esta previamente calculada.</li>
</ul>
<p>Para el primer caso, recomiendo utilizar la clase <a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/util/Assert.html" title="SpringFramework - Assert API">Assert</a> ya que provee métodos con los que puedes invalidar que el contexto <strong>Spring</strong> levante si hay errores en la configuración.</p>
<p>Les dejo un código de ejemplo para que le echen un vistazo (le agregué la interfaz al ejemplo del <a href="http://blog.pcollaog.cl/2011/08/17/%c2%bfpor-que-factorybean-es-util/" title="FactoryBean">post anterior</a>)</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ExampleBean <span style="color: #000000; font-weight: bold;">implements</span> InitializingBean <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399; font-weight: bold;">Integer</span> _randomValue<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399; font-weight: bold;">Integer</span> _newValue<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399; font-weight: bold;">Integer</span> getRandomValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> _randomValue<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399; font-weight: bold;">Integer</span> getNewValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> _newValue<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #006600; font-weight: bold;">void</span> setRandomValue<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Integer</span> randomValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		_randomValue = randomValue<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> afterPropertiesSet<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399; font-weight: bold;">Exception</span> <span style="color: #009900;">&#123;</span>
		Assert.<span style="color: #006633;">notNull</span><span style="color: #009900;">&#40;</span>_randomValue, <span style="color: #0000ff;">&quot;randomValue properties cannot be null&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		_newValue = _randomValue <span style="color: #339933;">*</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Voy a explicar un poco y a groso modo el como funciona esta clase desde el punto de vista de Spring:</p>
<ul>
<li>Se lee la configuración asociada a la clase <strong>ExampleBean</strong></li>
<li>Se crea la instancia de la clase <strong>ExampleBean</strong></li>
<li>Luego vía inyección se le <em>settean</em> los atributos, entre ellos <strong>randomValue</strong></li>
<li>Luego de la creación del bean <strong>ExampleBean</strong> se ejecuta el método <strong>afterPropertiesSet()</strong>, en donde se realiza una validación del randomValue (este NO puede ser nulo, de serlo, el contexto de <strong>Spring</strong> no quedara operativo), si eso pasa OK, se calculará el atributo <strong>newValue</strong> y que será <strong>randomValue</strong> multipliado por <strong>10</strong>.</li>
<li>Finalmente y si no hay errores en el contexto de <strong>Spring</strong>, se deja la instancia del bean  <strong>ExampleBean</strong> en el contexto, es decir, el valor <strong>randomValue</strong> y <strong>newValue</strong> quedan listos para ser usados.</li>
</ul>
<p>Este proceso se realiza sólo una vez (salvo que el <em>scope</em> no sea <em>singleton</em>) y es en el momento de la creación del contexto.</p>
<p>Demás esta decir que esta clase/bean (ExampleBean) debe estar configurada en el archivo del contexto de Spring o vía las anotaciones (metadata) provistas para eso.</p>
<img src="http://feeds.feedburner.com/~r/pcollaog/~4/T1yhc4w75Mc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.pcollaog.cl/2011/08/21/spring-framework-initializingbean/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 5.550 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-19 10:24:09 --><!-- Compression = gzip -->

