<?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>programania&#187; jBullet</title>
	<atom:link href="http://www.programania.net/category/java/jbullet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.programania.net</link>
	<description>Ingeniería del Software</description>
	<lastBuildDate>Mon, 05 Jul 2010 15:20:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Conventions en Spring MVC</title>
		<link>http://www.programania.net/diseno-de-software/conventions-en-spring-mvc/</link>
		<comments>http://www.programania.net/diseno-de-software/conventions-en-spring-mvc/#comments</comments>
		<pubDate>Wed, 29 Aug 2007 11:16:41 +0000</pubDate>
		<dc:creator>Raul Vicente</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[MVC - Model View Controller]]></category>
		<category><![CDATA[PATRONES DE DISEÑO]]></category>
		<category><![CDATA[PROGRAMACION]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[WEBDEV]]></category>
		<category><![CDATA[jBullet]]></category>
		<category><![CDATA[orientada a objetos]]></category>

		<guid isPermaLink="false">http://www.programania.net/programacion/conventions-en-spring-mvc/</guid>
		<description><![CDATA[Conventions de RoR en Spring MVC]]></description>
			<content:encoded><![CDATA[<p align="justify">Este artículo lo tenía pensado hace tiempo, pero por falta de ello no me había dedicado a él. <strong>Había hecho mis pinitos con las Conventions hace tiempo</strong> con este <a href="http://www.programania.net/java/struts-framework/conventions-over-configurations/c" title="Conventions" target="_blank">artículo</a> y este otro sobre <a href="http://www.programania.net/java/jbullet/jbullet-10/" title="JBullet" target="_blank">JBullet</a> pero <strong>no había tenido tiempo para hablar de como Spring incorpora las Conventions</strong>.</p>
<p align="justify">&nbsp;</p>
<p align="justify">Como en el artículo anterior esbozaré lo que me parece más importante en este post y os dejaré un link a la wiki pública en la que tendréis información de cómo hacerlo en detalle.</p>
<p align="justify">&nbsp;</p>
<p align="justify">&nbsp;</p>
<p align="justify"><strong>Lo más importante se encuentra en el archivo de configuración Web</strong> [nombre del servlet]-servlet.xml, dónde el nombre del servlet es es el nombre que le hemos dado al servlet en el archivo Web.xml. El archivo tiene este aspecto:</p>
<p align="justify">&nbsp;</p>
<p align="justify">&nbsp;</p>
<p><code></p>
<p align="justify">&lt;beans&gt;</p>
<p>     &lt;bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/&gt;<br />
&lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />
&lt;property name="prefix" value="/jsp/"/&gt;<br />
&lt;property name="suffix" value=".jsp"/&gt;<br />
&lt;/bean &gt;<br />
&lt;bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/&gt;<br />
&lt;bean name="/pruebaController.do" class="org.raul.springmvc.web.PruebaController"/&gt;<br />
&lt;/beans&gt;<br />
</code><br />
Ya sé que el XML no queda muy bien en el editor, pero menos es nada, la novedad radica en que c<strong>uando se hace una transición desde un controller al String que devulve se le concatena por delante /jsp/ y por detrás del String .jsp de tal manera que si ha devuelto el String hello buscará el archivo hello.jsp en el directorio jsp dentro del directorio Web, así no hay que poner a que JSP cada vez y eliminamos la navegación del fichero XML.</strong><br />
Por otro lado, en lo que a <strong>los Controllers se refiere sigue habiendo que declararlos en el contexto</strong> y en su atributo name especificamos con qué URL van a ser accedidos,<strong> pero es un mal menor.</strong></p>
<p>Como lo prometido es deuda os dejo el link al artículo de la wiki:</p>
<p><a href="http://www.programania.net/contextos/doku.php?id=conventions_en_spring_mvc" title="Conventions Spring MVC" target="_blank">http://www.programania.net/contextos/doku.php?id=conventions_en_spring_mvc </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/diseno-de-software/conventions-en-spring-mvc/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Seam 1.0</title>
		<link>http://www.programania.net/otros/nuevo-framework-en-java/</link>
		<comments>http://www.programania.net/otros/nuevo-framework-en-java/#comments</comments>
		<pubDate>Tue, 29 Aug 2006 11:49:08 +0000</pubDate>
		<dc:creator>Raul Vicente</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[OTROS]]></category>
		<category><![CDATA[Struts Framework]]></category>
		<category><![CDATA[jBullet]]></category>

		<guid isPermaLink="false">http://www.programania.net/diseno-de-software/nuevo-framework-en-java/</guid>
		<description><![CDATA[Novedade Java: Nuvo framework Web Seam 1.0]]></description>
			<content:encoded><![CDATA[<p>Hace poco me he topado con esta noticia y me ha parecido interesante comentarla, ha aparecido un nuevo framewok para desarrollar Web en Java, se llama Seam y su ventaja es que une los beneficios de Java Server Faces para la capa de presentación y EJB 3.0 para la lógica de negocio.</p>
<p>Al parecer al estar basado EJB 3.0 en annotations reduce considerablemente los ficheros XML a utilizar. No se el tiempo dará la razón pero la verdad es que a mí no me termina de convencer ningún framework Web creía haber visto la luz con<a title="JBullet" target="_blank" href="http://www.programania.net/diseno-de-software/jbullet-10/"> JBullet</a> y al ver sus validaciones sufrí una desilusión terrible.</p>
<p>Así pues, tenemos uno más para la colección por si nos aburriamos mientras no salga un framework que despunte sobre los demás por algo claro y tangible me da que todavía no vamos a jubilar a Struts una pena porque ya hace 6 años que salió.</p>
<p>Para los interesados en visitar la la web de JBoss Seam:</p>
<p><a title="JBoss Seam" target="_blank" href="http://www.jboss.com/products/seam"> http://www.jboss.com/products/seam</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/otros/nuevo-framework-en-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validaciones en JBullet 1.0</title>
		<link>http://www.programania.net/otros/validaciones-en-jbullet-10/</link>
		<comments>http://www.programania.net/otros/validaciones-en-jbullet-10/#comments</comments>
		<pubDate>Fri, 04 Aug 2006 06:56:07 +0000</pubDate>
		<dc:creator>Raul Vicente</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[OTROS]]></category>
		<category><![CDATA[Struts Framework]]></category>
		<category><![CDATA[jBullet]]></category>

		<guid isPermaLink="false">http://www.programania.net/diseno-de-software/validaciones-en-jbullet-10/</guid>
		<description><![CDATA[Java Novedades: Framework que soporta Conventions en Java]]></description>
			<content:encoded><![CDATA[<p>Hace poco escribí un artículo comentando el framework<a title="JBullet" target="_blank" href="http://www.programania.net/diseno-de-software/jbullet-10/"> JBullet</a> pero se no encontré información acerca de cómo validar formularios, por fin he encontrado información acerca de como propone este framework validar formularios y he de decir que ha sido descorazonador.</p>
<p>El framework propone añadir un método validate() dentro del <em><strong>Model</strong></em>, es decir, lo que en Struts sería el <em><strong>ActionForm</strong></em> y esto se ha demostrado es un error garrafal ya que obliga a mezclar churras con merinas o lo que es lo mismo lógica de presentación y lógica de negocio. En otros frameworks ya se han hecho importantes avances al respecto como en Java Server Faces que incluye unos tags que se incluyen en los JSP o bien da la oportunidad de implementar un validador implementando una interfaz y llamarlo con un tag especial desde el JSP incluso Struts sacó el pluggin <em><strong>Validator </strong></em>al darse cuenta que eso era un error y este framework propone volver a eso, es simplemente descorazonador. Habrá que esperar a la versión 2.0.</p>
<p>Para los que deseen encontrar la poca información al respecto sólo tienen que descargarse el framework y éste trae un pdf en el que esplica por encima las validaciones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/otros/validaciones-en-jbullet-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBullet 1.0</title>
		<link>http://www.programania.net/otros/jbullet-10/</link>
		<comments>http://www.programania.net/otros/jbullet-10/#comments</comments>
		<pubDate>Fri, 28 Jul 2006 11:31:44 +0000</pubDate>
		<dc:creator>Raul Vicente</dc:creator>
				<category><![CDATA[DESARROLLO DE SOFTWARE]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[OTROS]]></category>
		<category><![CDATA[Struts Framework]]></category>
		<category><![CDATA[jBullet]]></category>

		<guid isPermaLink="false">http://www.programania.net/diseno-de-software/jbullet-10/</guid>
		<description><![CDATA[Novedades Java: Framework de presentación Web que soporta Conventions]]></description>
			<content:encoded><![CDATA[<p>Últimamente he estado leyendo sobre JBullet por si alguien no ha leído nada sobre él comentaré que JBullet es un framework Web en Java que une los conceptos de Struts y RoR, es decir, el patrón MVC pero dejando atrás los tediosos archivos de configuración de Java y apostanto por las <a title="Conventions over Configurations" href="http://www.programania.net/diseno-de-software/conventions-over-configurations/"><strong>Conventions</strong></a> que tan buen resultado han dado en Ruby on Rails.</p>
<p>El caballo de batalla de este framework es acabar con los archivos de configuración así pues iré comentando los aspectos más interesantes del framework con trozos de código para que se entienda.</p>
<p>La configuración es similar a la de Struts, una vez añadidas las librerías al classpath de la aplicación y añadidas las líneas de código pertinentes en el archivo <strong>web.xml</strong> ya estaremos en disposición de poder utilizar el framework. La líneas a añadir en el archivo web.xml son casi identicas a las que había que poner para usar Struts así que los programadores de Java no encontrarán problemas los demás con un simple vistazo a la documentación ya podrán ponerse en marcha.</p>
<p>A diferencia de stuts no tendremos ningún archivo de configuración como podía ser el archivo <strong>struts-config.xml</strong>. El único archivo de configuración es el archivo <strong>jbullet.properties</strong> en el que especificaremos en que paquete colocaremos nuestros controllers, nuestros model y nuestros views. El archivo tiene el siguiente aspecto y debe colocarse en el directorio raíz de nuestra aplicación web.</p>
<p>#The controllers’ package<br />
jbullet.controller.package=controller<br />
#The view folder<br />
jbullet.view.package=/WEB-INF/view<br />
#The model package<br />
jbullet.model.package=model<br />
#The resource bundle name<br />
#by default it’s application<br />
#don’t mention .properties extension and any locale<br />
jbullet.resource=application<br />
#The resource reader class<br />
#Should extend org.jbullet.resource.MessageResourceReader class<br />
#By default it’s PropertyMessageResourceReader<br />
jbullet.resource.reader=PropertyMessageResouceReader<br />
#The response no-cache attribute tru=no-cache,false=yes do cache<br />
jbullet.config.cache=true<br />
#The default locate of the application<br />
#The user locale is ignored if this element is specified<br />
jbullet.config.locale=en</p>
<p>Este archivo es mucho más fácil de manterner que los xml a los que se está habituado en el mundo java y no crece de manera exponencial segun va creciendo nuesta aplicación.</p>
<p>JBullet es la implementación de un patrón MVC y por tanto necesitaremos implementar estos tres elementos para poder desarrollar nuestras aplicaciones.</p>
<p>Siguiendo la comparación con Struts los <strong><em>Controllers </em></strong>son lo que en Struts se conocían como <strong>Actions</strong>, en Struts estas clases extendían la clase <strong>Action</strong> y en JBullet se considera que un Controller( Convention) es toda clase que se encuentre en el paquete de Controllers (especificado en el archivo <strong>jbullet.properties)</strong> y acabe en Controller, se aconseja que nuestros controllers extiendan la clase <em><strong>BaseController</strong></em>  ya que está clase contiene los objetos <strong>Context, Request y Response</strong> aunque estos objetos pueden inyectarse como se muestra en el ejemplo y no extender la clase <strong>BaseController</strong> si eso nos fuera útil.</p>
<p><strong>Ejemplo1 Extendiendo BaseController:</strong></p>
<p>package controller;<br />
import org.jbullet.controller.BaseController;<br />
public class HelloController extends BaseController{</p>
<p>public void index(){</p>
<p>renderText(“Hello World”);</p>
<p>}</p>
<p>public void wow(){</p>
<p>renderText(“Hello from WOW”);</p>
<p>}</p>
<p>}//End Listing 1.1</p>
<p><strong>Ejemplo2 Inyectando</strong></p>
<p>package controller;<br />
import java.io.IOException;<br />
import javax.servlet.http.HttpServletResponse;<br />
import org.jbullet.annotation.Dependency;<br />
import org.jbullet.annotation.DependencyType;<br />
@Dependency({DependencyType.RESPONSE})<br />
public class Hello2Controller {<br />
//The response we need<br />
HttpServletResponse response;<br />
//The setter method called by the dependency injector</p>
<p>public void setResponse(HttpServletResponse response){</p>
<p>this.response=response;</p>
<p>}</p>
<p>//Here goes the handler methods</p>
<p>public void index(){</p>
<p>try{</p>
<p>response.getWriter().print(&#8220;Hello World from Hello2&#8243;);</p>
<p>response.getWriter().flush();</p>
<p>}catch(IOException ex){</p>
<p>//Do whatever you like with the exception</p>
<p>}</p>
<p>}</p>
<p>public void wow() throws IOException{</p>
<p>response.getWriter().print(&#8220;Hello from WOW in Hello2&#8243;);</p>
<p>response.getWriter().flush();</p>
<p>}</p>
<p>}//End Listing 2</p>
<p>Una ventaja importante de los<strong> </strong><em><strong>controllers</strong> </em>de JBullet frente a los <em><strong>Action</strong></em> de Struts son la posibilidad de poner varios métodos para realizar varias acciones desde un mismo controller, es decir , el controllador de  aplicaciones tendrá los métodos  de  listar  aplicaciones ,editar ,nueva y borrar aplicación. Esto era difícil con Struts ya que había que pasar un parámetro extra bien en el ActionForm o por la URL y poner un case en el método execute a la vez que se complicaba el archivo <strong>struts-config.xml. </strong>Con JBullet esto es muy sencillo se puede llamar a un método u otro de la siguiente manera:</p>
<p>http://localhost/QuickStart/controller/Custormer/ para el método index</p>
<p>o http://localhost/QuickStart/controller/Custormer/wow/ para el método wow</p>
<p>Al poner /Customer/ buscará la clase <strong>CustomerController</strong> en el paquete de controllers y al poner wow buscará dicho método en esa clase si no existieran elevaría una excepción si no se le pone nada por defecto busca el método index.</p>
<p>Se utilizan las annotations de la <strong>JDK 1.5</strong> para especificarle al inyector de JBullet que objeto ha de inyetarle a la clase. Si en vez de inyectar el objeto <em><strong>Response</strong></em> se quisiera inyectar un Bean nuestro se tendría que utilizar la directiva <em><strong>@Bean</strong></em> para indicarle al inyector que busque la clase en el paquete de <em><strong>Models</strong></em>.</p>
<p>Para implementar las <em><strong>Views</strong></em> JBullet supone por defecto que se van a realizar utilizando <strong>jsps</strong> y que estos se encuentran en la ruta especificada en el fichero <em><strong>jbullet.properties</strong></em>.</p>
<p>Se dispone de tags especificos para los jsps como en el caso de Struts y para la navegación entre vistas no hace falta ningún fichero de configuración ya que en el controller al especificarse :</p>
<p><em><strong>ViewResolver.forwardTo(&#8220;register&#8221;,request,response);</strong></em></p>
<p>Jbullet buscará el jsp <strong>register.jsp</strong> y redirigirá la petición si no lo encuentra elevará una excepción.</p>
<p>Para implementar los <strong>Models </strong>JBullet utiliza los típicos <em><strong>Beans</strong></em> de siempre que mapean una fila de una tabla de la BD ( los beans de la capa de negocio de nuestra aplicación ) , aquí encontramos una gran diferencia con Struts ya que Struts utilizaba los <em><strong>ActionForms </strong></em>que a priori mezclaban la lógica de Negocio y presentación más tarde se solucionó ese problema permitiendo que se pudiera embeber un bean creado por el usuario dentro del <em><strong>ActionForm </strong></em>pero no dejaba de ser un parche<em><strong> </strong></em>JBullet propone una solución limpia desde el principio.<br />
La internalización de la aplicación está pensada como en struts se dispone de un archivo por cada idioma. El archivo es applicaction_%idioma%.properties de tal manera que cuando cambie el objeto locale se cargue el archivo de idioma que proceda.</p>
<p>Para cada texto en este archivo sólo hay que especificar clave por la que se quiere acceder al texto y el texto en sí.</p>
<p>Por ejemplo en castellano:</p>
<p><em><strong>aplicación.cabecera=Listado de aplicaciones.</strong></em></p>
<p>En inglés:</p>
<p><em><strong>aplicacion.cabecera=Application List.</strong></em></p>
<p>Las única duda que me genera el framework es que en la documentación nos se comenta nada acerca del soporte de validaciones de los formularios pero en verdad espero que esté pensado como tags a colocar en los JSPs y se hulla de las validaciones tal y como se hacen en Stuts con 2 ficheros de configuración.</p>
<p>Los que quieran indagar más sobre el tema pueden acceder a la documentación oficial en esta url:</p>
<p><a title="JBullet Link" target="_blank" href="https://jbullet-web.dev.java.net/">https://jbullet-web.dev.java.net/</a></p>
<p><strong><em> </em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programania.net/otros/jbullet-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
