<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Module Lost &#187; spring</title>
	<atom:link href="http://www.modlost.net/home/tag/spring/feed" rel="self" type="application/rss+xml" />
	<link>http://www.modlost.net/home</link>
	<description>Thoughts about software development &#38; productivity</description>
	<lastBuildDate>Sat, 12 Jun 2010 03:05:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Transformers in JAVA &amp; Spring Framework</title>
		<link>http://www.modlost.net/home/blog/transformers-in-java-spring-framework.html</link>
		<comments>http://www.modlost.net/home/blog/transformers-in-java-spring-framework.html#comments</comments>
		<pubDate>Mon, 16 Mar 2009 20:23:32 +0000</pubDate>
		<dc:creator>Abner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Techy]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.modlost.net/wordpress/?p=213</guid>
		<description><![CDATA[I&#8217;ve got a surprise when I saw this at Spring Web Service source code: Yeah!, there&#8217;s the code to create transformers!!!,&#8230; but transformers created with that function are autobots or decepticons? I wanted to find an answer so I went to the magic function createTransformer(). Transformer factory! It isn&#8217;t at Cibertron as everyone would expected, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve got a surprise when I saw this at Spring Web Service source code:</p>
<div><img src="http://www.modlost.net/home/images/stories/blog/2009/transformer.jpg" alt="" /></div>
<p><span id="more-213"></span></p>
<p>Yeah!, there&#8217;s the code to create transformers!!!,&#8230; but transformers created with that function are autobots or decepticons? I wanted to find an answer so I went to the magic function createTransformer().</p>
<div><img src="http://www.modlost.net/home/images/stories/blog/2009/transformer-factory.jpg" alt="" /></div>
<p><img src="http://www.modlost.net/home/images/stories/blog/2009/armada-prime.gif" alt="" align="right" /> Transformer factory! It isn&#8217;t at Cibertron as everyone would expected, the TransformerFactory class is part of J2SE and you can see its javadoc <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/transform/TransformerFactory.html">here</a>,&#8230;. LOL!</p>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html&amp;title=Transformers%20in%20JAVA%20%26%20Spring%20Framework&amp;bodytext=I%27ve%20got%20a%20surprise%20when%20I%20saw%20this%20at%20Spring%20Web%20Service%20source%20code%3A%0D%0A%0D%0A%0D%0A%0D%0AYeah%21%2C%20there%27s%20the%20code%20to%20create%20transformers%21%21%21%2C...%20but%20transformers%20created%20with%20that%20function%20are%20autobots%20or%20decepticons%3F%20I%20wanted%20to%20find%20an%20answer%20so%20I%20went%20to%20the%20m" title="Digg"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html&amp;title=Transformers%20in%20JAVA%20%26%20Spring%20Framework&amp;notes=I%27ve%20got%20a%20surprise%20when%20I%20saw%20this%20at%20Spring%20Web%20Service%20source%20code%3A%0D%0A%0D%0A%0D%0A%0D%0AYeah%21%2C%20there%27s%20the%20code%20to%20create%20transformers%21%21%21%2C...%20but%20transformers%20created%20with%20that%20function%20are%20autobots%20or%20decepticons%3F%20I%20wanted%20to%20find%20an%20answer%20so%20I%20went%20to%20the%20m" title="del.icio.us"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html&amp;t=Transformers%20in%20JAVA%20%26%20Spring%20Framework" title="Facebook"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html&amp;title=Transformers%20in%20JAVA%20%26%20Spring%20Framework&amp;annotation=I%27ve%20got%20a%20surprise%20when%20I%20saw%20this%20at%20Spring%20Web%20Service%20source%20code%3A%0D%0A%0D%0A%0D%0A%0D%0AYeah%21%2C%20there%27s%20the%20code%20to%20create%20transformers%21%21%21%2C...%20but%20transformers%20created%20with%20that%20function%20are%20autobots%20or%20decepticons%3F%20I%20wanted%20to%20find%20an%20answer%20so%20I%20went%20to%20the%20m" title="Google Bookmarks"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.friendfeed.com/share?title=Transformers%20in%20JAVA%20%26%20Spring%20Framework&amp;link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html" title="FriendFeed"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html&amp;title=Transformers%20in%20JAVA%20%26%20Spring%20Framework&amp;source=Module+Lost+Thoughts+about+software+development+%26amp%3B+productivity&amp;summary=I%27ve%20got%20a%20surprise%20when%20I%20saw%20this%20at%20Spring%20Web%20Service%20source%20code%3A%0D%0A%0D%0A%0D%0A%0D%0AYeah%21%2C%20there%27s%20the%20code%20to%20create%20transformers%21%21%21%2C...%20but%20transformers%20created%20with%20that%20function%20are%20autobots%20or%20decepticons%3F%20I%20wanted%20to%20find%20an%20answer%20so%20I%20went%20to%20the%20m" title="LinkedIn"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Transformers%20in%20JAVA%20%26%20Spring%20Framework%20-%20http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html" title="Twitter"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html&amp;t=Transformers%20in%20JAVA%20%26%20Spring%20Framework" title="MySpace"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html&amp;title=Transformers%20in%20JAVA%20%26%20Spring%20Framework&amp;body=I%27ve%20got%20a%20surprise%20when%20I%20saw%20this%20at%20Spring%20Web%20Service%20source%20code%3A%0D%0A%0D%0A%0D%0A%0D%0AYeah%21%2C%20there%27s%20the%20code%20to%20create%20transformers%21%21%21%2C...%20but%20transformers%20created%20with%20that%20function%20are%20autobots%20or%20decepticons%3F%20I%20wanted%20to%20find%20an%20answer%20so%20I%20went%20to%20the%20m" title="Ping.fm"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" /></a>
	<a rel="nofollow"  target="_blank" href="http://slashdot.org/bookmark.pl?title=Transformers%20in%20JAVA%20%26%20Spring%20Framework&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Fblog%2Ftransformers-in-java-spring-framework.html" title="Slashdot"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.modlost.net/home/blog/transformers-in-java-spring-framework.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spring: Obteniendo beans desde un servlet</title>
		<link>http://www.modlost.net/home/article/spring-obteniendo-beans-desde-un-servlet.html</link>
		<comments>http://www.modlost.net/home/article/spring-obteniendo-beans-desde-un-servlet.html#comments</comments>
		<pubDate>Sat, 28 Feb 2009 18:26:16 +0000</pubDate>
		<dc:creator>Abner</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Information Technologies]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.modlost.net/wordpress/?p=100</guid>
		<description><![CDATA[Una de las características más importantes de Spring Framework es la inyección de dependencias. Aplicando este patrón podemos lograr que las clases dependan de interfaces y no de alguna implementación específica, los beneficios de esta forma de trabajo son innumerables y pueden encontrar varios artículos que los describen a profundidad en internet y en la [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las características más importantes de <a href="http://www.springframework.org/">Spring Framework</a> es la <a href="http://en.wikipedia.org/wiki/Dependency_injection">inyección de dependencias</a>. Aplicando este patrón podemos lograr que las clases dependan de interfaces y no de alguna implementación específica, los beneficios de esta forma de trabajo son innumerables y pueden encontrar varios artículos que los describen a profundidad en internet y en la documentación de Spring.</p>
<p>Pero que sucede si nos encontramos con el siguiente problema:</p>
<p>Estamos usando Spring MVC en una aplicación web pero nos vemos obligados a implementar un Servlet. Dentro de este Servlet tenemos que invocar a un Service que ya esta siendo administrado por el contexto de Spring.</p>
<p><span id="more-100"></span>El consejo del <a>bug killer</a> puede llevarnos por dos caminos en este escenario:</p>
<ul>
<li>No buscar en internet a profundidad, ni preguntar y usar la solución más rápida que se te venga a la mente.</li>
<li>Seguir el buen diseño y obtener una referencia al Service administrado por Spring.</li>
</ul>
<p>En el primer caso tendríamos un Servlet implementado de la siguiente manera:</p>
<pre><code>
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal"><span style="color: #7f0055">public</span> <span style="color: #7f0055">class</span> DummyServlet <span style="color: #7f0055">extends</span> HttpServlet {</span>
<span style="color: #000000"><span style="white-space: pre"> </span></span>private<span style="color: #000000"> </span>static<span style="color: #000000"> </span>final<span style="color: #000000"> </span>long<span style="color: #000000"> </span><span style="color: #0000c0">serialVersionUID</span><span style="color: #000000"> = 1L;</span>

<span style="white-space: pre"> </span><span style="color: #7f0055">public</span> DummyServlet() {
<span style="white-space: pre">   </span><span style="color: #7f0055">super</span>();
<span style="white-space: pre"> </span>}

<span style="color: #000000"><span style="white-space: pre"> </span></span>@Override
<span style="white-space: pre"> </span><span style="color: #7f0055">protected</span> <span style="color: #7f0055">void</span> doGet(HttpServletRequest req, HttpServletResponse resp) <span style="color: #7f0055">throws</span> ServletException, IOException {
<span style="white-space: pre">   </span>DummyService service = new DummyServiceImpl();
<span style="white-space: pre">   </span>resp.getWriter().print(bean.getMessage());
<span style="white-space: pre"> </span>}
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal">}</span>
</code></pre>
<p><span style="font-weight: bold">¡Esta instanciando la implementación del Service directamente!</span>,&#8230; esto puede traer serios problemas si se tiene que cambiar el DummyServiceImpl por otro en un futuro próximo o lejano. Lo más probable es que no se actualice el Servlet y se presente un comportamiento no esperado del sistema.</p>
<p>En el segundo caso, usaríamos las mismas clases de Spring para obtener una referencia al Service:</p>
<pre><code>
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal"><span style="color: #7f0055">public</span> <span style="color: #7f0055">class</span> DummyServlet <span style="color: #7f0055">extends</span> HttpServlet {</span>
<span style="color: #000000"><span style="white-space: pre"> </span></span>private<span style="color: #000000"> </span>static<span style="color: #000000"> </span>final<span style="color: #000000"> </span>long<span style="color: #000000"> </span><span style="color: #0000c0">serialVersionUID</span><span style="color: #000000"> = 1L;</span>

<span style="white-space: pre"> </span><span style="color: #7f0055">public</span> DummyServlet() {
<span style="white-space: pre">   </span><span style="color: #7f0055">super</span>();
<span style="white-space: pre"> </span>}

<span style="color: #000000"><span style="white-space: pre"> </span></span>@Override
<span style="white-space: pre"> </span><span style="color: #7f0055">protected</span> <span style="color: #7f0055">void</span> doGet(HttpServletRequest req, HttpServletResponse resp) <span style="color: #7f0055">throws</span> ServletException, IOException {
<span style="white-space: pre">   </span>WebApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext();
<span style="white-space: pre">   </span>DummyService service = (DummyService) applicationContext.getBean(<span style="color: #2a00ff">"DummyService"</span>);
<span style="white-space: pre">   </span>resp.getWriter().print(bean.getMessage());
<span style="font-family: Monaco; font-size: 11px; line-height: normal"><span style="white-space: pre"> </span>}</span>
<span style="font-family: Monaco; font-size: 11px; line-height: normal; white-space: normal">}</span>
</code></pre>
<p>Manteniendo de esa manera el diseño y el patrón de inyección de dependiencias.</p>
<p>Happy Hacking!</p>
<p>UPDATE: Para simplificar el ejemplo de este articulo solo se instancia el Service en el Servlet pero debemos tener en cuenta que el Service puede depender de clases DAO o puede necesitar AOP. Esto agravaría más los problemas de instanciar una clase que ya esta siendo manejada por el contenedor IoC.</p>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;bodytext=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="Digg"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;notes=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="del.icio.us"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;t=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet" title="Facebook"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;annotation=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="Google Bookmarks"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.friendfeed.com/share?title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html" title="FriendFeed"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;source=Module+Lost+Thoughts+about+software+development+%26amp%3B+productivity&amp;summary=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="LinkedIn"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet%20-%20http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html" title="Twitter"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;t=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet" title="MySpace"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html&amp;title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;body=Una%20de%20las%20caracter%C3%ADsticas%20m%C3%A1s%20importantes%20de%20Spring%20Framework%20es%20la%20inyecci%C3%B3n%20de%20dependencias.%20Aplicando%20este%20patr%C3%B3n%20podemos%20lograr%20que%20las%20clases%20dependan%20de%20interfaces%20y%20no%20de%20alguna%20implementaci%C3%B3n%20espec%C3%ADfica%2C%20los%20beneficios%20de%20esta%20forma%20de" title="Ping.fm"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" /></a>
	<a rel="nofollow"  target="_blank" href="http://slashdot.org/bookmark.pl?title=Spring%3A%20Obteniendo%20beans%20desde%20un%20servlet&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-obteniendo-beans-desde-un-servlet.html" title="Slashdot"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.modlost.net/home/article/spring-obteniendo-beans-desde-un-servlet.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acegi Security: Custom Authentication</title>
		<link>http://www.modlost.net/home/article/acegi-security-custom-authentication.html</link>
		<comments>http://www.modlost.net/home/article/acegi-security-custom-authentication.html#comments</comments>
		<pubDate>Thu, 31 May 2007 18:14:46 +0000</pubDate>
		<dc:creator>Abner</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Information Technologies]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.modlost.net/wordpress/?p=89</guid>
		<description><![CDATA[I&#8217;ve been using Acegi Security in several projects with good results. It&#8217;s powerful and flexible! Sadly, sometimes, developers have problems when they want to customize it. The code is the best documentation, so, I recommend them to read the code and javadocs. Well, this time I&#8217;ll show you how to customize the authentication. I assume [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a href="http://www.acegisecurity.org/">Acegi Security</a> in several projects with good results. It&#8217;s powerful and flexible! Sadly, sometimes, developers have problems when they want to customize it. The code is the best documentation, so, I recommend them to read the code and javadocs. Well, this time I&#8217;ll show you how to customize the authentication. I assume a good knowledge of <a href="http://www.springframework.org/">Spring Framework</a> and basic knowledge of Acegi Security.</p>
<pre><tt><span style="color: #000000;">1:</span> <span style="color: #3f7f7f;">&lt;bean</span> <span style="color: #7f007f;">id</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationProcessingFilter"</span>
<span style="color: #000000;">2:</span>       <span style="color: #7f007f;">class</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"</span><span style="color: #3f7f7f;">&gt;</span>
<span style="color: #000000;">3:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationManager"</span>    <span style="color: #7f007f;">ref</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationManager"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">4:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationFailureUrl"</span> <span style="color: #7f007f;">value</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"/login.htm?login_error=1"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">5:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"defaultTargetUrl"</span>         <span style="color: #7f007f;">value</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"/foobar.htm"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">6:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"filterProcessesUrl"</span>       <span style="color: #7f007f;">value</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"/j_acegi_security_check"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">7:</span> <span style="color: #3f7f7f;">&lt;/bean&gt;</span>
</tt></pre>
<p>You usually define a bean like <code>authenticationProcessingFilter</code> and add it to a chain in the FilterChainProxy bean. With this configuration, you attempt to authenticate when a request to <code>/j_acegi_security_check</code> has been made, delegating the authentication to the <code>authenticationManager</code> bean. If everything is OK, the user is redirected to <code>/foobar.htm</code> otherwise to <code>/login.htm?login_error=1</code></p>
<p><span id="more-89"></span></p>
<p>Most of the time, you will be happy with this configuration but what happens if you need to do some additional validations before authentication. You have to extend AuthenticationProcessingFilter</p>
<pre><tt><span style="color: #000000;">01:</span> <strong><span style="color: #7f0055;">package</span></strong> net<span style="color: #7f0055;">.</span>modlost<span style="color: #7f0055;">.</span>framework<span style="color: #7f0055;">.</span>security<span style="color: #7f0055;">;</span>
<span style="color: #000000;">02:</span>
<span style="color: #000000;">03:</span> <strong><span style="color: #7f0055;">import</span></strong> java<span style="color: #7f0055;">.</span>io<span style="color: #7f0055;">.</span>IOException<span style="color: #7f0055;">;</span>
<span style="color: #000000;">04:</span>
<span style="color: #000000;">05:</span> <strong><span style="color: #7f0055;">import</span></strong> javax<span style="color: #7f0055;">.</span>servlet<span style="color: #7f0055;">.</span>http<span style="color: #7f0055;">.</span>HttpServletRequest<span style="color: #7f0055;">;</span>
<span style="color: #000000;">06:</span> <strong><span style="color: #7f0055;">import</span></strong> javax<span style="color: #7f0055;">.</span>servlet<span style="color: #7f0055;">.</span>http<span style="color: #7f0055;">.</span>HttpServletResponse<span style="color: #7f0055;">;</span>
<span style="color: #000000;">07:</span>
<span style="color: #000000;">08:</span> <strong><span style="color: #7f0055;">import</span></strong> org<span style="color: #7f0055;">.</span>acegisecurity<span style="color: #7f0055;">.</span>AuthenticationException<span style="color: #7f0055;">;</span>
<span style="color: #000000;">09:</span> <strong><span style="color: #7f0055;">import</span></strong> org<span style="color: #7f0055;">.</span>acegisecurity<span style="color: #7f0055;">.</span>ui<span style="color: #7f0055;">.</span>webapp<span style="color: #7f0055;">.</span>AuthenticationProcessingFilter<span style="color: #7f0055;">;</span>
<span style="color: #000000;">10:</span>
<span style="color: #000000;">11:</span> <span style="color: #3f5fbf;">/**</span>
<span style="color: #000000;">12:</span> <span style="color: #3f5fbf;"> * @author Abner Ballardo Urco</span>
<span style="color: #000000;">13:</span> <span style="color: #3f5fbf;"> *</span>
<span style="color: #000000;">14:</span> <span style="color: #3f5fbf;"> */</span>
<span style="color: #000000;">15:</span> <strong><span style="color: #7f0055;">public</span></strong> <strong><span style="color: #7f0055;">class</span></strong> CustomAuthenticationProcessingFilter <strong><span style="color: #7f0055;">extends</span></strong>
<span style="color: #000000;">16:</span>                 AuthenticationProcessingFilter <span style="color: #7f0055;">{</span>
<span style="color: #000000;">17:</span>
<span style="color: #000000;">18:</span>         @Override
<span style="color: #000000;">19:</span>         <strong><span style="color: #7f0055;">protected</span></strong> <strong><span style="color: #7f0055;">void</span></strong> <span style="color: #000000;">onPreAuthentication</span><span style="color: #7f0055;">(</span>HttpServletRequest request<span style="color: #7f0055;">,</span>
<span style="color: #000000;">20:</span>                         HttpServletResponse response<span style="color: #7f0055;">)</span> <strong><span style="color: #7f0055;">throws</span></strong> AuthenticationException<span style="color: #7f0055;">,</span>
<span style="color: #000000;">21:</span>                         IOException <span style="color: #7f0055;">{</span>
<span style="color: #000000;">22:</span>
<span style="color: #000000;">23:</span>                 <strong><span style="color: #7f0055;">if</span></strong> <span style="color: #7f0055;">(!</span> <span style="color: #000000;">validAuthenticationRequest</span><span style="color: #7f0055;">(</span>request<span style="color: #7f0055;">,</span>response<span style="color: #7f0055;">))</span> <span style="color: #7f0055;">{</span>
<span style="color: #000000;">24:</span>                         <strong><span style="color: #7f0055;">throw</span></strong> <strong><span style="color: #7f0055;">new</span></strong> <span style="color: #000000;">FooBarAuthenticationException</span><span style="color: #7f0055;">();</span>
<span style="color: #000000;">25:</span>                 <span style="color: #7f0055;">}</span>
<span style="color: #000000;">26:</span>
<span style="color: #000000;">27:</span>         <span style="color: #7f0055;">}</span>
<span style="color: #000000;">28:</span>
<span style="color: #000000;">29:</span>         <strong><span style="color: #7f0055;">private</span></strong> <strong><span style="color: #7f0055;">boolean</span></strong> <span style="color: #000000;">validAuthenticationRequest</span><span style="color: #7f0055;">(</span>HttpServletRequest request<span style="color: #7f0055;">,</span>
<span style="color: #000000;">30:</span>                         HttpServletResponse response<span style="color: #7f0055;">)</span> <span style="color: #7f0055;">{</span>
<span style="color: #000000;">31:</span>                 <strong><span style="color: #7f0055;">return</span></strong> <strong><span style="color: #7f0055;">false</span></strong><span style="color: #7f0055;">;</span>
<span style="color: #000000;">32:</span>         <span style="color: #7f0055;">}</span>
<span style="color: #000000;">33:</span>
<span style="color: #000000;">34:</span> <span style="color: #7f0055;">}</span>
</tt></pre>
<p>Acegi provides a handily method: <code>onPreAuthentication</code>, you just need to override it, do your additional validations and throw an exception when the validation failed. This exception could extend <code>AuthenticationException</code> or <code>IOException</code>.</p>
<pre><tt><span style="color: #000000;">01:</span> <strong><span style="color: #7f0055;">package</span></strong> net<span style="color: #7f0055;">.</span>modlost<span style="color: #7f0055;">.</span>framework<span style="color: #7f0055;">.</span>security<span style="color: #7f0055;">;</span>
<span style="color: #000000;">02:</span>
<span style="color: #000000;">03:</span> <strong><span style="color: #7f0055;">import</span></strong> org<span style="color: #7f0055;">.</span>acegisecurity<span style="color: #7f0055;">.</span>AuthenticationException<span style="color: #7f0055;">;</span>
<span style="color: #000000;">04:</span>
<span style="color: #000000;">05:</span> <span style="color: #3f5fbf;">/**</span>
<span style="color: #000000;">06:</span> <span style="color: #3f5fbf;"> * @author Abner Ballardo Urco</span>
<span style="color: #000000;">07:</span> <span style="color: #3f5fbf;"> *</span>
<span style="color: #000000;">08:</span> <span style="color: #3f5fbf;"> */</span>
<span style="color: #000000;">09:</span> <strong><span style="color: #7f0055;">public</span></strong> <strong><span style="color: #7f0055;">class</span></strong> FooBarAuthenticationException <strong><span style="color: #7f0055;">extends</span></strong> AuthenticationException <span style="color: #7f0055;">{</span>
<span style="color: #000000;">10:</span>
<span style="color: #000000;">11:</span>         <strong><span style="color: #7f0055;">public</span></strong> <span style="color: #000000;">FooBarAuthenticationException</span><span style="color: #7f0055;">()</span> <span style="color: #7f0055;">{</span>
<span style="color: #000000;">12:</span>                 <strong><span style="color: #7f0055;">super</span></strong><span style="color: #7f0055;">(</span><span style="color: #2a00ff;">"FooBar Authentication Exception"</span><span style="color: #7f0055;">);</span>
<span style="color: #000000;">13:</span>         <span style="color: #7f0055;">}</span>
<span style="color: #000000;">14:</span>
<span style="color: #000000;">15:</span> <span style="color: #7f0055;">}</span>
</tt></pre>
<p>If <code>onPreAuthentication</code> doesn&#8217;t throw an exception, the normal authentication process continues. This isn&#8217;t the end of the story, what happens if you need to show different views according to the exception?. This step is a peace of cake!</p>
<pre><tt><span style="color: #000000;">01:</span> <span style="color: #3f7f7f;">&lt;bean</span> <span style="color: #7f007f;">id</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationProcessingFilter"</span>
<span style="color: #000000;">02:</span>       <span style="color: #7f007f;">class</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"</span><span style="color: #3f7f7f;">&gt;</span>
<span style="color: #000000;">03:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationManager"</span>    <span style="color: #7f007f;">ref</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationManager"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">04:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"authenticationFailureUrl"</span> <span style="color: #7f007f;">value</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"/login.htm?login_error=1"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">05:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"defaultTargetUrl"</span>         <span style="color: #7f007f;">value</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"/foobar.htm"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">06:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"filterProcessesUrl"</span>       <span style="color: #7f007f;">value</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"/j_acegi_security_check"</span><span style="color: #3f7f7f;">/&gt;</span>
<span style="color: #000000;">07:</span>   <span style="color: #3f7f7f;">&lt;property</span> <span style="color: #7f007f;">name</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"exceptionMappings"</span><span style="color: #3f7f7f;">&gt;</span>
<span style="color: #000000;">08:</span>   <span style="color: #3f7f7f;">&lt;props&gt;</span>
<span style="color: #000000;">09:</span>     <span style="color: #3f7f7f;">&lt;prop</span> <span style="color: #7f007f;">key</span><span style="color: #990000;">=</span><span style="color: #2a00ff;">"net.modlost.framework.security.FooBarAuthenticationException"</span><span style="color: #3f7f7f;">&gt;</span>/foobarError.jsp<span style="color: #3f7f7f;">&lt;/prop&gt;</span>
<span style="color: #000000;">10:</span>   <span style="color: #3f7f7f;">&lt;/props&gt;</span>
<span style="color: #000000;">11:</span>   <span style="color: #3f7f7f;">&lt;/property&gt;</span>
<span style="color: #000000;">12:</span> <span style="color: #3f7f7f;">&lt;/bean&gt;</span>
</tt></pre>
<p>Defining the property <code>exceptionMappings</code> in <code>authenticationProcessingFilter</code> you can add all the exceptions (from Acegi and yours) and the urls to redirect to. If the exception is not found in <code>exceptionMappings</code> the default <code>authenticationFailureUrl</code> will be used.</p>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html&amp;title=Acegi%20Security%3A%20Custom%20Authentication&amp;bodytext=I%27ve%20been%20using%20Acegi%20Security%20in%20several%20projects%20with%20good%20results.%20It%27s%20powerful%20and%20flexible%21%20Sadly%2C%20sometimes%2C%20developers%20have%20problems%20when%20they%20want%20to%20customize%20it.%20The%20code%20is%20the%20best%20documentation%2C%20so%2C%20I%20recommend%20them%20to%20read%20the%20code%20and" title="Digg"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html&amp;title=Acegi%20Security%3A%20Custom%20Authentication&amp;notes=I%27ve%20been%20using%20Acegi%20Security%20in%20several%20projects%20with%20good%20results.%20It%27s%20powerful%20and%20flexible%21%20Sadly%2C%20sometimes%2C%20developers%20have%20problems%20when%20they%20want%20to%20customize%20it.%20The%20code%20is%20the%20best%20documentation%2C%20so%2C%20I%20recommend%20them%20to%20read%20the%20code%20and" title="del.icio.us"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html&amp;t=Acegi%20Security%3A%20Custom%20Authentication" title="Facebook"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html&amp;title=Acegi%20Security%3A%20Custom%20Authentication&amp;annotation=I%27ve%20been%20using%20Acegi%20Security%20in%20several%20projects%20with%20good%20results.%20It%27s%20powerful%20and%20flexible%21%20Sadly%2C%20sometimes%2C%20developers%20have%20problems%20when%20they%20want%20to%20customize%20it.%20The%20code%20is%20the%20best%20documentation%2C%20so%2C%20I%20recommend%20them%20to%20read%20the%20code%20and" title="Google Bookmarks"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.friendfeed.com/share?title=Acegi%20Security%3A%20Custom%20Authentication&amp;link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html" title="FriendFeed"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html&amp;title=Acegi%20Security%3A%20Custom%20Authentication&amp;source=Module+Lost+Thoughts+about+software+development+%26amp%3B+productivity&amp;summary=I%27ve%20been%20using%20Acegi%20Security%20in%20several%20projects%20with%20good%20results.%20It%27s%20powerful%20and%20flexible%21%20Sadly%2C%20sometimes%2C%20developers%20have%20problems%20when%20they%20want%20to%20customize%20it.%20The%20code%20is%20the%20best%20documentation%2C%20so%2C%20I%20recommend%20them%20to%20read%20the%20code%20and" title="LinkedIn"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Acegi%20Security%3A%20Custom%20Authentication%20-%20http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html" title="Twitter"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html&amp;t=Acegi%20Security%3A%20Custom%20Authentication" title="MySpace"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html&amp;title=Acegi%20Security%3A%20Custom%20Authentication&amp;body=I%27ve%20been%20using%20Acegi%20Security%20in%20several%20projects%20with%20good%20results.%20It%27s%20powerful%20and%20flexible%21%20Sadly%2C%20sometimes%2C%20developers%20have%20problems%20when%20they%20want%20to%20customize%20it.%20The%20code%20is%20the%20best%20documentation%2C%20so%2C%20I%20recommend%20them%20to%20read%20the%20code%20and" title="Ping.fm"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" /></a>
	<a rel="nofollow"  target="_blank" href="http://slashdot.org/bookmark.pl?title=Acegi%20Security%3A%20Custom%20Authentication&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Facegi-security-custom-authentication.html" title="Slashdot"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.modlost.net/home/article/acegi-security-custom-authentication.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Framework en el Perú</title>
		<link>http://www.modlost.net/home/article/spring-framework-en-el-peru.html</link>
		<comments>http://www.modlost.net/home/article/spring-framework-en-el-peru.html#comments</comments>
		<pubDate>Wed, 27 Dec 2006 18:39:12 +0000</pubDate>
		<dc:creator>Abner</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Information Technologies]]></category>
		<category><![CDATA[peru]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.modlost.net/wordpress/?p=106</guid>
		<description><![CDATA[Desde que comenzó mi pasión por el FOSS (a inicios del año 1999) hasta la fecha de hoy, he tenido la suerte de ver como el FOSS ha llegado a tomar un lugar muy importante dentro de las tecnologías de información. Nunca creí que volvería a ver un fenómeno semejante pero me equivoqué. En este [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: left;" title="Image" src="http://www.modlost.net/home/images/stories/logos/springframework.jpg" border="0" alt="Image" hspace="6" width="150" height="150" /> Desde que comenzó mi pasión por el <a href="http://en.wikipedia.org/wiki/FOSS">FOSS</a> (a inicios del año 1999) hasta la fecha de hoy, he tenido la suerte de ver como el FOSS ha llegado a tomar un lugar muy importante dentro de las tecnologías de información. Nunca creí que volvería a ver un fenómeno semejante pero me equivoqué. En este pequeño artículo les mostraré lo que he podido ver del uso de <a href="http://www.springframework.org/">Spring Framework</a> en el Perú.</p>
<h2>¿Qué es Spring Framework?</h2>
<p>Es un framework open source para el desarrollo de aplicaciones que busca hacer al desarrollo de software en J2EE más simple. Rod Johnson escribió las primeras líneas de código de Spring Framework y publicó sus ideas en dos libros:</p>
<ul>
<li>Expert One-on-One J2EE Design and Development, Wrox Press</li>
<li>Expert One-on-One J2EE Development without EJB, Wrox Press</li>
</ul>
<p>Las propuestas de Spring Framework fueron bien recibidas por la comunidad java (en la mayoria) y comenzó toda una fiebre por este framework. Se han publicado varios libros, se han desarrollado varias aplicaciones empresariales usandolo y proyectos como <a href="http://portals.apache.org/jetspeed-2/">JetSpeed-2</a> lo usan en su core, etc.</p>
<hr id="system-readmore" />
<h2>Primeros pasos</h2>
<p>A mediados del 2004 llevé el curso de &#8220;Desarrollo de Programas 2&#8243; en la <a href="http://www.pucp.edu.pe">PUCP</a>, en este curso todo el salón tiene como meta implementar un <a href="http://en.wikipedia.org/wiki/Enterprise_resource_planning">ERP</a>. El salón se divide en grupos y cada uno se encarga de un módulo del ERP. Luego de una elección entre &#8220;varios candidatos&#8221;, fui elegido como jefe de proyecto.</p>
<p>El jefe de proyecto no tenía que ver la arquitectura pero quise apoyar en escoger las tecnologías que usaríamos. Ya conocía algunos frameworks en Java como: <a href="http://struts.apache.org/">Apache Struts</a>, <a href="http://ibatis.apache.org/">iBatis</a>, <a href="http://logging.apache.org/log4j/docs/index.html">Log4J</a>, etc. pero decidí dedicar unos días a investigar sobre otras opciones para el desarrollo de aplicaciones web en Java. Así fue como llegué a la página web de Spring Framework, leí la introducción de su manual de referencia y quede muy impresionado por el uso del patrón de Inversión de Control / Inyección de Dependencias.</p>
<p>Tuve muchas ganas de ver como funcionaba este framework pero decidí no usarlo en el proyecto porque ya eran suficientes temas nuevos para un grupo de personas que por primera vez intentarían implementar una aplicación web (decisión muy acertada a mi parecer). Como ya existía suficiente documentación sobre Apache Struts y además iBatis no exigía un cambio muy drástico de trabajo frente a <a href="http://www.hibernate.org/">Hibernate</a>, comenzamos el desarrollo usando estos dos frameworks.</p>
<p>Pude darme algo de tiempo ese ciclo para realizar algunas pruebas con Spring Framework y cada vez me sorprendía más y más. Durante el 2005 pude dedicarle más tiempo de investigación y debo reconocer que luego de comprender las propuestas de este framework, mi manera ver el desarrollo de software ha cambiado.</p>
<h2>De la teoría a la práctica</h2>
<p>A mediados del 2005 tuve la oportunidad de ver el funcionamiento de un framework desarrollado por <a href="http://www.agile-works.com/">AgileWorks</a> basado en Spring Framework y Hibernate. Quede completamente sorprendido por la forma de trabajo de este framework. Pude verlo en acción en un proyecto, encontrando una larga serie de problemas en gran parte por la inexperiencia (con los conceptos, patrones, que proponen estos frameworks) de los que formamos parte de ese proyecto.</p>
<p>Con esa experiencia decidí iniciar un proyecto: iniciar el desarrollo de un framework pequeño que permita la integración de Spring Framework, Hibernate, <a href="http://www.acegisecurity.org/">Acegi Security</a>, <a href="http://displaytag.sourceforge.net/">DisplayTag</a>, <a href="http://struts-menu.sourceforge.net/">StrutsMenu</a>, <a href="http://xdoclet.sourceforge.net/">XDoclet</a> y <a href="http://tools.hibernate.org/">Hibernate Tools</a>. Mi objetivo principal era minimizar en lo posible el código que yo implemente pero que establezca una forma de trabajo basada en las propuestas de estos frameworks. Así es como nace STCFramework, el framework usado por <a href="http://www.stconsulting.com.pe/">STConsulting</a>. Este framework ahora se encuentra en el desarrollo de su versión 2.0.</p>
<h2>Spring Framework y su difusión</h2>
<p>Ya existía un grupo de amigos que también investigaban y usaban Spring Framework en mi universidad (2004), pero su uso se mantenía en un circulo hacker. Como ya es algo común en mi, comencé a difundir el uso de este framework entre mis compañeros, profesores. Mis comentarios generaban curiosidad en algunos, discusiones (alturadas) con otros y no mucha aceptación por algunos profesores.</p>
<p>Lo más interesante sucedió este año (2006) cuando la popularidad de Spring Framework creció exponencialmente. Cada vez más y más empresas usaban Spring Framework (algunas lo hacían bien y otras no). Conocí más personas que al igual que yo habían comenzado a usar Spring Framework desde el 2004;  compartimos ideas, opiniones, etc. y cada uno por su lado siguió fomentando el uso de este framework.</p>
<p>También tuve la oportunidad de dar conferencias sobre Spring Framework en la <a href="http://www.pucp.edu.pe">PUCP</a>, <a href="http://www.upeu.edu.pe/">UPeU</a>, <a href="http://www.istph.net/">ISTPH</a>. Dicte cursos de capacitación en varias empresas y una grata sorpresa más fue enterarme que varias tesis en desarrollo en la PUCP usan Spring Framework (además de la mía).</p>
<h2>¿Que más vendrá?</h2>
<p>Spring Framework esta aquí para quedarse un buen tiempo. Hasta el momento no he visto ningún framework que brinde la misma funcionalidad o que proponga algo diferente pero que a la vez sea más potente que Spring Framework.</p>
<p>Espero con muchas expectativas el desarrollo de <a href="http://www.springframework.org/osgi">Spring-OSGi</a>, este modulo permitirá a aplicaciones desarrolladas en Spring Framework correr dentro de un framework <a href="http://www.osgi.org/">OSGi</a>. La misma idea que implementa <a href="http://www.eclipse.org/">Eclipse</a> (una serie de plug-ins que al final construyen un producto).</p>
<p>Tengo mucha fe en este proyecto y si las expectativas que tengo se cumplen, Spring-OSGi de una u otra manera revolucionará la forma de desarrollo de aplicaciones.</p>
<p>Happy hacking!</p>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html&amp;title=Spring%20Framework%20en%20el%20Per%C3%BA&amp;bodytext=%20Desde%20que%20comenz%C3%B3%20mi%20pasi%C3%B3n%20por%20el%20FOSS%20%28a%20inicios%20del%20a%C3%B1o%201999%29%20hasta%20la%20fecha%20de%20hoy%2C%20he%20tenido%20la%20suerte%20de%20ver%20como%20el%20FOSS%20ha%20llegado%20a%20tomar%20un%20lugar%20muy%20importante%20dentro%20de%20las%20tecnolog%C3%ADas%20de%20informaci%C3%B3n.%20Nunca%20cre%C3%AD%20que%20volver%C3%ADa%20a%20ver" title="Digg"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html&amp;title=Spring%20Framework%20en%20el%20Per%C3%BA&amp;notes=%20Desde%20que%20comenz%C3%B3%20mi%20pasi%C3%B3n%20por%20el%20FOSS%20%28a%20inicios%20del%20a%C3%B1o%201999%29%20hasta%20la%20fecha%20de%20hoy%2C%20he%20tenido%20la%20suerte%20de%20ver%20como%20el%20FOSS%20ha%20llegado%20a%20tomar%20un%20lugar%20muy%20importante%20dentro%20de%20las%20tecnolog%C3%ADas%20de%20informaci%C3%B3n.%20Nunca%20cre%C3%AD%20que%20volver%C3%ADa%20a%20ver" title="del.icio.us"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html&amp;t=Spring%20Framework%20en%20el%20Per%C3%BA" title="Facebook"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html&amp;title=Spring%20Framework%20en%20el%20Per%C3%BA&amp;annotation=%20Desde%20que%20comenz%C3%B3%20mi%20pasi%C3%B3n%20por%20el%20FOSS%20%28a%20inicios%20del%20a%C3%B1o%201999%29%20hasta%20la%20fecha%20de%20hoy%2C%20he%20tenido%20la%20suerte%20de%20ver%20como%20el%20FOSS%20ha%20llegado%20a%20tomar%20un%20lugar%20muy%20importante%20dentro%20de%20las%20tecnolog%C3%ADas%20de%20informaci%C3%B3n.%20Nunca%20cre%C3%AD%20que%20volver%C3%ADa%20a%20ver" title="Google Bookmarks"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.friendfeed.com/share?title=Spring%20Framework%20en%20el%20Per%C3%BA&amp;link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html" title="FriendFeed"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html&amp;title=Spring%20Framework%20en%20el%20Per%C3%BA&amp;source=Module+Lost+Thoughts+about+software+development+%26amp%3B+productivity&amp;summary=%20Desde%20que%20comenz%C3%B3%20mi%20pasi%C3%B3n%20por%20el%20FOSS%20%28a%20inicios%20del%20a%C3%B1o%201999%29%20hasta%20la%20fecha%20de%20hoy%2C%20he%20tenido%20la%20suerte%20de%20ver%20como%20el%20FOSS%20ha%20llegado%20a%20tomar%20un%20lugar%20muy%20importante%20dentro%20de%20las%20tecnolog%C3%ADas%20de%20informaci%C3%B3n.%20Nunca%20cre%C3%AD%20que%20volver%C3%ADa%20a%20ver" title="LinkedIn"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Spring%20Framework%20en%20el%20Per%C3%BA%20-%20http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html" title="Twitter"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html&amp;t=Spring%20Framework%20en%20el%20Per%C3%BA" title="MySpace"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html&amp;title=Spring%20Framework%20en%20el%20Per%C3%BA&amp;body=%20Desde%20que%20comenz%C3%B3%20mi%20pasi%C3%B3n%20por%20el%20FOSS%20%28a%20inicios%20del%20a%C3%B1o%201999%29%20hasta%20la%20fecha%20de%20hoy%2C%20he%20tenido%20la%20suerte%20de%20ver%20como%20el%20FOSS%20ha%20llegado%20a%20tomar%20un%20lugar%20muy%20importante%20dentro%20de%20las%20tecnolog%C3%ADas%20de%20informaci%C3%B3n.%20Nunca%20cre%C3%AD%20que%20volver%C3%ADa%20a%20ver" title="Ping.fm"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" /></a>
	<a rel="nofollow"  target="_blank" href="http://slashdot.org/bookmark.pl?title=Spring%20Framework%20en%20el%20Per%C3%BA&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fspring-framework-en-el-peru.html" title="Slashdot"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.modlost.net/home/article/spring-framework-en-el-peru.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Xdoclet &#8211; Portlet Module &amp; Spring Portlet MVC</title>
		<link>http://www.modlost.net/home/article/xdoclet-portlet-module-a-spring-porlet-mvc.html</link>
		<comments>http://www.modlost.net/home/article/xdoclet-portlet-module-a-spring-porlet-mvc.html#comments</comments>
		<pubDate>Wed, 08 Mar 2006 17:59:21 +0000</pubDate>
		<dc:creator>Abner</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Information Technologies]]></category>
		<category><![CDATA[portlet]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.modlost.net/wordpress/?p=77</guid>
		<description><![CDATA[Nadie puede negar que la programación orientada a atributos es muy util. Pues bien, estuve jugando con Spring Framework 2.0M3, en especial el modulo para Porlets. Según la regla que sigo: &#8220;Mientras menos hago más avanzo&#8221;, decidí usar el modulo Xdoclet para generar el archivo portlet.xml. Definí un controlador con los respectivos tags: package com.stconsulting.sample.web.portlet.controller; [...]]]></description>
			<content:encoded><![CDATA[<p>Nadie puede negar que la programación orientada a atributos es muy util. Pues bien, estuve jugando con Spring Framework 2.0M3, en especial el modulo para Porlets.</p>
<p>Según la regla que sigo: &#8220;Mientras menos hago más avanzo&#8221;, decidí usar el modulo Xdoclet para generar el archivo portlet.xml.</p>
<p>Definí un controlador con los respectivos tags:</p>
<pre><code>
<span style="color: #7f0055;"><strong>package </strong></span><span style="color: #000000;">com.stconsulting.sample.web.portlet.controller;</span>

<span style="color: #7f0055;"><strong>import </strong></span><span style="color: #000000;">javax.portlet.RenderRequest;</span>

<span style="color: #7f0055;"><strong>import </strong></span><span style="color: #000000;">javax.portlet.RenderResponse;</span>

<span style="color: #7f0055;"><strong>import </strong></span><span style="color: #000000;">org.springframework.web.portlet.ModelAndView;</span>

<span style="color: #7f0055;"><strong>import </strong></span><span style="color: #000000;">org.springframework.web.portlet.mvc.AbstractController;</span>

<span style="color: #3f5fbf;">/**</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* @portlet.portlet  name="SamplePortlet"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">*                  portlet-class="org.springframework.web.portlet.DispatcherPortlet"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">*                  display-name="Sample Portlet" expiration-cache="0"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* </span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* @portlet.portlet-init-param  name="contextConfigLocation"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">*                              value="/WEB-INF/context/sample/applicationPortlet.xml"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* </span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* @portlet.supports   mime-type="text/html"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">*             modes="view,edit,help"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* </span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* @portlet.portlet-info title="Sample Portlet" keywords="Sample"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">*                       short-title="Sample"</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* </span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">* </span><span style="color: #7f9fbf;">@author </span><span style="color: #3f5fbf;">Abner Nazario Ballardo Urco</span>

<span style="color: #ffffff;"> </span><span style="color: #3f5fbf;">*/</span>

<span style="color: #7f0055;"><strong>public class </strong></span><span style="color: #000000;">SamplePortlet </span><span style="color: #7f0055;"><strong>extends </strong></span><span style="color: #000000;">AbstractController </span><span style="color: #000000;">{</span>

<span style="color: #ffffff;"> </span><span style="color: #7f0055;"><strong>public </strong></span><span style="color: #000000;">ModelAndView handleRenderRequestInternal</span><span style="color: #000000;">(</span><span style="color: #000000;">RenderRequest request,</span>

<span style="color: #ffffff;"> </span><span style="color: #000000;">RenderResponse response</span><span style="color: #000000;">) </span><span style="color: #7f0055;"><strong>throws </strong></span><span style="color: #000000;">Exception </span><span style="color: #000000;">{</span>

<span style="color: #ffffff;"> </span><span style="color: #7f0055;"><strong>return new </strong></span><span style="color: #000000;">ModelAndView</span><span style="color: #000000;">(</span><span style="color: #2a00ff;">"sample"</span><span style="color: #000000;">, </span><span style="color: #2a00ff;">"model"</span><span style="color: #000000;">, </span><span style="color: #2a00ff;">"hello"</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span>

<span style="color: #ffffff;"> </span><span style="color: #000000;">}</span>

<span style="color: #000000;">}</span></code></pre>
<p>Pero XDoclet no generaba correctamente el archivo (estaba en blanco), en fin,&#8230; luego de varias pruebas encontre que el archivo portlet_xml.xdt tenía esta definición</p>
<pre><code> <strong>&lt;XDtClass:forAllClasses type="javax.portlet.GenericPortlet"&gt;</strong>
  &lt;XDtClass:forAllClassTags tagName="portlet.portlet" superclasses="true"&gt;
    &lt;portlet&gt;
      ...............
</code></pre>
<p>Como vemos se indica que solo procese las clases que extiendan de <strong>javax.portlet.GenericPortlet</strong>,  para poder usar libremente XDoclet Porlet Module con Spring solo necesitamos modificar el archivo .xdt que se encuentra en:</p>
<p><strong>JAR: xdoclet-portlet-module.jar<br />
Ruta: /xdoclet/modules/portlet/resources/portlet_xml.xdt</strong></p>
<pre><code> <strong>&lt;XDtClass:forAllClasses&gt;
 &lt;XDtClass:ifHasClassTag tagName="portlet.portlet"&gt;</strong>
  &lt;XDtClass:forAllClassTags tagName="portlet.portlet" superclasses="true"&gt;
    &lt;portlet&gt;
      ...............
  &lt;/XDtClass:forAllClassTags&gt;
 <strong>&lt;/XDtClass:ifHasClassTag&gt;
 &lt;/XDtClass:forAllClasses&gt;</strong>
</code></pre>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html&amp;title=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC&amp;bodytext=Nadie%20puede%20negar%20que%20la%20programaci%C3%B3n%20orientada%20a%20atributos%20es%20muy%20util.%20Pues%20bien%2C%20estuve%20jugando%20con%20Spring%20Framework%202.0M3%2C%20en%20especial%20el%20modulo%20para%20Porlets.%0D%0A%0D%0ASeg%C3%BAn%20la%20regla%20que%20sigo%3A%20%22Mientras%20menos%20hago%20m%C3%A1s%20avanzo%22%2C%20decid%C3%AD%20usar%20el%20modulo" title="Digg"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html&amp;title=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC&amp;notes=Nadie%20puede%20negar%20que%20la%20programaci%C3%B3n%20orientada%20a%20atributos%20es%20muy%20util.%20Pues%20bien%2C%20estuve%20jugando%20con%20Spring%20Framework%202.0M3%2C%20en%20especial%20el%20modulo%20para%20Porlets.%0D%0A%0D%0ASeg%C3%BAn%20la%20regla%20que%20sigo%3A%20%22Mientras%20menos%20hago%20m%C3%A1s%20avanzo%22%2C%20decid%C3%AD%20usar%20el%20modulo" title="del.icio.us"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html&amp;t=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC" title="Facebook"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html&amp;title=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC&amp;annotation=Nadie%20puede%20negar%20que%20la%20programaci%C3%B3n%20orientada%20a%20atributos%20es%20muy%20util.%20Pues%20bien%2C%20estuve%20jugando%20con%20Spring%20Framework%202.0M3%2C%20en%20especial%20el%20modulo%20para%20Porlets.%0D%0A%0D%0ASeg%C3%BAn%20la%20regla%20que%20sigo%3A%20%22Mientras%20menos%20hago%20m%C3%A1s%20avanzo%22%2C%20decid%C3%AD%20usar%20el%20modulo" title="Google Bookmarks"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.friendfeed.com/share?title=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC&amp;link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html" title="FriendFeed"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html&amp;title=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC&amp;source=Module+Lost+Thoughts+about+software+development+%26amp%3B+productivity&amp;summary=Nadie%20puede%20negar%20que%20la%20programaci%C3%B3n%20orientada%20a%20atributos%20es%20muy%20util.%20Pues%20bien%2C%20estuve%20jugando%20con%20Spring%20Framework%202.0M3%2C%20en%20especial%20el%20modulo%20para%20Porlets.%0D%0A%0D%0ASeg%C3%BAn%20la%20regla%20que%20sigo%3A%20%22Mientras%20menos%20hago%20m%C3%A1s%20avanzo%22%2C%20decid%C3%AD%20usar%20el%20modulo" title="LinkedIn"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC%20-%20http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html" title="Twitter"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html&amp;t=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC" title="MySpace"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html&amp;title=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC&amp;body=Nadie%20puede%20negar%20que%20la%20programaci%C3%B3n%20orientada%20a%20atributos%20es%20muy%20util.%20Pues%20bien%2C%20estuve%20jugando%20con%20Spring%20Framework%202.0M3%2C%20en%20especial%20el%20modulo%20para%20Porlets.%0D%0A%0D%0ASeg%C3%BAn%20la%20regla%20que%20sigo%3A%20%22Mientras%20menos%20hago%20m%C3%A1s%20avanzo%22%2C%20decid%C3%AD%20usar%20el%20modulo" title="Ping.fm"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" /></a>
	<a rel="nofollow"  target="_blank" href="http://slashdot.org/bookmark.pl?title=Xdoclet%20-%20Portlet%20Module%20%26%20Spring%20Portlet%20MVC&amp;url=http%3A%2F%2Fwww.modlost.net%2Fhome%2Farticle%2Fxdoclet-portlet-module-a-spring-porlet-mvc.html" title="Slashdot"><img src="http://www.modlost.net/home/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.modlost.net/home/article/xdoclet-portlet-module-a-spring-porlet-mvc.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
