<?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>CRaZy TeaM &#187; Julian</title>
	<atom:link href="http://www.crazyteam.es/author/julian/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.crazyteam.es</link>
	<description>Artículos sobre noticias de informática, programación y juegos en red</description>
	<lastBuildDate>Wed, 30 Nov 2011 18:28:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Persistencia (I): Hibernate básico</title>
		<link>http://www.crazyteam.es/general/persistencia-i-hibernate-basico/</link>
		<comments>http://www.crazyteam.es/general/persistencia-i-hibernate-basico/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 16:38:23 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
		
		<guid isPermaLink="false">http://www.crazyteam.es/?p=264</guid>
		<description><![CDATA[Para empezar debemos realizar un pequeño repaso a lo que nos referimos con persistencia, más allá de la mera definición de la RAE este termino surge como la manera de almacenar nuestros objetos en un soporte relacional; es decir como guardar nuestros objetos a base de datos directamente. El problema es que es como mezclar [...]]]></description>
			<content:encoded><![CDATA[<p>Para empezar debemos realizar un pequeño repaso a lo que nos referimos con persistencia, más allá de la mera definición de la RAE este termino surge como la manera de almacenar nuestros objetos en un soporte relacional; es decir como guardar nuestros objetos a base de datos directamente.</p>
<p>El problema es que es como mezclar aceite y agua, aquello no se mezcla ni une, ya que las bases de datos suelen estar orientadas en un modelo relacional y el software orientado en un modelo objetual. Esto hace optemos con frecuencia por soluciones de unir ambos modelos con unas clases dao que muchas veces son meros parseadores de las respuestas a nuestras consultas SQL.</p>
<p>Aquí es donde aparece Hibernate para aportarnos todo eso de una manera más o menos transparente.</p>
<p>Ejemplo para insertar un registro en una tabla habitualmente se utiliza una estructura de este tipo.</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">Class</span>.<span class="me1">forName</span><span class="br0">&#40;</span>“org.<span class="me1">oracle</span>.<span class="me1">jdbcDriver</span>”<span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> url <span class="sy0">=</span> “jdbc<span class="sy0">:</span>oracle<span class="sy0">:</span>@database”<span class="sy0">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aconnection+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Connection</span></a> connection <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adrivermanager+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">DriverManager</span></a>.<span class="me1">getConnection</span><span class="br0">&#40;</span>url, “usuario”, “password”<span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> ins <span class="sy0">=</span> “INSERT INTO COCHES VALUES<span class="br0">&#40;</span>1, ‘Audi’<span class="br0">&#41;</span>”<span class="sy0">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astatement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Statement</span></a> stmt <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
stmt <span class="sy0">=</span> connection.<span class="me1">createStatement</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
stmt.<span class="me1">executeUpdate</span><span class="br0">&#40;</span>ins<span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Con Hibernate, escribiríamos algo similar a esto:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">Configuration conf <span class="sy0">=</span> <span class="kw1">new</span> Configuration<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
conf.<span class="me1">addClass</span><span class="br0">&#40;</span>Coches.<span class="kw1">class</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
SessionFactory sessionFactory <span class="sy0">=</span> conf.<span class="me1">buildSessionFactory</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
Session session <span class="sy0">=</span> sessionFactory.<span class="me1">openSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
Coche coche <span class="sy0">=</span> <span class="kw1">new</span> Coche<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
coche.<span class="me1">setModelo</span><span class="br0">&#40;</span>“Audi”<span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">save</span><span class="br0">&#40;</span>coche<span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Y si nos interesase añadir otro modelo:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">session <span class="sy0">=</span> sessionFactory.<span class="me1">openSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
coche <span class="sy0">=</span> <span class="kw1">new</span> Coche<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
coche.<span class="me1">setModelo</span><span class="br0">&#40;</span>“Ford”<span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">save</span><span class="br0">&#40;</span>coche<span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Vemos que hay una gran diferencia entre ambos métodos, ya que en el segundo caso pasamos del SQL a simplemente decir que queremos “salvar” un coche.</p>
<p>A la hora de buscar también sabemos cual puede ser el lío con la técnica habitual mientras que con Hibernate se reduce a:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">session <span class="sy0">=</span> sessionFactory.<span class="me1">openSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> qry <span class="sy0">=</span> “FROM beans.<span class="me1">Coche</span> AS P <br />
WHERE P.<span class="me1">Modelo</span> <span class="sy0">=</span> <span class="st0">&#8216;Audi&#8217;</span> <br />
ORDER BY P.<span class="me1">Modelo</span>”<span class="sy0">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">List</span></a> coches <span class="sy0">=</span> session.<span class="me1">find</span><span class="br0">&#40;</span>qry<span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> coches.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
Coche c <span class="sy0">=</span> <span class="br0">&#40;</span>Coche<span class="br0">&#41;</span>coches.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="sy0">;</span><br />
…….<br />
<span class="br0">&#125;</span></div>
</div>
<p>¿Ya está así de sencillo?<br />
No todo iba a ser así de fácil, para que Hibernate consiga realizar esto debemos realizar un mínimo de configuración:</p>
<p>1.	Hibernate.properties: En el que se especifica contra que base de datos y que lenguaje conectaremos y cómo lo haremos.<br />
2.	NombreDeClasse.hbm.xml: En el que se describe cómo se relacionan nuestras clases con las tablas.</p>
<p><strong>Hibernate.properties</strong></p>
<p>En este archivo, se pueden especificar muchísimas cosas. Nos limitaremos, por ahora, a proporcionar los datos necesarios para que Hibernate se pueda conectar a nuestra base de datos HSQLDB. Este sería, pues, el mínimo necesario para funcionar:</p>
<div class="codesnip-container" >## HypersonicSQL<br />
hibernate.dialect net.sf.hibernate.dialect.HSQLDialect<br />
hibernate.connection.driver_class org.hsqldb.jdbcDriver<br />
hibernate.connection.username usuario<br />
hibernate.connection.password pasword<br />
hibernate.connection.url jdbc:hsqldb:hsql://localhost</div>
<p>Solo hay que configurar pocos datos. Además dentro de la propia distribución de Hibernate en el fichero vienen ejemplos para todas las bases de datos que soporta Hibernate solo tenemos que descomentar nuestro tipo de bbdd y comenzar.</p>
<p><strong>NombreDeClase.hbm.xml</strong><br />
Este es el archivo que vincula nuestra clase (bean) con la bbdd. Este ejemplo es el que se corresponde con la clase Coche (Coche.hbm.xml).</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span><span class="re2">?&gt;</span></span><br />
<span class="sc0">&lt;!DOCTYPE hibernate-mapping PUBLIC</span><br />
<span class="sc0">&quot;-//Hibernate/Hibernate Mapping DTD//EN&quot;</span><br />
<span class="sc0">&quot;http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd&quot;&gt;</span></p>
<p><span class="sc3"><span class="re1">&lt;hibernate-mapping<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;class</span> <span class="re0">name</span>=<span class="st0">&quot; beans.Coche&quot;</span> <span class="re0">table</span>=<span class="st0">&quot;coches&quot;</span><span class="re2">&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;id</span> <span class="re0">name</span>=<span class="st0">&quot;id&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;integer&quot;</span> <span class="re0">column</span>=<span class="st0">&quot;ID&quot;</span> <span class="re0">unsaved-value</span>=<span class="st0">&quot;-1&quot;</span><span class="re2">&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;generator</span> <span class="re0">class</span>=<span class="st0">&quot;identity&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/id<span class="re2">&gt;</span></span></span></p>
<p><span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">&quot;modelo&quot;</span> <span class="re0">column</span>=<span class="st0">&quot;MODELO&quot;</span> </span><br />
<span class="sc3"><span class="re0">type</span>=<span class="st0">&quot;string&quot;</span> </span><br />
<span class="sc3"><span class="re0">unique</span>=”true”</span><br />
<span class="sc3"><span class="re0">not-null</span>=<span class="st0">&quot;true&quot;</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/class<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/hibernate-mapping<span class="re2">&gt;</span></span></span></div>
</div>
<p>Para nuestro bean Coche:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">Package</span> <span class="co2">beans</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">class</span> Coche <span class="br0">&#123;</span><br />
<span class="co3">/** Identificador único */</span><br />
<span class="kw4">int</span> id<span class="sy0">;</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> modelo<span class="sy0">;</span></p>
<p><span class="kw1">public</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> getModelo<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="kw1">return</span> modelo<span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">int</span> getId<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="kw1">return</span> id<span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> setModelo<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> nuevoModelo<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
modelo <span class="sy0">=</span> nuevoModelo<span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> setId<span class="br0">&#40;</span><span class="kw4">int</span> nuevoId<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
id <span class="sy0">=</span> nuevoId<span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> toString<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="kw1">return</span> getId<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot; &quot;</span> <span class="sy0">+</span> getModelo<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Y con esto si que estaría todo, solo faltaría ubicar correctamente nuestros ficheros de configuración, el Coche.hbm.xml en el mismo directorio de la clase, y el fichero<br />
Hibernate.properties en la raíz de nuestro árbol de paquetes.</p>
<p>Ahora os voy a presentar un pequeño ejemplo de funcionalidad de Hibernate:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw4">void</span> anadir<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> modelo<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
Coche categoria <span class="sy0">=</span> <span class="kw1">new</span> Coche<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
coche.<span class="me1">setModelo</span><span class="br0">&#40;</span>modelo<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="co1">//Obtenemos la configuración</span><br />
Configuration conf <span class="sy0">=</span> <span class="kw1">new</span> Configuration<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co1">//Buscamos el mapeo de nuestra clase</span><br />
conf.<span class="me1">addClass</span><span class="br0">&#40;</span>Coche.<span class="kw1">class</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co1">//Construimos la sesion</span><br />
SessionFactory sessionFactory <span class="sy0">=</span> conf.<span class="me1">buildSessionFactory</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
Session session <span class="sy0">=</span> sessionFactory.<span class="me1">openSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co1">//iniciamos la transaccion</span><br />
Transaction tx <span class="sy0">=</span> session.<span class="me1">beginTransaction</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co1">// Guardamos la nueva Categoria en la base de datos</span><br />
session.<span class="me1">save</span><span class="br0">&#40;</span>coche<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co1">// Confirmamos la transacción</span><br />
tx.<span class="me1">commit</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="co1">// Cerramos la sesión</span><br />
session.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p>Configuration conf <span class="sy0">=</span> <span class="kw1">new</span> Configuration<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
conf.<span class="me1">addClass</span><span class="br0">&#40;</span>Categoria.<span class="kw1">class</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
SessionFactory sessionFactory <span class="sy0">=</span> conf.<span class="me1">buildSessionFactory</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
Session session <span class="sy0">=</span> sessionFactory.<span class="me1">openSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
Categoria categ <span class="sy0">=</span> <span class="kw1">new</span> Categoria<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
categ.<span class="me1">setCategoria</span><span class="br0">&#40;</span>“Profesor”<span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">save</span><span class="br0">&#40;</span>categ<span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>Otro ejemplo<span class="sy0">:</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> borrar<span class="br0">&#40;</span><span class="kw4">int</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span><br />
Coche coche <span class="sy0">=</span> <span class="kw1">new</span> Coche<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
coche.<span class="me1">setId</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span><span class="sy0">;</span><br />
Transaction tx <span class="sy0">=</span> session.<span class="me1">beginTransaction</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
session.<span class="me1">delete</span><span class="br0">&#40;</span>coche<span class="br0">&#41;</span><span class="sy0">;</span><br />
tx.<span class="me1">commit</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Por supuesto todo esto solo es la punta de Hibernate, os recomiendo que paséis por la página y deis un vistazo, sobre todo a que actualmente soporta mas de 20 diferentes tipos de bases de datos.<br />
Hemos visto que la presencia de los archivos de configuración y demás hace que nuestra aplicación se vuelve un poco compleja, en próximos post analizaremos las anotaciones en java y su aplicación con Hibernate.</p>
<p>Enlace: <a title="Hibernate" href="http://www.hibernate.org" target="_blank">Hibernate</a></p>
<h3  class="related_post_title">No hay artículos relacionados. Echa un ojo a estos:</h3><ul class="related_post"></ul>]]></content:encoded>
			<wfw:commentRss>http://www.crazyteam.es/general/persistencia-i-hibernate-basico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uso de filtros en Java</title>
		<link>http://www.crazyteam.es/general/uso-de-filtros-en-java/</link>
		<comments>http://www.crazyteam.es/general/uso-de-filtros-en-java/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 11:28:44 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
		
		<guid isPermaLink="false">http://www.crazyteam.es/?p=177</guid>
		<description><![CDATA[Vamos a explicar por encima un mecanismo muy potente que se puede utilizar en el diseño modular de portales java, normalmente al desarrollar portales siguiendo un patrón MVC o utilizando algún Framework que lo implemente como Struts o Spring. Siempre nos surge la necesidad de desarrollar la seguridad o controlar los &#8220;eventos&#8221; de navegación, para [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a explicar por encima un mecanismo muy potente que se puede utilizar en el diseño modular de portales java, normalmente al desarrollar portales siguiendo un patrón MVC o utilizando algún Framework que lo implemente como Struts o Spring.</p>
<p>Siempre nos surge la necesidad de desarrollar la seguridad o controlar los &#8220;eventos&#8221; de navegación, para este caso existen los Filtros, un filtro permite que determinada petición o respuesta sea analizada bajo ciertas condiciones.</p>
<p>Una de las principales características de un filtro es que puede ser colocado en cualquier punto del flujo de la aplicación, ya sea entre una solicitud de JSP a JSP, Servlet a Servlet, o inclusive Servlet/JSP a HTML, la única condición que debe cumplirse es que debe existir un objeto de entrada (ServletRequest) y otro de salida (ServletResponse).</p>
<p>Ahora bien, solo queda pensar para que queremos usar nuestro filtro, su uso normal se suele aplicar para “tracear” el flujo de la aplicación con las llamadas que se van realizando, comprobar la sesión del usuario así como implementar la seguridad del portal.</p>
<p>A continuación vamos a mostrar un ejemplo de un filtro.</p>
<p><span id="more-177"></span><br />
Primero debemos definir el filtro a utilizar, para ello construimos nuestra clase filtro que implementa en interface Filter:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">package</span> <span class="co2">es.crazyteam</span><span class="sy0">;</span></p>
<p><span class="kw1">import</span> <span class="co2">java.io.*</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">javax.servlet.*</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">javax.servlet.http.*</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">class</span> FiltroUsuario <span class="kw1">implements</span> Filter<br />
<span class="br0">&#123;</span></p>
<p><span class="kw1">private</span> FilterConfig config<span class="sy0">;</span><br />
<span class="kw1">private</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> urlLogin<span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> init<span class="br0">&#40;</span>FilterConfig config<span class="br0">&#41;</span> <span class="kw1">throws</span> ServletException <span class="br0">&#123;</span><br />
<span class="kw1">this</span>.<span class="me1">config</span> <span class="sy0">=</span> config<span class="sy0">;</span></p>
<p><span class="co1">//Tambien se pueden cargar los parametros</span><br />
<span class="co1">//Configura url desconexión</span><br />
<span class="kw1">this</span>.<span class="me1">urlLogin</span> <span class="sy0">=</span> filterConfig.<span class="me1">getInitParameter</span><span class="br0">&#40;</span>“urlLogin”<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>urlLogin <span class="sy0">==</span> <span class="kw2">null</span> <span class="sy0">||</span> urlLogin.<span class="me1">trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="co1">//Error al cargar la url de login</span><br />
<span class="kw1">throw</span> <span class="kw1">new</span> ServletException<span class="br0">&#40;</span><span class="st0">&quot;No se ha configurado URL de login&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> destroy<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
config <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">public</span> <span class="kw4">void</span> doFilter<span class="br0">&#40;</span>ServletRequest request, ServletResponse response,FilterChain chain<span class="br0">&#41;</span> <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a>, ServletException <span class="br0">&#123;</span></p>
<p>chain.<span class="me1">doFilter</span><span class="br0">&#40;</span>request, response<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="co1">// Extraer Sesión</span><br />
HttpSession session <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>HttpServletRequest<span class="br0">&#41;</span>request<span class="br0">&#41;</span>.<span class="me1">getSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span>session.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;usuario&quot;</span><span class="br0">&#41;</span><span class="sy0">==</span><span class="kw2">null</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//NO hay una session con ususario</span><br />
RequestDispatcher dispatcher <span class="sy0">=</span> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; request.<span class="me1">getRequestDispatcher</span><span class="br0">&#40;</span><span class="st0">&quot;/&quot;</span><span class="sy0">+</span>urlLogin<span class="br0">&#41;</span><span class="sy0">;</span><br />
dispatcher.<span class="me1">forward</span><span class="br0">&#40;</span>request, response<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Una vez definido nuestro Filtro solo tenemos que indicar en el web.xml donde aplicarlo:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;ISO-8859-1&quot;</span><span class="re2">?&gt;</span></span></p>
<p><span class="sc0">&lt;!DOCTYPE web-app</span><br />
<span class="sc0"> &nbsp;PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;</span><br />
<span class="sc0"> &nbsp;&quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;</span></p>
<p><span class="sc3"><span class="re1">&lt;web-app<span class="re2">&gt;</span></span></span><br />
&nbsp; <br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;filter<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;filter-name<span class="re2">&gt;</span></span></span>FiltroSesion<span class="sc3"><span class="re1">&lt;/filter-name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;filter-class<span class="re2">&gt;</span></span></span>es.crazyteam. FiltroUsuario<span class="sc3"><span class="re1">&lt;/filter-class<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;init-param<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;param-name<span class="re2">&gt;</span></span></span>urlLogin<span class="sc3"><span class="re1">&lt;/param-name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;param-value<span class="re2">&gt;</span></span></span>Login.jsp<span class="sc3"><span class="re1">&lt;/param-value<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/init-param<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/filter<span class="re2">&gt;</span></span></span></p>
<p>&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;filter-mapping<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;filter-name<span class="re2">&gt;</span></span></span>FiltroSesion<span class="sc3"><span class="re1">&lt;/filter-name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;url-pattern<span class="re2">&gt;</span></span></span>/menu.jsp<span class="sc3"><span class="re1">&lt;/url-pattern<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/filter-mapping<span class="re2">&gt;</span></span></span></p>
<p><span class="sc3"><span class="re1">&lt;/web-app<span class="re2">&gt;</span></span></span></div>
</div>
<p>Aquí vemos en nuestro filtro como cuando invoquemos la url menu.jsp ira al filtro a comprobar si tenemos sesión, de no tenerla nos mostrará la página de login.</p>
<p>Con los filtros también hay que tener especial cuidado en no crear bucles, por ejemplo si en nuestro filtro definimos el patrón *.jsp cuando intentemos entrar a la página de login.jsp al pasar por el filtro verá que no tenemos sesión y nos intentará enviar otra vez a la misma página a lo que se volverá a aplicar el mismo filtro y entraremos en un bucle infinito. Para evitar esto bastará con tener cuidado con la aplicación de los filtros adecuándolos al flujo de la aplicación. O simplemente añadiendo una excepción en el filtro para nuestra página de login.</p>
<h3  class="related_post_title">No hay artículos relacionados. Echa un ojo a estos:</h3><ul class="related_post"></ul>]]></content:encoded>
			<wfw:commentRss>http://www.crazyteam.es/general/uso-de-filtros-en-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Personalizar i18n en Spring Framework</title>
		<link>http://www.crazyteam.es/general/personalizar-i18n-en-spring-framework/</link>
		<comments>http://www.crazyteam.es/general/personalizar-i18n-en-spring-framework/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 10:41:17 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
		
		<guid isPermaLink="false">http://www.crazyteam.es/?p=68</guid>
		<description><![CDATA[Puede que haya circunstancias en las que no queramos utilizar la traducción mediante i18n por defecto y prefiramos usar nuestro propio gestor de idioma. En el archivo de configuración de spring myservlet-spring.xml añadimos el bean que usaremos, lo único obligatorio es el nombre del  id del bean que llamarán las tags de spring. &#60;bean id=&#34;messageSource&#34; [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if gte mso 9]><xml> Normal   0   21         false   false   false                             MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><xml> </xml><![endif]--><!--  --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} --> <!--[endif]--><!--[if gte mso 9]><xml> Normal   0   21         false   false   false                             MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><xml> </xml><![endif]--><!--  --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} --> <!--[endif]--></p>
<p><a href="http://www.crazyteam.es/wp-content/uploads/2008/11/spring.png"><img class="alignright size-medium wp-image-83" title="spring" src="http://www.crazyteam.es/wp-content/uploads/2008/11/spring.png" alt="" width="128" height="67" /></a>Puede que haya circunstancias en las que no queramos utilizar la traducción mediante i18n por defecto y prefiramos usar nuestro propio gestor de idioma.</p>
<p>En el archivo de configuración de spring myservlet-spring.xml añadimos el bean que usaremos, lo único obligatorio es el nombre del  id del bean que llamarán las tags de spring.</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">id</span>=<span class="st0">&quot;messageSource&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;es.crazyteam.GestorMensajes&quot;</span><span class="re2">/&gt;</span></span></div>
</div>
<p>Para buscar un mensaje desde nuestras jsps se utiliza el tag de spring:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;spring:message</span> <span class="re0">code</span>=<span class="st0">&quot;mensaje-idioma&quot;</span><span class="re2">/&gt;</span></span></div>
</div>
<p>¿ya funciona?, efectivamente nó falta crear la clase del bean, para ello crearemos una clase de ejemplo como la que sigue:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">package</span> <span class="co2">es.crazyteam</span><span class="sy0">;</span></p>
<p><span class="kw1">import</span> <span class="co2">org.springframework.context.support.AbstractMessageSource</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">class</span> GestorMensajes <span class="kw1">extends</span> AbstractMessageSource<span class="br0">&#123;</span><br />
<span class="co3">/** Metodo obligatorio a implementar por heredar AbstractMessageSource este método es al que invoca spring */</span><br />
<span class="kw1">public</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessageformat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageFormat</span></a> resolveCode<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> a,<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Locale</span></a> s<span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p><span class="co1">//Crear mis locales</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Locale</span></a> l<span class="sy0">=</span><span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Locale</span></a><span class="br0">&#40;</span><span class="st0">&quot;es&quot;</span>,<span class="st0">&quot;ES&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">return</span> createMessageFormat<span class="br0">&#40;</span>getMensaje<span class="br0">&#40;</span>a<span class="br0">&#41;</span>,l<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">private</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> getMensaje<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> mensaje<span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p><span class="kw1">return</span> <span class="st0">&quot;Este es el mensaje &quot;</span><span class="sy0">+</span>mensaje<span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></div>
</div>
<p>Ahora ya tenemos todo lo necesario para gestionar nuestros mensajes.</p>
<h3  class="related_post_title">No hay artículos relacionados. Echa un ojo a estos:</h3><ul class="related_post"></ul>]]></content:encoded>
			<wfw:commentRss>http://www.crazyteam.es/general/personalizar-i18n-en-spring-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

