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

<channel>
	<title>RockDeveloper: Desarrollo Web y Programaci&#243;n &#187; spring</title>
	<atom:link href="http://blog.rockdeveloper.com/tag/spring/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rockdeveloper.com</link>
	<description>Articulos y noticias sobre desarrollo web, programaci&#243;n y sistemas</description>
	<lastBuildDate>Thu, 08 Jul 2010 16:47:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.4" -->
		<copyright>2006-2007 </copyright>
		<managingEditor>info@rockdeveloper.com (Rock Developer)</managingEditor>
		<webMaster>info@rockdeveloper.com (Rock Developer)</webMaster>
		<category>posts</category>
		<ttl>1440</ttl>
		<itunes:keywords>desarollo, desarrollo web, java, .net, ruby, spring, hibernate</itunes:keywords>
		<itunes:subtitle>Expresion de las mejores formas de desarrollar software. Cause Software Matters</itunes:subtitle>
		<itunes:summary>Expresion de las mejores formas de desarrollar software. Cause Software Matters</itunes:summary>
		<itunes:author>Rock Developer</itunes:author>
		<itunes:category text="Technology"/>
		<itunes:owner>
			<itunes:name>Rock Developer</itunes:name>
			<itunes:email>info@rockdeveloper.com</itunes:email>
		</itunes:owner>
		<itunes:block>No</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://blog.rockdeveloper.com/wp-content/uploads/2009/09/Picture_11.png" />
		<image>
			<url>http://blog.rockdeveloper.com/wp-content/uploads/2009/09/Picture_1.png</url>
			<title>RockDeveloper: Desarrollo Web y Programaci&#243;n</title>
			<link>http://blog.rockdeveloper.com</link>
			<width>144</width>
			<height>144</height>
		</image>
		<item>
		<title>Patron de Desarrollo Model View Controller</title>
		<link>http://blog.rockdeveloper.com/2009/09/02/patron-de-desarrollo-model-view-controller/</link>
		<comments>http://blog.rockdeveloper.com/2009/09/02/patron-de-desarrollo-model-view-controller/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 05:33:37 +0000</pubDate>
		<dc:creator>Iaax Page</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[metodologias]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://blog.rockdeveloper.com/?p=224</guid>
		<description><![CDATA[
			
				
			
		
En esta ocacion en el podcast de Rock Developer Cesar Reyes y Iaax Page nos hablan sobre el patron de arquitectura Model View Controller. Y como este nos ayuda a desarrollar mejor.
Vinculos del podcast

Model View Controller de acuerdo a la wikipedia (Ingles)
Symfony PHP
Ruby on Rails
Groovy and Grails
Asp.net MVC

Este es el episodio Numero 9 del podcast. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rockdeveloper.com%2F2009%2F09%2F02%2Fpatron-de-desarrollo-model-view-controller%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rockdeveloper.com%2F2009%2F09%2F02%2Fpatron-de-desarrollo-model-view-controller%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div id="attachment_228" class="wp-caption aligncenter" style="width: 310px"><a><img class="size-medium wp-image-228" title="Patron de Arquitectura Romana" src="http://blog.rockdeveloper.com/wp-content/uploads/2009/09/Patron-de-Arquitectura-Romana2-300x239.jpg" alt="Arquitectura: El Domo de Roma." width="300" height="239" /></a><p class="wp-caption-text">Arquitectura: El Domo de Roma.</p></div>
<p>En esta ocacion en el podcast de Rock Developer <a href="http://www.twitter.com/cesarreyesa">Cesar Reyes</a> y <a href="http://www.twitter.com/iaaxpage">Iaax Page</a> nos hablan sobre el patron de arquitectura Model View Controller. Y como este nos ayuda a desarrollar mejor.</p>
<p>Vinculos del podcast</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Model_view_controller">Model View Controller de acuerdo a la wikipedia (Ingles)</a></li>
<li><a href="http://www.symfony-project.org/">Symfony PHP</a></li>
<li><a href="http://rubyonrails.org/">Ruby on Rails</a></li>
<li><a href="http://grails.org/">Groovy and Grails</a></li>
<li><a href="http://www.asp.net/mvc/">Asp.net MVC</a></li>
</ul>
<p>Este es el episodio Numero 9 del podcast. Estamos trabajando para agregar un mejor feed que les permita descargar los episodios desde el iTunes. Un mejor plugin para el reproductor de MP3 y algunas otras cosas interesantes.</p>
<p>Queremos convertir a RockDeveloper en una mejor comunidad.</p>
<p>Muchas Gracias por su apoyo y no se olviden de hacer click en el boton retweet, en la esquina superior derecha de este post.</p>
<p>Saludos cordiales,</p>
<p>Iaax Page y Cesar Reyes</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rockdeveloper.com/2009/09/02/patron-de-desarrollo-model-view-controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<enclosure url="http://www.box.net/rssdownload/327331010/Model-View-Controller.mp3" length="19974187" type="audio/mpeg"/>
<itunes:duration>00:01:01</itunes:duration>
		<itunes:subtitle>[caption id="attachment_228" align="aligncenter" width="300" caption="Arquitectura: El Domo de Roma."][/caption]

En esta ocacion en el podcast de Rock Developer Cesar Reyes y Iaax Page nos hablan sobre ...</itunes:subtitle>
		<itunes:summary>[caption id="attachment_228" align="aligncenter" width="300" caption="Arquitectura: El Domo de Roma."][/caption]

En esta ocacion en el podcast de Rock Developer Cesar Reyes y Iaax Page nos hablan sobre el patron de arquitectura Model View Controller. Y como este nos ayuda a desarrollar mejor.

Vinculos del podcast

	Model View Controller de acuerdo a la wikipedia (Ingles)
	Symfony PHP
	Ruby on Rails
	Groovy and Grails
	Asp.net MVC

Este es el episodio Numero 9 del podcast. Estamos trabajando para agregar un mejor feed que les permita descargar los episodios desde el iTunes. Un mejor plugin para el reproductor de MP3 y algunas otras cosas interesantes.

Queremos convertir a RockDeveloper en una mejor comunidad.

Muchas Gracias por su apoyo y no se olviden de hacer click en el boton retweet, en la esquina superior derecha de este post.

Saludos cordiales,

Iaax Page y Cesar Reyes</itunes:summary>
		<itunes:keywords>Podcast,,Programacion</itunes:keywords>
		<itunes:author>Rock Developer</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>No</itunes:block>
	</item>
		<item>
		<title>Ejecutar una tarea asincrona en java con spring</title>
		<link>http://blog.rockdeveloper.com/2009/08/31/ejecutar-una-tarea-asincrona-en-java-con-spring/</link>
		<comments>http://blog.rockdeveloper.com/2009/08/31/ejecutar-una-tarea-asincrona-en-java-con-spring/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 00:02:31 +0000</pubDate>
		<dc:creator>Cesar Reyes</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[forza]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[tareas]]></category>

		<guid isPermaLink="false">http://blog.rockdeveloper.com/?p=207</guid>
		<description><![CDATA[
			
				
			
		
A veces necesitamos ejecutar una tarea que lleva un tiempo considerable y que el usuario no necesariamente necesita ser informado en el momento, por ejemplo el envío de un correo de notificación (en algunos casos), el hacer un proceso x que lleva tiempo, etc&#8230;
La clase TaskExecutor de spring abstrae la de java.concurrent.Executor de manera tal [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rockdeveloper.com%2F2009%2F08%2F31%2Fejecutar-una-tarea-asincrona-en-java-con-spring%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rockdeveloper.com%2F2009%2F08%2F31%2Fejecutar-una-tarea-asincrona-en-java-con-spring%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>A veces necesitamos ejecutar una tarea que lleva un tiempo considerable y que el usuario no necesariamente necesita ser informado en el momento, por ejemplo el envío de un correo de notificación (en algunos casos), el hacer un proceso x que lleva tiempo, etc&#8230;</p>
<p>La clase TaskExecutor de spring abstrae la de java.concurrent.Executor de manera tal que es mucho mas facil con spring, SimpleAsyncTaskExecutor (asincrono), SyncTaskExecutor (sincrono), SimpleThreadPoolTaskExecutor y otros mas.</p>
<p>Pongo un ejemplo del uso del SimpleAsyncTaskExecutor</p>
<pre class="brush: java;">
private TaskExecutor taskExecutor;

public void setTaskExecutor(TaskExecutor taskExecutor) {
    this.taskExecutor = taskExecutor;
}

taskExecutor.execute(new Runnable(){
    public void run() {
        ...
    }
});
</pre>
<p>Aquí mostramos la configuración de nuestra clase usando un TaskExecutor en spring.</p>
<pre class="brush: xml;">
&lt;bean id=&quot;taskExecutor&quot; class=&quot;org.springframework.core.task.SimpleAsyncTaskExecutor&quot;/&gt;

&lt;bean id=&quot;myBean&quot; class=&quot;org.myproject.MyBean&quot;&gt;
    &lt;property name=&quot;taskExecutor&quot; ref=&quot;taskExecutor&quot;/&gt;
&lt;/bean&gt;
</pre>
<p>Cuando usamos hibernate y tenemos relaciones &#8220;lazy&#8221; en nuestros objetos que son traidos con hibernate, esto nos puede traer problemas al usar simplemente el TaskExecutor, tenemos que hacer una especia de OpenSessionInThread para poder tener la session abierta y que se reutilice esa session a lo largo del codigo ejecutado.</p>
<p>Pongo un ejemplo de como seria esa implementación. El código es similar a la implementación del OpenSessionInViewFilter de spring.</p>
<pre class="brush: java;">
public abstract class OpenSessionInThreadTask implements Runnable{

    private ApplicationContext ctx;

    public OpenSessionInThreadTask(ApplicationContext ctx) {
        this.ctx = ctx;
    }

    protected abstract void runInternal();

    public final void run(){
        SessionFactory sessionFactory = lookupSessionFactory();
        boolean participate = false;

        // single session mode
        if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
            // Do not modify the Session: just set the participate flag.
            participate = true;
        }
        else {
            Session session = getSession(sessionFactory);
            TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
        }

        try{
            runInternal();
        }

        finally {
            if (!participate) {
                // single session mode
                SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory);
                closeSession(sessionHolder.getSession(), sessionFactory);
            }
        }
    }

    protected SessionFactory lookupSessionFactory() {
        return ctx.getBean(&quot;sessionFactory&quot;, SessionFactory.class);
    }

    protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
        Session session = SessionFactoryUtils.getSession(sessionFactory, true);
        FlushMode flushMode = FlushMode.MANUAL;
        if (flushMode != null) {
            session.setFlushMode(flushMode);
        }
        return session;
    }

    protected void closeSession(Session session, SessionFactory sessionFactory) {
        SessionFactoryUtils.closeSession(session);
    }

}
</pre>
<p>Y por ultimo el uso de la clase OpenSessionInThreadTask, de hecho esta clase ya se encuentra en <a href="http://forzaframework.org">forza</a>.</p>
<pre class="brush: java;">
taskExecutor.execute(new OpenSessionInThreadTask(ctx){
    public void runInternal() {
        ....
    }
});
</pre>
<p>Bueno espero que haya sido de su ayuda, no olviden dejar en los comentarios cualquier duda o aporte.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rockdeveloper.com/2009/08/31/ejecutar-una-tarea-asincrona-en-java-con-spring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un rato con grails, gorm, groovy y forza</title>
		<link>http://blog.rockdeveloper.com/2009/04/14/un-rato-con-grails-gorm-groovy-y-forza/</link>
		<comments>http://blog.rockdeveloper.com/2009/04/14/un-rato-con-grails-gorm-groovy-y-forza/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 15:05:53 +0000</pubDate>
		<dc:creator>Cesar Reyes</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[forzaframework]]></category>
		<category><![CDATA[gorm]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://blog.rockdeveloper.com/?p=26</guid>
		<description><![CDATA[
			
				
			
		
El fin de semana estuve haciendo unas pruebas para ver que tecnología usare para un nuevo proyecto, sin alejarme mucho de lo que ya manejo habitualmente que es: spring, hibernate, forza.
Decidí probar un poco con gorm (Grails Object Relational Mapping) unos de los principales componentes de grails, groovy, el lenguaje que usa grails y spring mvc. Por que no [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rockdeveloper.com%2F2009%2F04%2F14%2Fun-rato-con-grails-gorm-groovy-y-forza%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rockdeveloper.com%2F2009%2F04%2F14%2Fun-rato-con-grails-gorm-groovy-y-forza%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>El fin de semana estuve haciendo unas pruebas para ver que tecnología usare para un nuevo proyecto, sin alejarme mucho de lo que ya manejo habitualmente que es: <a href="http://springframework.org">spring</a>, <a href="http://hibernate.org">hibernate</a>, <a href="http://forzaframework.org">forza</a>.</p>
<p>Decidí probar un poco con <a href="http://grails.org/GORM">gorm </a>(Grails Object Relational Mapping) unos de los principales componentes de <a href="http://grails.org">grails</a>, groovy, el lenguaje que usa grails y spring mvc. Por que no hacer toda la aplicación en grails? pues la idea es aumentar la productividad poco a poco, teniendo el mayor control posible sobre la aplicación, a que me refiero?, bueno, ya usando hibernate a veces hay cosas que parecen magia, pero a veces la magia falla, entonces tienes que leer, analizar, debugear y entender un poco el como esta hecha esa magia, asi que empezamos poco a poco a entender la magia de grails.</p>
<p>Empece por ver la aplicación de ejemplo que viene cuando bajas grails, samples/petstore-mvc, y se ve muy sencillo, se simplifica mucho el acceso a datos, algo que no debería ser la gran ciencia. La aplicación viene por default configurada para hacer uso de una base de datos en memoria, entonces la configuro para que apunte a un servidor postgresql local, y para mi sorpresa deja de funcionar, raro, no ejecuta los inserts/updates pero si los selects, bueno para no hacerla larga, resulta ser que es el manejo de transacciones.</p>
<p>Que sigue?,  sustituyo gorm por el EntityManager de forza, el cual es un &#8220;Dao&#8221; genérico para simplificar el acceso a datos, junto con otras utilerias. Esto porque tengo ya varios años usando forza, y dado que vamos poco a poco con la nueva tecnologia, dejaremos a gorm para despues.</p>
<p><a href="http://groovy.codehaus.org/">Groovy</a>? me pareció muy productivo, bastante simple, puedes usar clases de java en groovy y viceversa, de esa manera puedes ir tomando poco a poco lo que te sirve mas de groovy.</p>
<p>Entonces la arquitectura de la aplicacion queda: Capa de acceso a datos con forza/hibernate con clases en groovy, capa de servicios en groovy, controllers en groovy con spring mvc, y jsp para las vistas.</p>
<p>En otro post esta semana voy a detallar la arquitectura de la aplicación y mostrar algunos ejemplos en codigo.</p>
<p>Espero sus comentarios y experiencias, saludos&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rockdeveloper.com/2009/04/14/un-rato-con-grails-gorm-groovy-y-forza/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
