<?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>Nuevascreaciones &#187; IoC</title>
	<atom:link href="http://nuevascreaciones.com/archives/tag/ioc/feed" rel="self" type="application/rss+xml" />
	<link>http://nuevascreaciones.com</link>
	<description>De todo un poco</description>
	<lastBuildDate>Tue, 28 Apr 2009 09:01:12 +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>Aplicación JSF + Spring</title>
		<link>http://nuevascreaciones.com/archives/91</link>
		<comments>http://nuevascreaciones.com/archives/91#comments</comments>
		<pubDate>Thu, 22 Jan 2009 22:34:32 +0000</pubDate>
		<dc:creator>makensi</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Server]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://nuevascreaciones.com/?p=91</guid>
		<description><![CDATA[Bueno parece que este mes estoy un poco más activo y puedo escribir un poco más. Hoy me han pedido un pequeño esqueleto de aplicación JSF y Spring 2.5.6 por lo que he aprovechado para escribir este post y para enseñar que realmente crear un proyecto con Spring no es algo muy complejo.Por norma general [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno parece que este mes estoy un poco más activo y puedo escribir un poco más. Hoy me han pedido un pequeño esqueleto de aplicación <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavaee%2Fjavaserverfaces%2F&amp;ei=2fF4ScOHK4b00AXIrtks&amp;usg=AFQjCNHClyI0BTzrydM9xT-ETzCKczKJ-A&amp;sig2=NjD2TQVVyqiOumFR-8UCLw">JSF</a> y <a href="http://www.springsource.org/">Spring</a> 2.5.6 por lo que he aprovechado para escribir este post y para enseñar que realmente crear un proyecto con <a href="http://www.springsource.org/">Spring</a> no es algo muy complejo.<span id="more-91"></span>Por norma general a parte de disponer del jar de <a href="http://www.springsource.org/">Spring</a> solo necesitamos incluir en nuestro <strong>web.xml</strong> las siguientes lineas:</p>
<p>El parametro de la ubicación del fichero de configuración.</p>
<p><code>&lt;context-param&gt;<br />
&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
&lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt;<br />
&lt;/context-param&gt;</code></p>
<p>El listener propio de <a href="http://www.springsource.org/">Spring</a>.</p>
<p><code>&lt;listener&gt;<br />
&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />
&lt;/listener&gt;</code></p>
<p>Creamos el fichero de configuración de <a href="http://www.springsource.org/">Spring</a> en <strong>WEB-INF/</strong> con el nombre de <strong>applicationContext.xml</strong> como ya hemos visto en el parametro que definimos anteriormente en nuestro <strong>web.xml</strong>. No os pegare la definición del fichero por que realmente es muy grande.</p>
<p>Una vez visto como se configura <a href="http://www.springsource.org/">Spring</a> basta con configurar en nuestro <strong>web.xml</strong> la parte correspondiente a <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavaee%2Fjavaserverfaces%2F&amp;ei=2fF4ScOHK4b00AXIrtks&amp;usg=AFQjCNHClyI0BTzrydM9xT-ETzCKczKJ-A&amp;sig2=NjD2TQVVyqiOumFR-8UCLw">JSF</a>. Esto ya es todo un clásico así que voy a obviar las explicaciones:</p>
<p><code>&lt;context-param&gt;<br />
&lt;param-name&gt;com.sun.faces.verifyObjects&lt;/param-name&gt;<br />
&lt;param-value&gt;false&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;context-param&gt;<br />
&lt;param-name&gt;com.sun.faces.validateXml&lt;/param-name&gt;<br />
&lt;param-value&gt;true&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;context-param&gt;<br />
&lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;<br />
&lt;param-value&gt;client&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;<br />
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</code></p>
<p>Bueno ya tenemos la configuración ahora viene lo interesante. <a href="http://www.springsource.org/">Spring</a> basa principalmente su funcionamiento en la <a href="http://es.wikipedia.org/wiki/Inversi%C3%B3n_de_Control">Inversión de Control(IoC)</a> y un ejemplo seria:</p>
<p><code>&lt;!-- dao --&gt;<br />
&lt;bean id="dao" class="com.nc.dao.impl.DaoImpl"&gt;<br />
&lt;property name="sessionFactory" ref="sessionFactory"/&gt;<br />
&lt;/bean&gt;<br />
&lt;!-- service --&gt;<br />
&lt;bean id="service" class="com.nc.srv.impl.ServiceImpl"&gt;<br />
&lt;property name="dao" ref="dao" /&gt;<br />
&lt;/bean&gt;</code></p>
<p>Esta es la forma de definir los beans en nuestro applicationContext.xml. Como se observa <a href="http://www.springsource.org/">Spring</a> genera una instancia de las clase definida en la etiqueta bean y les asigna el nombre del identificador del campo id. Tras cargar todos los bean inyecta las referencias en las propiedades de cada uno. El código de uno de estos Beans seria algo así:</p>
<p><code>public class ServiceImpl implements Service {<br />
private Dao dao;<br />
public void setDao(Dao dao) {<br />
this.dao = dao;<br />
}<br />
public List&lt;PersonVO&gt; getPeople() {<br />
return dao.getPeople();<br />
}<br />
}</code></p>
<p>Siempre que definimos una propiedad inyectable en nuestro applicationContext.xml el bean debe de disponer como minimo el metodo setter de la misma.</p>
<p>Visto esto el siguiente paso es ¿Como se inyectan beans definidos en <a href="http://www.springsource.org/">Spring</a> en beans definidos para <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavaee%2Fjavaserverfaces%2F&amp;ei=2fF4ScOHK4b00AXIrtks&amp;usg=AFQjCNHClyI0BTzrydM9xT-ETzCKczKJ-A&amp;sig2=NjD2TQVVyqiOumFR-8UCLw">JSF</a>?. <a href="http://www.springsource.org/">Spring</a> no solo realiza la inversión de control, sino que además dispone de adaptadores y otras librerías que le permiten trabajar combinadamente con otros frameworks. Para trabajar con <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavaee%2Fjavaserverfaces%2F&amp;ei=2fF4ScOHK4b00AXIrtks&amp;usg=AFQjCNHClyI0BTzrydM9xT-ETzCKczKJ-A&amp;sig2=NjD2TQVVyqiOumFR-8UCLw">JSF</a>, <a href="http://www.springsource.org/">Spring</a> ofrece un variable-resolver propio que basta con agregar a nuestro fichero faces-config.xml de esta manera:</p>
<p><code>&lt;application&gt;<br />
&lt;variable-resolver&gt;<br />
org.springframework.web.jsf.DelegatingVariableResolver<br />
&lt;/variable-resolver&gt;<br />
&lt;/application&gt;</code></p>
<p>Una vez hecho disponemos de las referencias descritas en el <strong>applicationContext.xml</strong> dentro de nuestro <strong>faces-config.xml</strong> por lo que solo debemos declarar propiedades en nuestros Beans de <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavaee%2Fjavaserverfaces%2F&amp;ei=2fF4ScOHK4b00AXIrtks&amp;usg=AFQjCNHClyI0BTzrydM9xT-ETzCKczKJ-A&amp;sig2=NjD2TQVVyqiOumFR-8UCLw">JSF</a> y las referencias como podeis ver en este ejemplo:</p>
<p><code>&lt;managed-bean&gt;<br />
&lt;managed-bean-name&gt;index&lt;/managed-bean-name&gt;<br />
&lt;managed-bean-class&gt;com.nc.jsf.IndexBean&lt;/managed-bean-class&gt;<br />
&lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;<br />
&lt;managed-property&gt;<br />
&lt;property-name&gt;service&lt;/property-name&gt;<br />
&lt;value&gt;#{service}&lt;/value&gt;<br />
&lt;/managed-property&gt;<br />
&lt;/managed-bean&gt;</code></p>
<p>Las referencias definidas anteriormente en el <strong>applicationContext.xml</strong> son usadas para ser inyectadas en nuestros Beans de <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fjava.sun.com%2Fjavaee%2Fjavaserverfaces%2F&amp;ei=2fF4ScOHK4b00AXIrtks&amp;usg=AFQjCNHClyI0BTzrydM9xT-ETzCKczKJ-A&amp;sig2=NjD2TQVVyqiOumFR-8UCLw">JSF</a>, por lo que podemos acceder a ellas sin problemas:</p>
<p><code>private Service service;<br />
public void setService(Service service) {<br />
this.service = service;<br />
}<br />
public String getText() {<br />
List&lt;PersonVO&gt; people = service.getPeople();</code></p>
<p>Hasta aquí llega la explicación así que si teneís dudas podeís descargaros el proyecto NetBeans aquí y probarlo por vosotros mismos.</p>
<p><a rel="attachment wp-att-103" href="http://nuevascreaciones.com/archives/91/jsf_spring">Proyecto Netbeans JSF + Spring</a></p>
<p><strong>¡Ojo este proyecto usa una BD Derby y una de las BD de prueba denominada travel! por ello deberiais cambiar las opciones de conexión definidas en el applicationContext.xml y cambiar los mapeos de hibernate del proyecto(solo es una tabla con id,valor).</strong></p>
<p>Espero que os haya ayudado y en un futuro tratare de ampliar un poco más este post hablando de la parte de Hibernate que tiene integrada <a href="http://www.springsource.org/">Spring</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nuevascreaciones.com/archives/91/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
