<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/"
>

<channel>
	<title>GrailsMX</title>
	<atom:link href="http://grails.org.mx/feed/" rel="self" type="application/rss+xml" />
	<link>http://grails.org.mx</link>
	<description>Groovy y Grails en tu idioma</description>
	<lastBuildDate>Tue, 19 Mar 2013 22:47:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<!-- podcast_generator="Blubrry PowerPress/4.0.7" -->
	<itunes:summary>Groovy y Grails en tu idioma</itunes:summary>
	<itunes:author>GrailsMX</itunes:author>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://grails.org.mx/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:subtitle>Groovy y Grails en tu idioma</itunes:subtitle>
	<image>
		<title>GrailsMX</title>
		<url>http://grails.org.mx/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>http://grails.org.mx</link>
	</image>
		<item>
		<title>Podcast de GrailsMX, temporada 2 episodio 4</title>
		<link>http://grails.org.mx/2013/03/19/podcast-de-grailsmx-temporada-2-episodio-4/</link>
		<comments>http://grails.org.mx/2013/03/19/podcast-de-grailsmx-temporada-2-episodio-4/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 22:46:11 +0000</pubDate>
		<dc:creator>neodevelop</dc:creator>
				<category><![CDATA[Gradle]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[gdk]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=745</guid>
		<description><![CDATA[Les damos un cordial bienvenida Domingo, Tomás y JJ, y les traemos nuevamente la emisión del podcast en donde estamos hablando de Gradle. &#8220;Gradle es construcción automatizada evolucionada. Gradle puede automatizar la construcción, pruebas, publicación, despliegue y muchos más paquetes de software u otros tipos de proyectos tales que generen sitios estáticos, generar documentación o [...]]]></description>
			<content:encoded><![CDATA[<p>Les damos un cordial bienvenida Domingo, Tomás y JJ, y les traemos nuevamente la emisión del podcast en donde estamos hablando de Gradle.</p>
<blockquote><p>&#8220;Gradle es construcción automatizada evolucionada. Gradle puede automatizar la construcción, pruebas, publicación, despliegue y muchos más paquetes de software u otros tipos de proyectos tales que generen sitios estáticos, generar documentación o realmente cualquier otra cosa.</p>
<p>Gradle combina el poder y la flexibilidad de Ant con el administrador de dependencias y convenciones de Maven en una manera más efectiva para construir. Definido por un DSL Groovy y empaquetado con innovación, Gradle provee una forma declarativa para describir todo tipo de builds a través de defaults sensnibles. Gradle está rapidamente llegando a ser el sistema de construcción elegido por muchos proyectos open source.&#8221;</p></blockquote>
<p><iframe src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F84058013" frameborder="no" scrolling="no" width="100%" height="166"></iframe><br />
Además comentamos cosas como Maven, Ant y GAnt, pero sobre todo compartimos nuestras experiencias con el uso de Gradle.</p>
<p>Hablamos un poco de Selenium y PhantomJS para pruebas funcionales en casos en los que externamos la fase de pruebas.</p>
<p>Algunos libros de referencia de Gradle:</p>
<p><a href="http://www.gradle.org/books">http://www.gradle.org/books</a></p>
<p>En fin, hablamos de varias cosas, esperamos que les sirva tanto como a nosotros.</p>
<p>Suscríbete al feed en <a href="http://podcast.springhispano.org/grails.xml">http://podcast.springhispano.org/grails.xml</a></p>
<p>O bien descargalo en directo desde:</p>
<p><a href="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x04.mp3">http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02&#215;04.mp3</a></p>
<p>Muchas gracias por escucharnos !!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2013/03/19/podcast-de-grailsmx-temporada-2-episodio-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dudas de Grails</title>
		<link>http://grails.org.mx/2013/03/14/dudas-de-grails/</link>
		<comments>http://grails.org.mx/2013/03/14/dudas-de-grails/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 20:24:07 +0000</pubDate>
		<dc:creator>neodevelop</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=741</guid>
		<description><![CDATA[Hola! Hace poco tuve la oportunidad de impartir un curso de Grails, en donde vimos como uno de los últimos temas la integración con algunos beans de Spring que no vienen en el Application Context. Y uno de los asistentes tuvo una buena duda al respecto de integrar algunos beans adicionales, realmente la pregunta fue: [...]]]></description>
			<content:encoded><![CDATA[<p>Hola!</p>
<p>Hace poco tuve la oportunidad de impartir un curso de Grails, en donde vimos como uno de los últimos temas la integración con algunos beans de Spring que no vienen en el Application Context. Y uno de los asistentes tuvo una buena duda al respecto de integrar algunos beans adicionales, realmente la pregunta fue:</p>
<blockquote><p>Buen día JJ</p>
<p>Primero que nada agradecer el obsequio del curso, el cual por cierto me pareció excelente. En segundo lugar me gustaría hacerte una consulta, en el caso de no desear utilizar Hibernate para la persistencia y en cambio utilizar JDBCTemplate de Spring me quedó claro que es posible sin ningún problema, pero en el ejemplo que nos mostraste la inyección del jdbcTemplate se realizó directo en el Controller, mi pregunta es si se puede estructurar de una manera diferente, es decir, crear un paquete diferente en el que se encuentren las clases de Acceso a Datos (DAO&#8217;s) y ahi inyectar el jdbcTemplate y realizar la persistencia. Si es así en que parte de la estructura del proyecto se crearía dicho paquete, en grails-app al nivel del paquete de services??? o en la carpeta de src/groovy??? así mismo quisiera saber si la inyección de la clase DAO en el service se realiza de la misma forma que se inyecta un Servicie en el Controller???</p>
<p>Muchas gracias por tu ayuda de antemano.</p>
<p>Saludos</p>
<p>OVP</p></blockquote>
<p>Si bien, pude escribir un correo contestando exclusivamente, decidí hacerlo públic a través de un Hangout y aquí les dejo la grabación, dura alrededor de 20 minutos y puede que les sirva.</p>
<p><iframe src="http://www.youtube.com/embed/fox5m0TWVfs" frameborder="0" width="560" height="315"></iframe></p>
<p>Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2013/03/14/dudas-de-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Podcast de GrailsMx, temporada 2 episodio 3</title>
		<link>http://grails.org.mx/2013/03/06/podcast-de-grailsmx-temporada-2-episodio-3/</link>
		<comments>http://grails.org.mx/2013/03/06/podcast-de-grailsmx-temporada-2-episodio-3/#comments</comments>
		<pubDate>Wed, 06 Mar 2013 21:46:53 +0000</pubDate>
		<dc:creator>neodevelop</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=729</guid>
		<description><![CDATA[Es un placer traerles una nueva emisión del podcast de GrailsMX. Escúchalo en directo en SoundCloud: En esta ocasión los hosts Tomas Lin, Domingo Suárez y José Juan Reyes nos pusimos a platicar acerca de micro frameworks en Groovy. Intercambiando las experiencias que hemos tenido en su uso y experimentación, además de algunos comentarios enriquecedores [...]]]></description>
			<content:encoded><![CDATA[<p>Es un placer traerles una nueva emisión del podcast de GrailsMX.</p>
<p>Escúchalo en directo en SoundCloud:</p>
<p><iframe src="https://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F82148916" frameborder="no" scrolling="no" width="100%" height="166"></iframe></p>
<p>En esta ocasión los hosts Tomas Lin, Domingo Suárez y José Juan Reyes nos pusimos a platicar acerca de micro frameworks en Groovy. Intercambiando las experiencias que hemos tenido en su uso y experimentación, además de algunos comentarios enriquecedores acerca de herramientas relacionadas.</p>
<p>Los micro-frameworks:</p>
<p>Dropwizard - <a href="http://dropwizard.codahale.com/manual/" target="_blank">http://dropwizard.codahale.<wbr>com/manual/</wbr></a></p>
<p>Ratpack - <a href="https://github.com/ratpack/ratpack" target="_blank">https://github.com/ratpack/<wbr>ratpack</wbr></a></p>
<p>Gaelyk - <a href="http://gaelyk.appspot.com/" target="_blank">http://gaelyk.appspot.com/</a></p>
<p>Caelyf - <a href="http://caelyf.cloudfoundry.com/" target="_blank">http://caelyf.cloudfoundry.<wbr>com/</wbr></a></p>
<p>Vert.x - <a href="http://vertx.io/" target="_blank">http://vertx.io/</a></p>
<p>Vert.x Go - <a href="https://github.com/sebastienblanc/vertxgo" target="_blank">https://github.com/<wbr>sebastienblanc/vertxgo</wbr></a></p>
<p>La pasamos muy bien platicando  y planeando nuestra siguiente entrega del podcast.</p>
<p>Suscríbete al feed en <a href="http://podcast.springhispano.org/grails.xml">http://podcast.springhispano.org/grails.xml</a></p>
<p>O bien descargalo en directo desde:</p>
<p><a href="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x03.mp3">http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02&#215;03.mp3</a></p>
<p>Muchas gracias por escucharnos !!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2013/03/06/podcast-de-grailsmx-temporada-2-episodio-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Podcast de GrailsMx, temporada 2 episodio 2</title>
		<link>http://grails.org.mx/2013/02/21/podcast-de-grailsmx-temporada-2-episodio-2/</link>
		<comments>http://grails.org.mx/2013/02/21/podcast-de-grailsmx-temporada-2-episodio-2/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 08:12:00 +0000</pubDate>
		<dc:creator>neodevelop</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=717</guid>
		<description><![CDATA[Hola nuevamente! Nos da gusto entregarles la última grabación del podcast, en donde tenemos un nuevo Host: Tomás Lín desde Londres. La charla se ha vuelto más interesante, pues en esta ocasión estuvimos hablando principalmente de : Las nuevas características de Grails 2 El roadmap hacia grails 3 El diseño de Single Page Interface con [...]]]></description>
			<content:encoded><![CDATA[<p>Hola nuevamente!</p>
<p>Nos da gusto entregarles la última grabación del podcast, en donde tenemos un nuevo Host: Tomás Lín desde Londres.</p>
<p>La charla se ha vuelto más interesante, pues en esta ocasión estuvimos hablando principalmente de :</p>
<ul>
<li>Las nuevas características de Grails 2</li>
<li>El roadmap hacia grails 3</li>
<li>El diseño de Single Page Interface con Grails y algunos frameworks Javascript</li>
</ul>
<p>Además, nos ayudamos de algunas ligas que complementan la charla:</p>
<ul>
<li><a href="http://sebastien-arbogast.com/2013/02/14/top-5-reasons-why-you-should-consider-groovy-and-grails-for-your-enterprise-software-architecture-right-now/">http://sebastien-arbogast.com/2013/02/14/top-5-reasons-why-you-should-consider-groovy-and-grails-for-your-enterprise-software-architecture-right-now/</a></li>
<li><a href="http://grails.io/post/40093552028/road-to-grails-2-3-improved-dependency-resolution">http://grails.io/post/40093552028/road-to-grails-2-3-improved-dependency-resolution</a></li>
<li><a href="http://ofps.oreilly.com/titles/9781449323936/chapter_upgrading.html">http://ofps.oreilly.com/titles/9781449323936/chapter_upgrading.html</a></li>
</ul>
<p>Los vídeos comentados:</p>
<ul>
<li><a href="http://skillsmatter.com/podcast/groovy-grails/grails-for-hipsters">http://skillsmatter.com/podcast/groovy-grails/grails-for-hipsters</a></li>
<li><a href="http://www.youtube.com/watch?v=K-Y2pZOU1yQ">http://www.youtube.com/watch?v=K-Y2pZOU1yQ</a></li>
<li><a href="http://www.objectpartners.com/2013/01/24/presentation-grails-rest-with-client-side-javascript/">http://www.objectpartners.com/2013/01/24/presentation-grails-rest-with-client-side-javascript/</a></li>
<li><a href="http://www.youtube.com/watch?v=coKtdouoOBA">http://www.youtube.com/watch?v=coKtdouoOBA</a></li>
</ul>
<p>Mucho contenido muy interesante resumido en esta charla.</p>
<p>De antemano agradecemos la participación de Tomás y como lo comentamos, nos gustaría tenerlo más seguido como nuestro Host.</p>
<p>Suscríbete al feed en <a href="http://podcast.springhispano.org/grails.xml">http://podcast.springhispano.org/grails.xml</a></p>
<p>O bien descargalo en directo desde:</p>
<p><a href="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x02.mp3"><span style="color: #000000;">http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02&#215;02.mp3</span></a></p>
<p>Que disfruten del podcast,  tanto o más como nosotros al grabarlo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2013/02/21/podcast-de-grailsmx-temporada-2-episodio-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x02.mp3" length="27332568" type="audio/mpeg" />
		<itunes:subtitle>Hola nuevamente! - Nos da gusto entregarles la última grabación del podcast, en donde tenemos un nuevo Host: Tomás Lín desde Londres. - La charla se ha vuelto más interesante, pues en esta ocasión estuvimos hablando principalmente de : - </itunes:subtitle>
		<itunes:summary>Hola nuevamente!

Nos da gusto entregarles la última grabación del podcast, en donde tenemos un nuevo Host: Tomás Lín desde Londres.

La charla se ha vuelto más interesante, pues en esta ocasión estuvimos hablando principalmente de :

	Las nuevas características de Grails 2
	El roadmap hacia grails 3
	El diseño de Single Page Interface con Grails y algunos frameworks Javascript

Además, nos ayudamos de algunas ligas que complementan la charla:

	http://sebastien-arbogast.com/2013/02/14/top-5-reasons-why-you-should-consider-groovy-and-grails-for-your-enterprise-software-architecture-right-now/
	http://grails.io/post/40093552028/road-to-grails-2-3-improved-dependency-resolution
	http://ofps.oreilly.com/titles/9781449323936/chapter_upgrading.html

Los vídeos comentados:

	http://skillsmatter.com/podcast/groovy-grails/grails-for-hipsters
	http://www.youtube.com/watch?v=K-Y2pZOU1yQ
	http://www.objectpartners.com/2013/01/24/presentation-grails-rest-with-client-side-javascript/
	http://www.youtube.com/watch?v=coKtdouoOBA

Mucho contenido muy interesante resumido en esta charla.

De antemano agradecemos la participación de Tomás y como lo comentamos, nos gustaría tenerlo más seguido como nuestro Host.

Suscríbete al feed en http://podcast.springhispano.org/grails.xml

O bien descargalo en directo desde:

http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x02.mp3

Que disfruten del podcast,  tanto o más como nosotros al grabarlo...</itunes:summary>
		<itunes:author>GrailsMX</itunes:author>
		<itunes:explicit>no</itunes:explicit>
	</item>
		<item>
		<title>Podcast de GrailsMX, Temporada 2 episodio 1</title>
		<link>http://grails.org.mx/2013/02/12/podcast-de-grailsmx-temporada-2-episodio-1/</link>
		<comments>http://grails.org.mx/2013/02/12/podcast-de-grailsmx-temporada-2-episodio-1/#comments</comments>
		<pubDate>Tue, 12 Feb 2013 21:45:40 +0000</pubDate>
		<dc:creator>neodevelop</dc:creator>
				<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=710</guid>
		<description><![CDATA[En esta ocasión a través de un Hangout transmitimos y compartimos la grabación de esta edición del podcast. El tema principal fue Groovy 2 y sus nuevas características, entre ellas: @CompileStatic, @TypeChecked y memoize para la closures. Contamos con la participación de algunos de los asistentes al Hangout con algunas inquietudes. Fue muy entretenido usar [...]]]></description>
			<content:encoded><![CDATA[<p>En esta ocasión a través de un Hangout transmitimos y compartimos la grabación de esta edición del podcast. El tema principal fue Groovy 2 y sus nuevas características, entre ellas: @CompileStatic, @TypeChecked y memoize para la closures. Contamos con la participación de algunos de los asistentes al Hangout con algunas inquietudes. Fue muy entretenido usar este tipo de transmisión, seguramente la seguiremos usando en algunas de las futuras entregas.</p>
<p>La referencia a alguno de los temas que platicamos la pueden encontrar en :</p>
<ul>
<li><a href="http://groovy.codehaus.org/Groovy+2.0+release+notes">http://groovy.codehaus.org/Groovy+2.0+release+notes</a></li>
<li><a href="http://groovy.codehaus.org/Groovy+2.1+release+notes">http://groovy.codehaus.org/Groovy+2.1+release+notes</a></li>
</ul>
<p>Suscríbete al feed en <a href="http://podcast.springhispano.org/grails.xml">http://podcast.springhispano.org/grails.xml</a></p>
<p>O bien descargalo en directo desde:</p>
<p><a href="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x01.mp3">http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02&#215;01.mp3</a></p>
<p>Que lo disfruten como nosotros</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2013/02/12/podcast-de-grailsmx-temporada-2-episodio-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x01.mp3" length="30669554" type="audio/mpeg" />
		<itunes:subtitle>En esta ocasión a través de un Hangout transmitimos y compartimos la grabación de esta edición del podcast. El tema principal fue Groovy 2 y sus nuevas características, entre ellas: @CompileStatic, @TypeChecked y memoize para la closures.</itunes:subtitle>
		<itunes:summary>En esta ocasión a través de un Hangout transmitimos y compartimos la grabación de esta edición del podcast. El tema principal fue Groovy 2 y sus nuevas características, entre ellas: @CompileStatic, @TypeChecked y memoize para la closures. Contamos con la participación de algunos de los asistentes al Hangout con algunas inquietudes. Fue muy entretenido usar este tipo de transmisión, seguramente la seguiremos usando en algunas de las futuras entregas.

La referencia a alguno de los temas que platicamos la pueden encontrar en :

	http://groovy.codehaus.org/Groovy+2.0+release+notes
	http://groovy.codehaus.org/Groovy+2.1+release+notes

Suscríbete al feed en http://podcast.springhispano.org/grails.xml

O bien descargalo en directo desde:

http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x01.mp3

Que lo disfruten como nosotros</itunes:summary>
		<itunes:author>GrailsMX</itunes:author>
		<itunes:explicit>no</itunes:explicit>
	</item>
		<item>
		<title>Podcast de GrailsMX, Temporada 2 &#8211; Episodio 0</title>
		<link>http://grails.org.mx/2013/02/05/podcast-de-grailsmx-temporada-2-episodio-0/</link>
		<comments>http://grails.org.mx/2013/02/05/podcast-de-grailsmx-temporada-2-episodio-0/#comments</comments>
		<pubDate>Tue, 05 Feb 2013 22:59:53 +0000</pubDate>
		<dc:creator>neodevelop</dc:creator>
				<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=704</guid>
		<description><![CDATA[Es un gusto anunciarles que estamos de vuelta con el podcast de GrailsMX y queremos hablarles de muchas cosas que han pasado en el mundo de Groovy, Grails y Griffon. Nos ha gustado mucho el trabajo que hemos hecho con estas tecnologías y queremos compartir muchas cosas que hemos experimentado. Es por esto que queremos [...]]]></description>
			<content:encoded><![CDATA[<p>Es un gusto anunciarles que estamos de vuelta con el podcast de GrailsMX y queremos hablarles de muchas cosas que han pasado en el mundo de Groovy, Grails y Griffon. Nos ha gustado mucho el trabajo que hemos hecho con estas tecnologías y queremos compartir muchas cosas que hemos experimentado.</p>
<p>Es por esto que queremos anunciarles el podcast de la temporada 2, el episodio número 0, en donde hablamos un poco de la historia del podcast, y de las tecnologías, de su evolución y de algunos eventos a los que hemos asistido o bien hemos seguido a través de twitter.</p>
<p>Las ligas de los sitios aquí:</p>
<ul>
<li>Grails eXchange &#8211; Agenda y videos en cada una de los detalles</li>
<ul>
<li><a href="http://skillsmatter.com/event/groovy-grails/groovy-grails-exchange-2012">http://skillsmatter.com/event/groovy-grails/groovy-grails-exchange-2012</a></li>
</ul>
<li>TechMesh 2012</li>
<ul>
<li><a href="http://techmeshconf.com/">http://techmeshconf.com/</a></li>
</ul>
<li>SpringIO 2012</li>
<ul>
<li><a href="http://grails.org.mx/2012/03/08/resumen-del-springio-2012/">http://grails.org.mx/2012/03/08/resumen-del-springio-2012/</a></li>
</ul>
<li>Greach</li>
<ul>
<li><a href="http://greach.es/">http://greach.es/</a></li>
</ul>
</ul>
<p>Suscríbete al feed en <a href="http://podcast.springhispano.org/grails.xml">http://podcast.springhispano.org/grails.xml</a></p>
<p>O bien descargalo en directo desde:</p>
<p><a href="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x00.mp3">http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02&#215;00.mp3</a></p>
<p>Que lo disfruten como nosotros</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2013/02/05/podcast-de-grailsmx-temporada-2-episodio-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x00.mp3" length="19123640" type="audio/mpeg" />
		<itunes:subtitle>Es un gusto anunciarles que estamos de vuelta con el podcast de GrailsMX y queremos hablarles de muchas cosas que han pasado en el mundo de Groovy, Grails y Griffon. Nos ha gustado mucho el trabajo que hemos hecho con estas tecnologías y queremos compa...</itunes:subtitle>
		<itunes:summary>Es un gusto anunciarles que estamos de vuelta con el podcast de GrailsMX y queremos hablarles de muchas cosas que han pasado en el mundo de Groovy, Grails y Griffon. Nos ha gustado mucho el trabajo que hemos hecho con estas tecnologías y queremos compartir muchas cosas que hemos experimentado.

Es por esto que queremos anunciarles el podcast de la temporada 2, el episodio número 0, en donde hablamos un poco de la historia del podcast, y de las tecnologías, de su evolución y de algunos eventos a los que hemos asistido o bien hemos seguido a través de twitter.

Las ligas de los sitios aquí:

	Grails eXchange - Agenda y videos en cada una de los detalles

	http://skillsmatter.com/event/groovy-grails/groovy-grails-exchange-2012

	TechMesh 2012

	http://techmeshconf.com/

	SpringIO 2012

	http://grails.org.mx/2012/03/08/resumen-del-springio-2012/

	Greach

	http://greach.es/


Suscríbete al feed en http://podcast.springhispano.org/grails.xml

O bien descargalo en directo desde:

http://s3.amazonaws.com/media.grails.org.mx/podcast/temporada02/02x00.mp3

Que lo disfruten como nosotros</itunes:summary>
		<itunes:author>GrailsMX</itunes:author>
		<itunes:explicit>no</itunes:explicit>
	</item>
		<item>
		<title>Searchable plugin + DataBase Migration plugin</title>
		<link>http://grails.org.mx/2013/01/14/searchable-plugin-database-migration-plugin/</link>
		<comments>http://grails.org.mx/2013/01/14/searchable-plugin-database-migration-plugin/#comments</comments>
		<pubDate>Mon, 14 Jan 2013 14:00:02 +0000</pubDate>
		<dc:creator>sohjiro</dc:creator>
				<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=672</guid>
		<description><![CDATA[Bueno retomando un poco lo que hemos venido ocupando en post anteriores con el plugin de Searchable y de Database migration por separado funcionan perfectamente bien pero ¿que es lo que pasa cuando uno quiere incorporar los dos plugins en el mismo proyecto (algo que es relativamente común)  Y después agregar un campo a una [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno retomando un poco lo que hemos venido ocupando en post anteriores con el plugin de Searchable y de Database migration por separado funcionan perfectamente bien pero ¿que es lo que pasa cuando uno quiere incorporar los dos plugins en el mismo proyecto (algo que es relativamente común)  Y después agregar un campo a una tabla existente?</p>
<p>Por ejemplo supongamos que tenemos la siguiente estructura de clases de dominio:</p>
<pre class="brush: groovy; title: ; notranslate">
class Autor {
  String nombre
  String apellidoPaterno

  static hasMany = [libros : Libro]

  static constraints = {}
}

class Libro {
  String nombre
  String editorial

  static belongsTo = [autor : Autor]

  static constraints = {}
}
</pre>
<p>Ahora añadimos un par de datos, por ejemplo :</p>
<p>Stephen King, Doubleday The Shinning<br />
Paolini Christopher, Alfred A. Knopf Eragon</p>
<p>Una vez realizada esta acción procedemos a añadir el plugin de searchable y le añadimos a nuestros dominios lo siguiente para que el plugin haga su trabajo :</p>
<pre class="brush: groovy; title: ; notranslate">
class Autor {
  static searchable = true
 // Más Código
}

class Libro {
  static searchable = true
 // Más Código
}
</pre>
<p>Ahora levantamos la aplicación y accedemos a la siguiente URL</p>
<pre class="brush: xml; title: ; notranslate">

http://localhost:8080/EL-NOMBRE-DE-TU-APP/searchable
</pre>
<p>Una vez en ese link buscamos alguna palabra y todo lo relacionado a ello nos aparecerá ahí.</p>
<p>Hasta este momento todo va &#8220;viento en popa&#8221; pero de momento nos damos cuenta que al Autor le hace falta la nacionalidad y procedemos a añadirla:</p>
<pre class="brush: xml; title: ; notranslate">
class Autor {
  // Código
  String nacionalidad
  //Más código
}
</pre>
<p>Procedemos a reinicar la app para que tome los cambios y esperamos a que la aplicación levante&#8230;<br />
Después de unos momentos de correr la app de nuevo nos aparece un mensaje de error</p>
<pre class="brush: java; title: ; notranslate">
ERROR org.hibernate.util.JDBCExceptionReporter:234  Unknown column 'this_.nacionalidad' in 'field list'
ERROR org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer:213  {hibernate}: Failed to index the database
</pre>
<p>Hasta este punto la BD tiene razón ya que no hemos realizado un dbm-update de los cambios realizados en BD así que procedemos a realizarlo. Para esto primero generamos la diferencia y después el update</p>
<pre class="brush: groovy; title: ; notranslate">
dbm-gorm-diff anadiendo-columna-nacionalidad.groovy --add
</pre>
<p>Pero para nuestra mala suerte sigue saliendo el mismo error de que no conoce la columna &#8220;nacionalidad&#8221;.</p>
<p>Bueno el problema de este error surge de que primero se ejecuta el &#8220;indexado&#8221; del plugin de searchable antes de ejecutar el dbm-update o el dbm-gorm-diff<br />
Para corregir este pequeño problema tenemos de dos :</p>
<p>1.- Añadir el dbCreate en el dataSource para que ejecute el update (cosa que no es recomendable ya que de ello se encarga el plugin de database migration)</p>
<p>2.- Habilitar el indexado de datos bajo demanda (Elegiremos esta opción)</p>
<p>Bueno para ello primero debemos añadir la siguiente configuración en nuestro Config.groovy para deshabilitar el indexado al inicio</p>
<pre class="brush: groovy; title: ; notranslate">
searchable {
  bulkIndexOnStartup = false
}
</pre>
<p>Hasta este punto ya podemos ejecutar la aplicación y hacer lo que veniamos haciendo vamos a realizar el gorm-diff que nos resultó fallido en un paso anterior pero primero realizamos un <strong> grails clean </strong></p>
<pre class="brush: groovy; title: ; notranslate">
dbm-gorm-diff anadiendo-columna-nacionalidad.groovy --add
</pre>
<p>Como veremos ya se puede ejecutar y si lanzamos el dbm-update o levantamos la aplicación veremos el campo nacionalidad en el scaffold del Autor.</p>
<p>Ahora por no dejar vamos a eliminar la carpeta <strong>searchable-index</strong> que se encuentra en <strong>~/.grails/projects/NOMBRE-DE-TU-APP/</strong> para comprobar que en realidad esté haciendo lo que debería hacer. Una vez que reinicio la app vamos al apartado de searchable y buscamos por alguno de los datos que tengamos en nuestra BD.</p>
<p>Al realizar esto veremos que no nos regresa nada, se preguntarán ¿porque si ya funcionaba? Esto se debe a que el indexado que antes se ejecutaba al inicio ya ahora no se ejecuta y hay que lanzarlo manualmente y para realizar esto hacemos uso del Bootstrap para ello le inyectamos el servicio de searchable y ejecutamos el método index de la siguiente manera:</p>
<pre class="brush: groovy; title: ; notranslate">
class BootStrap {
  def searchableService

  def init = { servletContext -&gt;
    searchableService.index()
  }

  def destroy = {}
}
</pre>
<p><del datetime="2012-12-23T02:37:25+00:00">Bueno si han seguido hasta este punto los Post escritos en este lugar se deben de acordar del viejo amigo Bootstrap y que es lo que hace, sino les recomiendo que les den una leida a la mayor parte de ellos <img src='http://grails.org.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</del></p>
<p>Una vez hecho esto si regresamos al apartado de búsqueda y realizamos alguna veremos resultados en nuestra app.</p>
<p>De esta manera hacemos la integración de dos plugins bastante interesantes y que nos pueden ayudar en nuestras aplicaciones. Espero este post les evite algunos dolores de cabeza.</p>
<p>Felices fiestas y nos veremos en otro post.<br />
Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2013/01/14/searchable-plugin-database-migration-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bootstrap</title>
		<link>http://grails.org.mx/2012/12/02/bootstrap/</link>
		<comments>http://grails.org.mx/2012/12/02/bootstrap/#comments</comments>
		<pubDate>Sun, 02 Dec 2012 22:02:18 +0000</pubDate>
		<dc:creator>sohjiro</dc:creator>
				<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=641</guid>
		<description><![CDATA[Cuando creamos una aplicación con Grails ésta nos crea varios archivos y entre ellos nos crea uno en específico llamado BootStrap.groovy. Este archivo en particular nos sirve para ejecutar acciones al inicio de nuestra aplicación o antes de terminar. Supongamos que al iniciar nuestra aplicación queremos que cargue a un determinado grupo de usuarios de prueba [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando creamos una aplicación con Grails ésta nos crea varios archivos y entre ellos nos crea uno en específico llamado BootStrap.groovy. Este archivo en particular nos sirve para ejecutar acciones al inicio de nuestra aplicación o antes de terminar.</p>
<p>Supongamos que al iniciar nuestra aplicación queremos que cargue a un determinado grupo de usuarios de prueba para usarlos con Spring Security o que queremos cargar un catálogo de categoría de libros ( <img src='http://grails.org.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) Para realizar eso ubicamos en el archivo el closure de init y ahí procedemos a hacer lo siguiente :</p>
<pre class="brush: groovy; title: ; notranslate">
class BootStrap {
    def init = { servletContext
        new Categoria( categoria : &quot;Programación&quot; ).save()
        new Categoria( categoria : &quot;Historia&quot; ).save()
    }
    def destroy = {
    }
}
</pre>
<p>Incluso en esta parte podemos hacer uso de los environments por ejemplo si queremos que unos usuarios se carguen al inicio de la aplicación pero sólo para el ambiente de desarrollo podemos hacer lo siguiente :</p>
<pre class="brush: groovy; title: ; notranslate">
class BootStrap {
    def init = { servletContext
        switch(Environment.current){
        case Environment.DEVELOPMENT :
            new Usuario( username : &quot;usuario&quot;, password : &quot;12345678&quot; ).save()
            new Usuario( username : &quot;usuario2&quot;, password : &quot;12345678&quot; ).save()
        break
        case Environment.TEST :
        break
        case Environment.PRODUCTION :
        break
        }
    }
    def destroy = {
    }
}
</pre>
<p>Bueno con esto terminaremos esto nos vemos en el siguiente post.</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2012/12/02/bootstrap/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Alterando tablas con Database Migration</title>
		<link>http://grails.org.mx/2012/11/18/alterando-tablas-con-database-migration/</link>
		<comments>http://grails.org.mx/2012/11/18/alterando-tablas-con-database-migration/#comments</comments>
		<pubDate>Sun, 18 Nov 2012 21:13:02 +0000</pubDate>
		<dc:creator>sohjiro</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=609</guid>
		<description><![CDATA[Hace poco vimos la forma en la que se hacía un cambio en la base de datos ocupando el plugin de database migration. Este es el primer acercamiento a lo que se puede hacer con él. En este post veremos un caso un poco más complejo, esto es, que pasa cuando ya tengo datos en la [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco vimos la forma en la que se hacía un cambio en la base de datos ocupando el plugin de database migration. Este es el primer acercamiento a lo que se puede hacer con él.</p>
<p>En este post veremos un caso un poco más complejo, esto es, que pasa cuando ya tengo datos en la base y quiero realizar un cambio que borre una columna pero pasar esa información a otra columna en otra tabla, i.e. Tenemos la tabla Autor y la tabla Libro, la primera está compuesta de la siguiente manera:</p>
<pre class="brush: groovy; title: ; notranslate">
class Autor {
    String nombre
    String apellidoPaterno
    static hasMany = [libros : Libro]
}
</pre>
<p>Y la tabla Libro :</p>
<pre class="brush: groovy; title: ; notranslate">
class Libro{
    String titulo
    Integer numeroDePaginas
    static belongsTo = [autor : Autor]
}
</pre>
<p>Y como de momento esto nos sirve le generamos su changelog</p>
<pre class="brush: groovy; title: ; notranslate">
    dbm-generate-gorm-changelog changelog.groovy
</pre>
<p>Que nos genera lo siguiente :</p>
<pre class="brush: groovy; title: ; notranslate">
databaseChangeLog = {
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352952268429-1&quot;) {
           createTable(tableName: &quot;autor&quot;) {
                column(autoIncrement: &quot;true&quot;, name: &quot;id&quot;, type: &quot;bigint&quot;) {
                constraints(nullable: &quot;false&quot;, primaryKey: &quot;true&quot;, primaryKeyName: &quot;autorPK&quot;)
            }
            column(name: &quot;version&quot;, type: &quot;bigint&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
            column(name: &quot;apellido_paterno&quot;, type: &quot;varchar(255)&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
            column(name: &quot;nombre&quot;, type: &quot;varchar(255)&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
        }
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352952268429-2&quot;) {
        createTable(tableName: &quot;libro&quot;) {
           column(autoIncrement: &quot;true&quot;, name: &quot;id&quot;, type: &quot;bigint&quot;) {
                constraints(nullable: &quot;false&quot;, primaryKey: &quot;true&quot;, primaryKeyName: &quot;libroPK&quot;)
            }
            column(name: &quot;version&quot;, type: &quot;bigint&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
            column(name: &quot;autor_id&quot;, type: &quot;bigint&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
            column(name: &quot;numero_de_paginas&quot;, type: &quot;integer&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
            column(name: &quot;titulo&quot;, type: &quot;varchar(255)&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
        }
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352952268429-3&quot;) {
        addForeignKeyConstraint(baseColumnNames: &quot;autor_id&quot;, baseTableName: &quot;libro&quot;, constraintName: &quot;FK62323827AD9965E&quot;, deferrable: &quot;false&quot;, initiallyDeferred: &quot;false&quot;, referencedColumnNames: &quot;id&quot;, referencedTableName: &quot;autor&quot;, referencesUniqueColumn: &quot;false&quot;)
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352952268429-4&quot;) {
        createIndex(indexName: &quot;FK62323827AD9965E&quot;, tableName: &quot;libro&quot;) {
            column(name: &quot;autor_id&quot;)
        }
    }
}
</pre>
<p>Por cierto si ven el código generado primero crea el foreignKey y después el índice eso lo deben cambiar para que primero haga el createIndex ya que causará un error en la ejecución. Recuerden eliminar el dbCreate = &#8220;create-update&#8221; y hacer que el script se ejecute al iniciar la aplicación. Si trabajan con MySQL verifiquen sus tablassean del tipo InnoDB ya que de lo contrario causará un error al crear los ForeignKeys si es así o los eliminan del script o cambian el engine a InnoDB</p>
<p>Regresando al tema una vez que tenemos esto e insertamos datos y conforme  avanzamos en el desarrollo nos damos cuenta de que necesitamos separar las tablas porque requieren de una relación muchos a muchos es decir que la relación entre el Autor y el Libro se guarde en una tercera tabla llamada autor_libros. Para realizar esto necesitamos cambiar la relación en las clases de modo que quede de la siguiente manera</p>
<pre class="brush: groovy; title: ; notranslate">
class Autor {
    String nombre
    String apellidoPaterno
    static hasMany = [libros : Libro]
}
</pre>
<p>Y la clase Libro</p>
<pre class="brush: groovy; title: ; notranslate">
class Libro{
    String titulo
    Integer numeroDePaginas
    static belongsTo = Autor
    static hasMany = [autores : Autor]
}
</pre>
<p>Esto creará una tabla intermedia llamada autor_libros que contendrá las llaves primarias de ambas tablas ejecutamos la sentencia que nos dará la comparación entre el GORM y la BD de la siguiente manera</p>
<pre class="brush: groovy; title: ; notranslate">
    dbm-gorm-diff cambiando-relacion-autor-libro.groovy
</pre>
<p>Y nos dará el siguiente resultado</p>
<pre class="brush: groovy; title: ; notranslate">
databaseChangeLog = {
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-1&quot;) {
        createTable(tableName: &quot;autor_libros&quot;) {
            column(name: &quot;autor_id&quot;, type: &quot;bigint&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
            column(name: &quot;libro_id&quot;, type: &quot;bigint&quot;) {
                constraints(nullable: &quot;false&quot;)
            }
        }
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-2&quot;) {
        addPrimaryKey(columnNames: &quot;autor_id, libro_id&quot;, tableName: &quot;autor_libros&quot;)
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-3&quot;) {
        dropForeignKeyConstraint(baseTableName: &quot;libro&quot;, baseTableSchemaName: &quot;bookReviews&quot;, constraintName: &quot;FK62323827AD9965E&quot;)
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-4&quot;) {
        addForeignKeyConstraint(baseColumnNames: &quot;autor_id&quot;, baseTableName: &quot;autor_libros&quot;, constraintName: &quot;FK93C0044D7AD9965E&quot;, deferrable: &quot;false&quot;, initiallyDeferred: &quot;false&quot;, referencedColumnNames: &quot;id&quot;, referencedTableName: &quot;autor&quot;, referencesUniqueColumn: &quot;false&quot;)
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-5&quot;) {
        addForeignKeyConstraint(baseColumnNames: &quot;libro_id&quot;, baseTableName: &quot;autor_libros&quot;, constraintName: &quot;FK93C0044D58C2B5FE&quot;, deferrable: &quot;false&quot;, initiallyDeferred: &quot;false&quot;, referencedColumnNames: &quot;id&quot;, referencedTableName: &quot;libro&quot;, referencesUniqueColumn: &quot;false&quot;)
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-6&quot;) {
        createIndex(indexName: &quot;FK93C0044D58C2B5FE&quot;, tableName: &quot;autor_libros&quot;) {
            column(name: &quot;libro_id&quot;)
        }
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-7&quot;) {
        createIndex(indexName: &quot;FK93C0044D7AD9965E&quot;, tableName: &quot;autor_libros&quot;) {
            column(name: &quot;autor_id&quot;)
        }
    }
    changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-8&quot;) {
        dropColumn(columnName: &quot;autor_id&quot;, tableName: &quot;libro&quot;)
        }
    }
</pre>
<p>Leyendo el script nos damos cuenta de que entre las líneas se encuentra un DROP que hace referencia a la tabla libro en específico a la columna autor_id , esto quiere decir que al ejecutar el script la columna autor_id será eliminada junto con todos los registros ahí guardados&#8230; ESPERA un momento esto no es lo que quería ahora ¿como hago para que los datos que tenía ahí no sean eliminados y las relaciones se mantengan?</p>
<blockquote><p><strong>No se olviden de cambiar los create index antes de hacer el addForeingKey y en este caso después del addPrimaryKey de la tabla autor_libros y de paso el dropForeingKey antes del dropColumn</strong></p></blockquote>
<p>Bueno una forma es hacerla manualmente ( <img src='http://grails.org.mx/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  jajajajajaja ) en este caso tal vez se pueda hacer pero ¿y que pasa cuando hay más cambios así? ¿Todos los tenemos que hacer manualmente? Pues no, este plugin nos permite ejecutar consultas de todo tipo para hacer la migración un poco menos dolorosa.</p>
<p>Para realizar estos cambios ubicamos en el changelog el lugar en donde se crea la tabla intermedia y escribimos un sql tal como se muestra a continuación</p>
<pre class="brush: groovy; title: ; notranslate">
changeSet(author: &quot;sohjiro (generated)&quot;, id: &quot;1352954334486-1&quot;) {
    createTable(tableName: &quot;autor_libros&quot;) {
        column(name: &quot;autor_id&quot;, type: &quot;bigint&quot;) {
            constraints(nullable: &quot;false&quot;)
        }
        column(name: &quot;libro_id&quot;, type: &quot;bigint&quot;) {
            constraints(nullable: &quot;false&quot;)
        }
    }
    sql(&quot;insert into autor_libros (libro_id, autor_id) select id, autor_id from libro&quot;)
}
</pre>
<p>Ahora sólo queda agregarlo al changelog principal hay dos formas que lo escribamos nosotros al final del archivo changlog.groovy de la siguiente manera o que al ejecutar el dbm-gorm-diff después del nombre del archivo pongamos &#8211;add</p>
<pre class="brush: groovy; title: ; notranslate">
    include file: 'cambiando-relacion-autor-libro.groovy'
</pre>
<p>Ahora solamente levantamos la aplicación o sino la quieres levantar ejecuta lo siguiente desde la consola de grails</p>
<pre class="brush: groovy; title: ; notranslate">
    dbm-update
</pre>
<p>Y de esta manera todo lo que tengamos en esa tabla pasará a ser ejecutado, lo que tenga que ser eliminado será eliminado pero no sin antes hacer los movimientos pertinentes.</p>
<p>Espero les sirva este pequeño POST y cualquier duda o comentario acerca del mismo será bien recibida.</p>
<p>Hasta la próxima</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2012/11/18/alterando-tablas-con-database-migration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails y el SessionFactory</title>
		<link>http://grails.org.mx/2012/11/08/grails-y-el-sessionfactory/</link>
		<comments>http://grails.org.mx/2012/11/08/grails-y-el-sessionfactory/#comments</comments>
		<pubDate>Thu, 08 Nov 2012 21:49:28 +0000</pubDate>
		<dc:creator>neodevelop</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://grails.org.mx/?p=596</guid>
		<description><![CDATA[En esta ocasión escribiré de algunas cosas que he necesitado mientras estoy trabajando en construir una aplicación y usar el sessionFactory. Algunas de ellas las he rescatado de mi timeline de twitter y otras las he visto examinando un poco la documentación y el código fuente. A veces sólo deseamos habilitar el sql generado por [...]]]></description>
			<content:encoded><![CDATA[<p>En esta ocasión escribiré de algunas cosas que he necesitado mientras estoy trabajando en construir una aplicación y usar el sessionFactory.</p>
<p>Algunas de ellas las he rescatado de mi timeline de twitter y otras las he visto examinando un poco la documentación y el código fuente.</p>
<p>A veces sólo deseamos habilitar el sql generado por hibernate en ciertas partes de la aplicación y lo que hacemos es activar el atributo logSql desde DataSource.groovy o donde quiera que se tenga configurado. Pues bueno, podemos hacerlo de forma programática en controllers, servicios y/o taglibs con ayuda del sessionFactory.</p>
<pre class="brush: groovy; title: ; notranslate">
def sessionFactory // Inyección de dependencias
//....
def method(){
  //...
  sessionFactory.settings.sqlStatementLogger.logToStdout = true
  //...
}
</pre>
<p>En otras ocasiones he necesitado acceder al sessionFactory desde la grails console, y ahí no hay como tal una inyección de dependencias, y si ponemos sólo la definición como en el fragemtno pasado obtendremos NPE.</p>
<p>Sin embargo, dentro de la consola contamos con la variable &#8216;ctx&#8217;, una referencia al Application Context de la aplicación. Por lo tanto, podemos hacer lo siguiente:</p>
<pre class="brush: groovy; title: ; notranslate">
// En la grails console
def sessionFactory = ctx.sessionFactory
//Haz lo que quieras con el sessionFactory
</pre>
<p>Más cosas con los internals de grails en otros post.</p>
]]></content:encoded>
			<wfw:commentRss>http://grails.org.mx/2012/11/08/grails-y-el-sessionfactory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
