<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eestevez</id>
		<title>Dos Ideas. - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eestevez"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/Especial:Contribuciones/Eestevez"/>
		<updated>2026-05-20T06:14:35Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6934</id>
		<title>Archivo:CrearPortlet.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6934"/>
				<updated>2013-09-30T15:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: subida una nueva versión de «Archivo:CrearPortlet.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6933</id>
		<title>Archivo:CrearPortlet.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6933"/>
				<updated>2013-09-30T15:36:04Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: subida una nueva versión de «Archivo:CrearPortlet.png»:&amp;amp;#32;Revertido a la versión subida el 30 sep 2013 a las 15:32&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6932</id>
		<title>Archivo:CrearPortlet.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6932"/>
				<updated>2013-09-30T15:35:53Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: subida una nueva versión de «Archivo:CrearPortlet.png»:&amp;amp;#32;Revertido a la versión subida el 30 sep 2013 a las 15:32&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6931</id>
		<title>Archivo:CrearPortlet.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6931"/>
				<updated>2013-09-30T15:35:03Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: subida una nueva versión de «Archivo:CrearPortlet.png»:&amp;amp;#32;Revertido a la versión subida el 30 sep 2013 a las 15:29&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6930</id>
		<title>Archivo:CrearPortlet.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6930"/>
				<updated>2013-09-30T15:32:12Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: subida una nueva versión de «Archivo:CrearPortlet.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6929</id>
		<title>Archivo:CrearPortlet.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:CrearPortlet.png&amp;diff=6929"/>
				<updated>2013-09-30T15:29:56Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6928</id>
		<title>Crear un portlet en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6928"/>
				<updated>2013-09-30T15:17:54Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==¿Qué es un portlet? ==&lt;br /&gt;
&lt;br /&gt;
Los portlets son componentes de las interfaces de usuario gestionadas y visualizadas en un portal web como Liferay.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:portletEnLiferay.png]]&lt;br /&gt;
&lt;br /&gt;
==Como crear un portlet para liferay==&lt;br /&gt;
&lt;br /&gt;
A partir del arquetipo de maven (liferay-portlet-archetype) se crea un proyecto web java.&lt;br /&gt;
El proyecto se crea con la siguiente estructura de directorios.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:crearPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
==Estructura del portlet==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estructuraPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dentro de la carpeta WEB-INF se encuentran los archivos de configuración.&lt;br /&gt;
&lt;br /&gt;
'''liferay-display.xml''': describe la categoría en la cual se visualiza en el menú.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;display&amp;gt;&lt;br /&gt;
 	&amp;lt;category name=&amp;quot;category.sample&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet id=&amp;quot;demo&amp;quot; /&amp;gt;&lt;br /&gt;
 	&amp;lt;/category&amp;gt;&lt;br /&gt;
 &amp;lt;/display&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
'''liferay-portlet.xml''': podemos declarar el nombre del portlet, los css, js.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;liferay-portlet-app&amp;gt;&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;icon&amp;gt;/icon.png&amp;lt;/icon&amp;gt;&lt;br /&gt;
 		&amp;lt;header-portlet-css&amp;gt;/css/main.css&amp;lt;/header-portlet-css&amp;gt;&lt;br /&gt;
 		&amp;lt;footer-portlet-javascript&amp;gt;/js/main.js&amp;lt;/footer-portlet-javascript&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Administrator&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Guest&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Power User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
  	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 &amp;lt;/liferay-portlet-app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''liferay-plugin-package.properties''': podemos indicar entre otras cosas las versiones que soporte el portlet como dependencias que necesite.&lt;br /&gt;
&lt;br /&gt;
 	name=demo&lt;br /&gt;
 	module-group-id=liferay&lt;br /&gt;
 	module-incremental-version=1&lt;br /&gt;
 	tags=demo,&lt;br /&gt;
 	short-description=&lt;br /&gt;
 	change-log=&lt;br /&gt;
 	page-url=http://www.liferay.com&lt;br /&gt;
 	author=Liferay, Inc.&lt;br /&gt;
 	licenses=LGPL&lt;br /&gt;
 	liferay-versions=6.1.1, 6.1.2+, 6.1.20+&lt;br /&gt;
 &lt;br /&gt;
 	required-deployment-contexts=\&lt;br /&gt;
 		portal-compat-hook&lt;br /&gt;
&lt;br /&gt;
'''portlet.xml''': define el nombre con el cual el portlet se identifica (éste es único), el nombre con el cual se visualiza, la declaración de los roles de seguridad.&lt;br /&gt;
&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;display-name&amp;gt;demo&amp;lt;/display-name&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-class&amp;gt;com.liferay.util.bridges.mvc.MVCPortlet&amp;lt;/portlet-class&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;name&amp;gt;view-jsp&amp;lt;/name&amp;gt;&lt;br /&gt;
 			&amp;lt;value&amp;gt;/view.jsp&amp;lt;/value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;expiration-cache&amp;gt;0&amp;lt;/expiration-cache&amp;gt;&lt;br /&gt;
 		&amp;lt;supports&amp;gt;&lt;br /&gt;
 			&amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;&lt;br /&gt;
 		&amp;lt;/supports&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-info&amp;gt;&lt;br /&gt;
 			&amp;lt;title&amp;gt;demo&amp;lt;/title&amp;gt;&lt;br /&gt;
 			&amp;lt;short-title&amp;gt;demo&amp;lt;/short-title&amp;gt;&lt;br /&gt;
 			&amp;lt;keywords&amp;gt;demo&amp;lt;/keywords&amp;gt;&lt;br /&gt;
 		&amp;lt;/portlet-info&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
  			&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''view.jsp''': es la visualización del portlet.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
Links&lt;br /&gt;
http://www.liferay.com/documentation/liferay-portal/6.0/development/-/ai/portlet-development&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6927</id>
		<title>Crear un portlet en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6927"/>
				<updated>2013-09-30T15:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es un portlet? ==&lt;br /&gt;
&lt;br /&gt;
Los portlets son componentes de las interfaces de usuario gestionadas y visualizadas en un portal web como Liferay.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:portletEnLiferay.png]]&lt;br /&gt;
&lt;br /&gt;
==Como crear un portlet para liferay==&lt;br /&gt;
&lt;br /&gt;
A partir del arquetipo de maven (liferay-portlet-archetype) se crea un proyecto web java.&lt;br /&gt;
El proyecto se crea con la siguiente estructura de directorios.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:crearPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
==Estructura del portlet==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estructuraPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dentro de la carpeta WEB-INF se encuentran los archivos de configuración.&lt;br /&gt;
&lt;br /&gt;
'''liferay-display.xml''': describe la categoría en la cual se visualiza en el menú.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;display&amp;gt;&lt;br /&gt;
 	&amp;lt;category name=&amp;quot;category.sample&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet id=&amp;quot;demo&amp;quot; /&amp;gt;&lt;br /&gt;
 	&amp;lt;/category&amp;gt;&lt;br /&gt;
 &amp;lt;/display&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
'''liferay-portlet.xml''': podemos declarar el nombre del portlet, los css, js.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;liferay-portlet-app&amp;gt;&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;icon&amp;gt;/icon.png&amp;lt;/icon&amp;gt;&lt;br /&gt;
 		&amp;lt;header-portlet-css&amp;gt;/css/main.css&amp;lt;/header-portlet-css&amp;gt;&lt;br /&gt;
 		&amp;lt;footer-portlet-javascript&amp;gt;/js/main.js&amp;lt;/footer-portlet-javascript&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Administrator&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Guest&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Power User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
  	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 &amp;lt;/liferay-portlet-app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''liferay-plugin-package.properties''': podemos indicar entre otras cosas las versiones que soporte el portlet como dependencias que necesite.&lt;br /&gt;
&lt;br /&gt;
 	name=demo&lt;br /&gt;
 	module-group-id=liferay&lt;br /&gt;
 	module-incremental-version=1&lt;br /&gt;
 	tags=demo,&lt;br /&gt;
 	short-description=&lt;br /&gt;
 	change-log=&lt;br /&gt;
 	page-url=http://www.liferay.com&lt;br /&gt;
 	author=Liferay, Inc.&lt;br /&gt;
 	licenses=LGPL&lt;br /&gt;
 	liferay-versions=6.1.1, 6.1.2+, 6.1.20+&lt;br /&gt;
 &lt;br /&gt;
 	required-deployment-contexts=\&lt;br /&gt;
 		portal-compat-hook&lt;br /&gt;
&lt;br /&gt;
'''portlet.xml''': define el nombre con el cual el portlet se identifica (éste es único), el nombre con el cual se visualiza, la declaración de los roles de seguridad.&lt;br /&gt;
&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;display-name&amp;gt;demo&amp;lt;/display-name&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-class&amp;gt;com.liferay.util.bridges.mvc.MVCPortlet&amp;lt;/portlet-class&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;name&amp;gt;view-jsp&amp;lt;/name&amp;gt;&lt;br /&gt;
 			&amp;lt;value&amp;gt;/view.jsp&amp;lt;/value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;expiration-cache&amp;gt;0&amp;lt;/expiration-cache&amp;gt;&lt;br /&gt;
 		&amp;lt;supports&amp;gt;&lt;br /&gt;
 			&amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;&lt;br /&gt;
 		&amp;lt;/supports&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-info&amp;gt;&lt;br /&gt;
 			&amp;lt;title&amp;gt;demo&amp;lt;/title&amp;gt;&lt;br /&gt;
 			&amp;lt;short-title&amp;gt;demo&amp;lt;/short-title&amp;gt;&lt;br /&gt;
 			&amp;lt;keywords&amp;gt;demo&amp;lt;/keywords&amp;gt;&lt;br /&gt;
 		&amp;lt;/portlet-info&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
  			&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''view.jsp''': es la visualización del portlet.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
Links&lt;br /&gt;
http://www.liferay.com/documentation/liferay-portal/6.0/development/-/ai/portlet-development&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6926</id>
		<title>Crear un portlet en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6926"/>
				<updated>2013-09-30T15:09:43Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es un portlet? ==&lt;br /&gt;
&lt;br /&gt;
Los portlets son componentes de las interfaces de usuario gestionadas y visualizadas en un portal web como Liferay.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:portletEnLiferay.png]]&lt;br /&gt;
&lt;br /&gt;
==Como crear un portlet para liferay==&lt;br /&gt;
&lt;br /&gt;
A partir del arquetipo de maven (liferay-portlet-archetype) se crea un proyecto web java.&lt;br /&gt;
El proyecto se crea con la siguiente estructura de directorios.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:crearPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
==Estructura del portlet==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estructuraPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los archivos de configuración se encuentran dentro de la carpeta WEB-INF.&lt;br /&gt;
&lt;br /&gt;
'''liferay-display.xml''': en este archivo se describe la categoría en la cual el portlet aparece en el menú.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;display&amp;gt;&lt;br /&gt;
 	&amp;lt;category name=&amp;quot;category.sample&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet id=&amp;quot;demo&amp;quot; /&amp;gt;&lt;br /&gt;
 	&amp;lt;/category&amp;gt;&lt;br /&gt;
 &amp;lt;/display&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
'''liferay-portlet.xml''': En este archivo podemos declarar el nombre del portlet, los css, js.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;liferay-portlet-app&amp;gt;&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;icon&amp;gt;/icon.png&amp;lt;/icon&amp;gt;&lt;br /&gt;
 		&amp;lt;header-portlet-css&amp;gt;/css/main.css&amp;lt;/header-portlet-css&amp;gt;&lt;br /&gt;
 		&amp;lt;footer-portlet-javascript&amp;gt;/js/main.js&amp;lt;/footer-portlet-javascript&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Administrator&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Guest&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Power User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
  	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 &amp;lt;/liferay-portlet-app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''liferay-plugin-package.properties''': En este archivo podemos indicar entre otras cosas las versiones que soporte el portlet como dependencias que necesite.&lt;br /&gt;
&lt;br /&gt;
 	name=demo&lt;br /&gt;
 	module-group-id=liferay&lt;br /&gt;
 	module-incremental-version=1&lt;br /&gt;
 	tags=demo,&lt;br /&gt;
 	short-description=&lt;br /&gt;
 	change-log=&lt;br /&gt;
 	page-url=http://www.liferay.com&lt;br /&gt;
 	author=Liferay, Inc.&lt;br /&gt;
 	licenses=LGPL&lt;br /&gt;
 	liferay-versions=6.1.1, 6.1.2+, 6.1.20+&lt;br /&gt;
 &lt;br /&gt;
 	required-deployment-contexts=\&lt;br /&gt;
 		portal-compat-hook&lt;br /&gt;
&lt;br /&gt;
'''portlet.xml''': Se define el nombre con el cual el portlet se identifica (éste es único), el nombre con el cual se visualiza el portlet, la declaración de los roles de seguridad.&lt;br /&gt;
&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;display-name&amp;gt;demo&amp;lt;/display-name&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-class&amp;gt;com.liferay.util.bridges.mvc.MVCPortlet&amp;lt;/portlet-class&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;name&amp;gt;view-jsp&amp;lt;/name&amp;gt;&lt;br /&gt;
 			&amp;lt;value&amp;gt;/view.jsp&amp;lt;/value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;expiration-cache&amp;gt;0&amp;lt;/expiration-cache&amp;gt;&lt;br /&gt;
 		&amp;lt;supports&amp;gt;&lt;br /&gt;
 			&amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;&lt;br /&gt;
 		&amp;lt;/supports&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-info&amp;gt;&lt;br /&gt;
 			&amp;lt;title&amp;gt;demo&amp;lt;/title&amp;gt;&lt;br /&gt;
 			&amp;lt;short-title&amp;gt;demo&amp;lt;/short-title&amp;gt;&lt;br /&gt;
 			&amp;lt;keywords&amp;gt;demo&amp;lt;/keywords&amp;gt;&lt;br /&gt;
 		&amp;lt;/portlet-info&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
  			&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''view.jsp''': es la visualización del portlet.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
Links&lt;br /&gt;
http://www.liferay.com/documentation/liferay-portal/6.0/development/-/ai/portlet-development&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:EstructuraPortlet.png&amp;diff=6925</id>
		<title>Archivo:EstructuraPortlet.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:EstructuraPortlet.png&amp;diff=6925"/>
				<updated>2013-09-30T14:49:40Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:PortletEnLiferay.png&amp;diff=6924</id>
		<title>Archivo:PortletEnLiferay.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:PortletEnLiferay.png&amp;diff=6924"/>
				<updated>2013-09-30T14:49:10Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6923</id>
		<title>Crear un portlet en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Crear_un_portlet_en_Liferay&amp;diff=6923"/>
				<updated>2013-09-30T14:48:35Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: Página creada con '==Qué es un portlet? ==  Los portlets son componentes de las interfaces de usuario gestionadas y visualizadas en un portal web como Liferay.  Archivo:portletEnLiferay.png  …'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Qué es un portlet? ==&lt;br /&gt;
&lt;br /&gt;
Los portlets son componentes de las interfaces de usuario gestionadas y visualizadas en un portal web como Liferay.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:portletEnLiferay.png]]&lt;br /&gt;
&lt;br /&gt;
==Como crear un portlet para liferay==&lt;br /&gt;
&lt;br /&gt;
A partir del arquetipo de maven (liferay-portlet-archetype) se crea un proyecto web java.&lt;br /&gt;
El proyecto se crea con la siguiente estructura de directorios.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:crearPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
==Estructura del portlet==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:estructuraPortlet.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los archivos de configuracion se encuentran dentro de la carpeta WEB-INF.&lt;br /&gt;
&lt;br /&gt;
'''liferay-display.xml''': en este archivo se describe la categoria en la cual el portlet aparece en el menu.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;display&amp;gt;&lt;br /&gt;
 	&amp;lt;category name=&amp;quot;category.sample&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet id=&amp;quot;demo&amp;quot; /&amp;gt;&lt;br /&gt;
 	&amp;lt;/category&amp;gt;&lt;br /&gt;
 &amp;lt;/display&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
'''liferay-portlet.xml''': En este archivo podemos declarar el nombre del portlet, los css, js.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;liferay-portlet-app&amp;gt;&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;icon&amp;gt;/icon.png&amp;lt;/icon&amp;gt;&lt;br /&gt;
 		&amp;lt;header-portlet-css&amp;gt;/css/main.css&amp;lt;/header-portlet-css&amp;gt;&lt;br /&gt;
 		&amp;lt;footer-portlet-javascript&amp;gt;/js/main.js&amp;lt;/footer-portlet-javascript&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Administrator&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Guest&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;Power User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
 	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 	&amp;lt;role-mapper&amp;gt;&lt;br /&gt;
 		&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;role-link&amp;gt;User&amp;lt;/role-link&amp;gt;&lt;br /&gt;
  	&amp;lt;/role-mapper&amp;gt;&lt;br /&gt;
 &amp;lt;/liferay-portlet-app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''liferay-plugin-package.properties''': En este archivo podemos indicar entre otras cosas las versiones que soporte el portlet como dependencias que necesite.&lt;br /&gt;
&lt;br /&gt;
 	name=demo&lt;br /&gt;
 	module-group-id=liferay&lt;br /&gt;
 	module-incremental-version=1&lt;br /&gt;
 	tags=demo,&lt;br /&gt;
 	short-description=&lt;br /&gt;
 	change-log=&lt;br /&gt;
 	page-url=http://www.liferay.com&lt;br /&gt;
 	author=Liferay, Inc.&lt;br /&gt;
 	licenses=LGPL&lt;br /&gt;
 	liferay-versions=6.1.1, 6.1.2+, 6.1.20+&lt;br /&gt;
 &lt;br /&gt;
 	required-deployment-contexts=\&lt;br /&gt;
 		portal-compat-hook&lt;br /&gt;
&lt;br /&gt;
'''portlet.xml''': Se define el nombre con el cual el portlet se identifica (éste es único), el nombre con el cual se visualiza el portlet, la declaracion de los roles de seguridad.&lt;br /&gt;
&lt;br /&gt;
 	&amp;lt;portlet&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-name&amp;gt;demo&amp;lt;/portlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;display-name&amp;gt;demo&amp;lt;/display-name&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-class&amp;gt;com.liferay.util.bridges.mvc.MVCPortlet&amp;lt;/portlet-class&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;name&amp;gt;view-jsp&amp;lt;/name&amp;gt;&lt;br /&gt;
 			&amp;lt;value&amp;gt;/view.jsp&amp;lt;/value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;expiration-cache&amp;gt;0&amp;lt;/expiration-cache&amp;gt;&lt;br /&gt;
 		&amp;lt;supports&amp;gt;&lt;br /&gt;
 			&amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;&lt;br /&gt;
 		&amp;lt;/supports&amp;gt;&lt;br /&gt;
 		&amp;lt;portlet-info&amp;gt;&lt;br /&gt;
 			&amp;lt;title&amp;gt;demo&amp;lt;/title&amp;gt;&lt;br /&gt;
 			&amp;lt;short-title&amp;gt;demo&amp;lt;/short-title&amp;gt;&lt;br /&gt;
 			&amp;lt;keywords&amp;gt;demo&amp;lt;/keywords&amp;gt;&lt;br /&gt;
 		&amp;lt;/portlet-info&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;administrator&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;guest&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
 			&amp;lt;role-name&amp;gt;power-user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 		&amp;lt;security-role-ref&amp;gt;&lt;br /&gt;
  			&amp;lt;role-name&amp;gt;user&amp;lt;/role-name&amp;gt;&lt;br /&gt;
 		&amp;lt;/security-role-ref&amp;gt;&lt;br /&gt;
 	&amp;lt;/portlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''view.jsp''': es la visualizacion del portlet.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
Links&lt;br /&gt;
http://www.liferay.com/documentation/liferay-portal/6.0/development/-/ai/portlet-development&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6922</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6922"/>
				<updated>2013-09-27T11:54:09Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Internacionalización ==&lt;br /&gt;
Liferay provee la internacionalización de un set amplio de idiomas, en el caso de que no se encuentre el idioma ó el dialecto especifico que necesitas, con los siguientes pasos lo podes agregar.&lt;br /&gt;
&lt;br /&gt;
En este caso vamos a gregar el dialecto de Argentina &amp;lt;b&amp;gt;es_AR&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Agregar el archivo &amp;quot;Language_es_AR.properties&amp;quot; en el directorio LIFERAY_PORTAL/WEB-INF/src/content&lt;br /&gt;
&lt;br /&gt;
Agregar la propiedad &amp;quot;locales&amp;quot; al archivo portal-ext.properties, ubicado en el directorio LIFERAY_PORTAL/WEB_INF/classes, en el caso de que no exista el archivo crearlo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,nl_NL,nl_BE,en_US,en_GB,et_EE,fi_FI,fr_FR,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN,es_AR&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agregar en el archivo web.xml ubicado en LIFERAY_PORTAL/WEB_INF/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-name&amp;gt;I18n Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
    &amp;lt;url-pattern&amp;gt;/es_AR/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por último agregar el archivo Language_es_AR.properties en el directorio LIFERAY_PORTAL/WEB_INF/src/content y reiniciar el portal.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
* [[Compatibilidades CSS en Internet Explorer]]&lt;br /&gt;
* [[Botones Redes Sociales]]&lt;br /&gt;
* [[JSON Service API en Liferay]]&lt;br /&gt;
* [[Templates en Liferay]]&lt;br /&gt;
* [[Visualización dinámica de web content en Liferay]]&lt;br /&gt;
* [[Crear un portlet en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6502</id>
		<title>Restlet</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6502"/>
				<updated>2012-02-23T12:50:10Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Restlet]]&lt;br /&gt;
&lt;br /&gt;
Restlet es un framework ligero que ayuda a desarrollar clientes y servicios REST en la plataforma Java creado por Jerome Louvel (Noelios Technologies). &lt;br /&gt;
&lt;br /&gt;
==Arquitectura==&lt;br /&gt;
&lt;br /&gt;
Soporta todos los conceptos del estilo de arquitectura Transferencia de Estado Representacional (REST) (Recursos, Representación, Conectores, Componentes, etc..).&lt;br /&gt;
&lt;br /&gt;
Restlet es capaz de soportar los principales estándares Web tales como HTTP, SMTP, XML, JSON, WADL y Atom. Están disponibles diversas extensiones para integrarse con Servlet, Spring, Jetty, Grizzly, Simple, JAXB, JiBX, Velocity o FreeMarker.&lt;br /&gt;
&lt;br /&gt;
==Primeros pasos==&lt;br /&gt;
Vamos a explicar como crear un recurso que diga &amp;quot;Hola Mundo&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
Creamos un recurso, el cual se va a publicar por medio del metodo GET.&lt;br /&gt;
 public class HolaMundoResource extends ServerResource {  &lt;br /&gt;
   &lt;br /&gt;
     @Get  &lt;br /&gt;
     public String mensaje() {  &lt;br /&gt;
         return &amp;quot;Hola Mundo&amp;quot;;  &lt;br /&gt;
     }  &lt;br /&gt;
   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
A continuación creamos un router que es el encarga de publicar nuestro servicio.&lt;br /&gt;
&lt;br /&gt;
 public class HolaMundoApplication extends Application {  &lt;br /&gt;
   &lt;br /&gt;
     /** &lt;br /&gt;
      * Creamos la ruta desde la cual se van a recibir todas las llamadas.&lt;br /&gt;
      */  &lt;br /&gt;
     @Override  &lt;br /&gt;
     public synchronized Restlet createInboundRoot() {  &lt;br /&gt;
        // Creamos el enrutador que rutea cada llamada a una nueva instancia de HolaMundoResource.&lt;br /&gt;
        Router router = new Router(getContext());  &lt;br /&gt;
 &lt;br /&gt;
        // Definimos una ruta.&lt;br /&gt;
        router.attach(&amp;quot;/hola&amp;quot;, HolaMundoResource.class);  &lt;br /&gt;
   &lt;br /&gt;
        return router;  &lt;br /&gt;
     }  &lt;br /&gt;
   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
Configuramos el web.xml con nuestro servlet para que cuando le enviemos un pedido a una URL, nuestro servidor lo delegue al servlet de rest. &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;  &lt;br /&gt;
    &amp;lt;web-app id=&amp;quot;WebApp_ID&amp;quot; version=&amp;quot;2.4&amp;quot;  &lt;br /&gt;
                xmlns=&amp;quot;http://java.sun.com/xml/ns/j2ee&amp;quot;  &lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;  &lt;br /&gt;
                xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/j2ee  &lt;br /&gt;
                     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&amp;quot;&amp;gt;  &lt;br /&gt;
       &amp;lt;display-name&amp;gt;demo restlet&amp;lt;/display-name&amp;gt;  &lt;br /&gt;
       &amp;lt;!-- Application class name --&amp;gt;  &lt;br /&gt;
       &amp;lt;context-param&amp;gt;  &lt;br /&gt;
          &amp;lt;param-name&amp;gt;org.restlet.application&amp;lt;/param-name&amp;gt;  &lt;br /&gt;
          &amp;lt;param-value&amp;gt;  &lt;br /&gt;
             com.demo.restlet.HolaMundoApplication  &lt;br /&gt;
          &amp;lt;/param-value&amp;gt;  &lt;br /&gt;
       &amp;lt;/context-param&amp;gt;  &lt;br /&gt;
      &lt;br /&gt;
       &amp;lt;!-- Restlet adapter --&amp;gt;  &lt;br /&gt;
       &amp;lt;servlet&amp;gt;  &lt;br /&gt;
          &amp;lt;servlet-name&amp;gt;RestletServlet&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;
          &amp;lt;servlet-class&amp;gt;  &lt;br /&gt;
             org.restlet.ext.servlet.ServerServlet  &lt;br /&gt;
          &amp;lt;/servlet-class&amp;gt;  &lt;br /&gt;
       &amp;lt;/servlet&amp;gt;  &lt;br /&gt;
      &lt;br /&gt;
       &amp;lt;!-- Catch all requests --&amp;gt;  &lt;br /&gt;
       &amp;lt;servlet-mapping&amp;gt;  &lt;br /&gt;
          &amp;lt;servlet-name&amp;gt;RestletServlet&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;
          &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;  &lt;br /&gt;
       &amp;lt;/servlet-mapping&amp;gt;  &lt;br /&gt;
    &amp;lt;/web-app&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Finalmente deployar el war (en mi caso demo-restlet.war) en el servidor de aplicación que más deseen, ingresar la url http://127.0.0.1/demo-restlet/hola y se visualiza nuestro Hola Mundo en el navegador.&lt;br /&gt;
&lt;br /&gt;
Referencias:&lt;br /&gt;
http://www.restlet.org/documentation/2.0/firstSteps&lt;br /&gt;
&lt;br /&gt;
==Maven==&lt;br /&gt;
Si se desea trabajar con maven, se debe agregar en el pom.xml el repositorio de restlet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;repositories&amp;gt;&lt;br /&gt;
   &amp;lt;repository&amp;gt;&lt;br /&gt;
     &amp;lt;id&amp;gt;maven-restlet&amp;lt;/id&amp;gt;&lt;br /&gt;
     &amp;lt;name&amp;gt;Public online Restlet repository&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;url&amp;gt;http://maven.restlet.org&amp;lt;/url&amp;gt;&lt;br /&gt;
   &amp;lt;/repository&amp;gt;&lt;br /&gt;
 &amp;lt;/repositories&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez que agregado el repositorio se pueden agregar las dependencias. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dependency&amp;gt;&lt;br /&gt;
   &amp;lt;groupId&amp;gt;org.restlet.jse&amp;lt;/groupId&amp;gt;&lt;br /&gt;
   &amp;lt;artifactId&amp;gt;org.restlet&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
   &amp;lt;version&amp;gt;2.1-M7&amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/dependency&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;dependency&amp;gt;&lt;br /&gt;
   &amp;lt;groupId&amp;gt;org.restlet.jse&amp;lt;/groupId&amp;gt;&lt;br /&gt;
   &amp;lt;artifactId&amp;gt;org.restlet.ext.simple&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
   &amp;lt;version&amp;gt;2.1-M7&amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;/dependency&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Más información==&lt;br /&gt;
[http://www.restlet.org/ Web oficial de Restlet]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Log4J&amp;diff=6500</id>
		<title>Log4J</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Log4J&amp;diff=6500"/>
				<updated>2012-02-14T15:51:06Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: /* Configurar Log4j con Spring */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Log4J es una librería para resolver el log de aplicaciones [[Java]].&lt;br /&gt;
&lt;br /&gt;
==Los Appender==&lt;br /&gt;
Log4J utiliza &amp;quot;appenders&amp;quot; para guardar el log generado por las aplicaciones. Un appender es el encargado de procesar un mensaje de log enviado por la aplicación. Usualmente se encarga de almacenarlo en algún medio persistente, como ser un archivo. &lt;br /&gt;
&lt;br /&gt;
Existen distintos appenders para guardar logs en archivos, base de datos o colas de mensajeria. &lt;br /&gt;
&lt;br /&gt;
===JMSAppnder===&lt;br /&gt;
&lt;br /&gt;
Log4J cuenta con un Appender especial que redirecciona los eventos de log a un Topic [[JMS]].&lt;br /&gt;
&lt;br /&gt;
El appender a utilizar es ''org.apache.log4j.net.JMSAppender'', el cual se encarga de enviar los eventos de log a un Topic asociado. Un topic es parecido a una cola, pero con la diferencia que los mensajes se distribuyen a todos los suscriptores de la misma. Si no hay suscriptores, el mensaje se pierde.&lt;br /&gt;
&lt;br /&gt;
El JMSAppnder es muy útil en un ambiente en cluster, para centralizar la información de los log en un único lugar.&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo de uso ====&lt;br /&gt;
&lt;br /&gt;
En la práctica, utilizar log4j con este appender es igual que en cualquier otro caso. En el archivo de configuración ''log4j.properties'' es necesario agregar el appender en cuestión.&lt;br /&gt;
&lt;br /&gt;
 log4j.logger.com.zim=DEBUG, jms&lt;br /&gt;
 log4j.appender.jms=org.apache.log4j.net.JMSAppender&lt;br /&gt;
 log4j.appender.jms.InitialContextFactoryName=weblogic.jndi.WLInitialContextFactory&lt;br /&gt;
 log4j.appender.jms.ProviderURL=t3://miApplicationServer:7001&lt;br /&gt;
 log4j.appender.jms.TopicConnectionFactoryBindingName=JmsZimCF&lt;br /&gt;
 log4j.appender.jms.TopicBindingName=ZimTopic&lt;br /&gt;
 log4j.appender.jms.locationInfo=true&lt;br /&gt;
&lt;br /&gt;
En el ejemplo, utilizamos el Connection Factory ''JmsZmiCF'' para conectarnos al topic ''ZimTopic'' (ambos teniendo que estar configurados en algún [[Servidor de Aplicaciones]]).&lt;br /&gt;
&lt;br /&gt;
Con esta configuración todos los logs de las clases que pertenezcan al paquete &amp;quot;com.zim&amp;quot; se enviaran como mensajes al topic. Al Topic se envian objetos de tipo ''LoggingEvent'', clase que contiene la información de un evento de log.&lt;br /&gt;
&lt;br /&gt;
Luego, podrá haber distintos suscriptores que tomen las acciones necesarias sobre el mensaje. Por ejemplo, podriamos tener suscriptores que guarden el log en una base de datos, u otros que envien un mail o sms.&lt;br /&gt;
&lt;br /&gt;
====Sobre el locationInfo====&lt;br /&gt;
&lt;br /&gt;
Por default, el atributo locationInfo está en &amp;quot;false&amp;quot;. Esto hace que NO se envien los datos para el objeto ''LocationInfo'' de ''LoggingEvent''. Al setearlo en true, el objeto ''LocationInfo'' contendrá la información sobre la clase, método y número de línea en donde ocurrió el error.&lt;br /&gt;
&lt;br /&gt;
====Procesando el mensaje====&lt;br /&gt;
&lt;br /&gt;
Luego, queda tan solo decidir qué hacer con el mensaje. Usualmente, será un [[Message Driven Bean]] que procese de alguna manera el mensaje que envia Log4J.&lt;br /&gt;
&lt;br /&gt;
¿Y qué envia exactamente? Log4J enviará un ''ObjectMessage'' de JMS, que contiene una instancia de ''LoggingEvent'', la cual contiene la información relativa al log que generó la aplicación.&lt;br /&gt;
&lt;br /&gt;
===SMTPAppender===&lt;br /&gt;
&lt;br /&gt;
Es un Appender muy útil para la generación de alarmas vía mail. &lt;br /&gt;
&lt;br /&gt;
NOTA 1: Por estar pensado para casos de error (o tal vez por bug) sólo se envía el mail cuando el nivel de log es ERROR o superior. &lt;br /&gt;
&lt;br /&gt;
NOTA 2: Utilizar la versión de log4j 1.2.16 o superior (en las anteriores hay algún inconveniente sobre todo si se utiliza smtp.gmail.com).&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo de uso ====&lt;br /&gt;
&lt;br /&gt;
Configuración en ''log4j.properties'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
# Acordate!!! Nivel ERROR o superior&lt;br /&gt;
&lt;br /&gt;
log4j.logger.com.demo.smtpAppender.MyService=ERROR, mailAppender&lt;br /&gt;
&lt;br /&gt;
# SMTP appender para alarmas via mail&lt;br /&gt;
&lt;br /&gt;
log4j.appender.mailAppender=org.apache.log4j.net.SMTPAppender&lt;br /&gt;
log4j.appender.mailAppender.Threshold=WARN&lt;br /&gt;
log4j.appender.mailAppender.BufferSize=10&lt;br /&gt;
log4j.appender.mailAppender.To=&amp;lt;mails_destino_separados_por_coma&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.From=&amp;lt;mail_from&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPHost=&amp;lt;smtp_host&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPPort=&amp;lt;puerto&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPUsername=&amp;lt;username&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPPassword=&amp;lt;password&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPProtocol=smtps&lt;br /&gt;
log4j.appender.mailAppender.Subject=Alarma generada con Log4J&lt;br /&gt;
log4j.appender.mailAppender.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.mailAppender.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esta configuración los logs de nivel error o superior de la clase MyService enviarán un mail con la información que se loguee.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Log4j en J2EE, en servidores WebLogic==&lt;br /&gt;
&lt;br /&gt;
Si queres compartir los mismos componentes log4j en un módulo EJB y Web, y el EJB se usa localmente, en el ear tienen que estar el EJB y el Web. El log4-*.jar en /APP-INF/lib, y log4.properties en /APP-INF/classes. /APP-INF/ en la raíz del ear. &lt;br /&gt;
&lt;br /&gt;
Y dentro del build-impl.xml del ear, los sgtes. pasos para la tarea que crea el META-INF:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;copy todir=&amp;quot;${build.dir}/APP-INF/lib&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fileset file=&amp;quot;${log4j.jar}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/copy&amp;gt;&lt;br /&gt;
&amp;lt;copy todir=&amp;quot;${build.dir}/APP-INF/classes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fileset file=&amp;quot;${log4j.properties}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/copy&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Log4J en Debug==&lt;br /&gt;
&lt;br /&gt;
Se puede usar el argumento '''-Dlog4j.debug''' como parametro para la JVM y muestra algunas cosas de log4J por consola, como por ejemplo, el archivo desde donde está levantando las propiedades.&lt;br /&gt;
&lt;br /&gt;
==Obtención del Logger==&lt;br /&gt;
Existe una serie de variantes para definir y obtener el logger de una clase:&lt;br /&gt;
&lt;br /&gt;
===Los modificadores===&lt;br /&gt;
====private====&lt;br /&gt;
Por lo general queremos que el logger se reporte como la clase que se está ejecutando. Utilizando private nos aseguramos que una clase que herede tenga que declarar su propio Logger y no usará accidentalmente el de la superclase. Contrariamente, si queremos por granularidad que utilice el de la superclase, habrá que declararlo como protected.&lt;br /&gt;
&lt;br /&gt;
====final====&lt;br /&gt;
La referencia al logger es la misma durante todo el ciclo de vida de una clase (si se declara static) o de un objeto (si es atributo de instancia). Por lo tanto, declarándola final se expresa esto, se protege a una asignación errónea y se mejora la performance.&lt;br /&gt;
&lt;br /&gt;
====static====&lt;br /&gt;
La creación del Logger está administrada por una fábrica a la que le pedimos las instancias. Es responsabilidad de la fábrica darnos la instancia correcta. En este caso, la motivación de utilizar static no es la de tener una sola copia. La motivación es que los logger no deben serializarse, deberían ser transient. Siendo static es una variable de la clase y no un atributo de la instancia, por lo que no será serializado. La razón de no marcarlo como transient (que sería conceptualmente más acertado) es que se debería implementar un mecanismo para que cuando la instancia es des-serializada, vuelva a obtener una copia del logger.&lt;br /&gt;
&lt;br /&gt;
====transient====&lt;br /&gt;
Los logger no deben ser serializados, por eso deberían ser marcados como transient. Es más fácil marcarlos como static ya que de esta forma no es necesario volver a obtenerlos cuando la clase es des-serializada. Si la clase no es serializable, no es necesario.&lt;br /&gt;
&lt;br /&gt;
===Clave para la obtención del logger===&lt;br /&gt;
El logger se le pide a la fábrica a través de una clave. Esta clave es de tipo String. El método está sobrecargado para recibir también un objeto de tipo class que luego la fábrica convertirá a String.&lt;br /&gt;
&lt;br /&gt;
====String====&lt;br /&gt;
 private static final Logger log = Logger.getLogger(&amp;quot;com.foo.bar.Blah&amp;quot;);&lt;br /&gt;
Utilizando un String se obtiene un logger independientemente de la clase donde se esté. Si lo que se busca el logger para la clase, esta es la forma más riesgosa ya que no está verificada por el compilador.&lt;br /&gt;
&lt;br /&gt;
====Objeto class====&lt;br /&gt;
 private static final Logger log = Logger.getLogger(Blah.class);&lt;br /&gt;
Utilizando un objeto de tipo Class permite que el compilador verifique el nombre de la clase. También se actualiza si se utiliza alguna herramienta o IDE para cambiar el nomre de la clase.&lt;br /&gt;
&lt;br /&gt;
====método getClass()====&lt;br /&gt;
 private transient Logger log = Logger.getLogger(getClass());&lt;br /&gt;
En este caso la clave se genera en tiempo de ejecución pidiendo al objeto su clase a través del método getClass(). Esto tiene la ventaja de que siempre tendrá el nombre apropiado de la clase. Tiene la restricción de que sólo se podrá utilizar si el logger es un atributo de  instancia (no static).&lt;br /&gt;
&lt;br /&gt;
Otra particularidad es que el método getClass() invocado en una clase padre responderá desde la clase hija.&lt;br /&gt;
&lt;br /&gt;
En caso de que el objeto sea serializable habrá que agregar el modificador transient para que no se serialice el logger.&lt;br /&gt;
&lt;br /&gt;
===Conclusión===&lt;br /&gt;
La forma práctica de no cometer errores es la de utilizar la combinación más restrictiva y cambiarla sólo si se tiene alguna razón claramente justificada e implementando los mecanismos necesarios.&lt;br /&gt;
&lt;br /&gt;
Forma típica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public class Blah {&lt;br /&gt;
    private static final Logger log = Logger.getLogger(Blah.class);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Log4JMDC ==&lt;br /&gt;
MDC es una característica de [[Log4J]] que permite agregar información adicional (de forma &amp;quot;clave=valor&amp;quot;), que luego puede ser referenciada en el patrón de log. Aquí entonces podemos almacenar datos generales (como ser, el nombre de usuario) y mostrarlos en todos los logs que se generen. &lt;br /&gt;
&lt;br /&gt;
En el patrón de log, se pueden hacer referencia a las variables del MDC usando: &lt;br /&gt;
 %X{clave}&lt;br /&gt;
&lt;br /&gt;
Los datos del MDC se guardan en el thread en ejecución. Un uso común es crear un Filter web, y allí guardar el nombre de usuario logueado en el entorno MDC, para que luego pueda loguearse. &lt;br /&gt;
&lt;br /&gt;
=== Filter web con MDC ===&lt;br /&gt;
El siguiente es un filter web común que guarda la variable &amp;quot;username&amp;quot; en el MDC, para luego referenciarla en patrón de log4j.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * To change this template, choose Tools | Templates&lt;br /&gt;
 * and open the template in the editor.&lt;br /&gt;
 */&lt;br /&gt;
package com.dosideas.mdc.filter;&lt;br /&gt;
&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import javax.servlet.*;&lt;br /&gt;
import org.apache.log4j.MDC;&lt;br /&gt;
import org.springframework.security.core.Authentication;&lt;br /&gt;
import org.springframework.security.core.context.SecurityContextHolder;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Adds MDC information for Log4j. In particular, it adds the username (if&lt;br /&gt;
 * available) to MDC.&lt;br /&gt;
 */&lt;br /&gt;
public class Log4jMDCFilter implements Filter {&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {&lt;br /&gt;
&lt;br /&gt;
        String username = obtenerNombreDeUsuarioLogueado();&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            MDC.put(&amp;quot;username&amp;quot;, username);&lt;br /&gt;
            chain.doFilter(request, response);&lt;br /&gt;
        } finally {&lt;br /&gt;
            MDC.remove(&amp;quot;username&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void init(FilterConfig filterConfig) throws ServletException { }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void destroy() { }&lt;br /&gt;
&lt;br /&gt;
    private String obtenerNombreDeUsuarioLogueado() { .... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego, en el archivo log4j.xml podemos hacer uso de la variable username (noten el valor del atributo &amp;quot;ConversionPattern&amp;quot;): &lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM &amp;quot;log4j.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;log4j:configuration xmlns:log4j=&amp;quot;http://jakarta.apache.org/log4j/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;appender name=&amp;quot;console&amp;quot; class=&amp;quot;org.apache.log4j.ConsoleAppender&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;Target&amp;quot; value=&amp;quot;System.out&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;layout class=&amp;quot;org.apache.log4j.PatternLayout&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;param name=&amp;quot;ConversionPattern&amp;quot; value=&amp;quot;%-5p %d{ISO8601} [%X{username}] %c - %m%n&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/layout&amp;gt;&lt;br /&gt;
    &amp;lt;/appender&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;root&amp;gt;&lt;br /&gt;
        &amp;lt;priority value =&amp;quot;debug&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;appender-ref ref=&amp;quot;console&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/log4j:configuration&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modificar log4j en ejecución ==&lt;br /&gt;
Utilizando un listener de spring se puede configurar la ruta del archivo log4j.properties (fuera del empaquetado) y el tiempo en que se vuelve a leer el mismo, lo cual nos permite modificar sus valores en ejecucion sin necesidad de redeployar la aplicacion. &lt;br /&gt;
&lt;br /&gt;
Para esto se configura dentro del web.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;listener&amp;gt;&lt;br /&gt;
  &amp;lt;listener-class&amp;gt;org.springframework.web.util.Log4jConfigListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;
&amp;lt;/listener&amp;gt;&lt;br /&gt;
&amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;log4jConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;file:/path/log4j.properties&amp;lt;/param-value&amp;gt;&lt;br /&gt;
&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;log4jRefreshInterval&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;5000&amp;lt;/param-value&amp;gt;&lt;br /&gt;
&amp;lt;/context-param&amp;gt;   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un error con el que nos podemos topar al momento de agregar esta configuración e intentar desplegar en Weblogic es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;Cannot set web app root system property when WAR file is not expanded&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ante este error, la solución es agregar en el weblogic.xml dentro del tag &amp;lt;weblogic-web-app&amp;gt; el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;container-descriptor&amp;gt;&lt;br /&gt;
        &amp;lt;show-archived-real-path-enabled&amp;gt;true&amp;lt;/show-archived-real-path-enabled&amp;gt;&lt;br /&gt;
&amp;lt;/container-descriptor&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configurar Log4j con Spring ==&lt;br /&gt;
Para configurar Log4j con Spring se debe agregar el siguiente bean a la aplicación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
 &amp;lt;bean id=&amp;quot;log4jInitializer&amp;quot;  class=&amp;quot;org.springframework.beans.factory.config.MethodInvokingFactoryBean&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;staticMethod&amp;quot;  value=&amp;quot;org.springframework.util.Log4jConfigurer.initLogging&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;arguments&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;list&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;file:/path/log4j.properties&amp;lt;/value&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;1000&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
 &amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el bean se esta indicando la ruta desde la cual se va a tomar el log4j.properties y el intervalo de refresco, el cual nos permite modificar sus valores en ejecucion sin necesidad de redeployar la aplicacion.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [http://logging.apache.org/log4j Web oficial de Log4J]&lt;br /&gt;
* [http://logging.apache.org/log4j/docs/api/org/apache/log4j/spi/LoggingEvent.html Javadoc del LogginEvent]&lt;br /&gt;
* [http://www.slideshare.net/Emmerson_Miranda/log4j-1215-short-manual Introducción a Log4j]&lt;br /&gt;
* [http://books.google.com.ar/books?id=vHvY008Zq-YC&amp;amp;pg=PA158&amp;amp;lpg=PA158&amp;amp;dq=weblogic+same+class+loader+log4j&amp;amp;source=bl&amp;amp;ots=yh8Z3e1X7C&amp;amp;sig=x81fCioIEn5nGAZNRg8kLNcOk0Y&amp;amp;hl=es&amp;amp;ei=x267Sum5HprKtgfD1NXEDQ&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=7#v=onepage&amp;amp;q=weblogic%20same%20class%20loader%20log4j&amp;amp;f=false Pro Apache Log4j]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Log4J&amp;diff=6499</id>
		<title>Log4J</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Log4J&amp;diff=6499"/>
				<updated>2012-02-14T15:48:34Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: /* Configurar Log4j con Spring */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Log4J es una librería para resolver el log de aplicaciones [[Java]].&lt;br /&gt;
&lt;br /&gt;
==Los Appender==&lt;br /&gt;
Log4J utiliza &amp;quot;appenders&amp;quot; para guardar el log generado por las aplicaciones. Un appender es el encargado de procesar un mensaje de log enviado por la aplicación. Usualmente se encarga de almacenarlo en algún medio persistente, como ser un archivo. &lt;br /&gt;
&lt;br /&gt;
Existen distintos appenders para guardar logs en archivos, base de datos o colas de mensajeria. &lt;br /&gt;
&lt;br /&gt;
===JMSAppnder===&lt;br /&gt;
&lt;br /&gt;
Log4J cuenta con un Appender especial que redirecciona los eventos de log a un Topic [[JMS]].&lt;br /&gt;
&lt;br /&gt;
El appender a utilizar es ''org.apache.log4j.net.JMSAppender'', el cual se encarga de enviar los eventos de log a un Topic asociado. Un topic es parecido a una cola, pero con la diferencia que los mensajes se distribuyen a todos los suscriptores de la misma. Si no hay suscriptores, el mensaje se pierde.&lt;br /&gt;
&lt;br /&gt;
El JMSAppnder es muy útil en un ambiente en cluster, para centralizar la información de los log en un único lugar.&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo de uso ====&lt;br /&gt;
&lt;br /&gt;
En la práctica, utilizar log4j con este appender es igual que en cualquier otro caso. En el archivo de configuración ''log4j.properties'' es necesario agregar el appender en cuestión.&lt;br /&gt;
&lt;br /&gt;
 log4j.logger.com.zim=DEBUG, jms&lt;br /&gt;
 log4j.appender.jms=org.apache.log4j.net.JMSAppender&lt;br /&gt;
 log4j.appender.jms.InitialContextFactoryName=weblogic.jndi.WLInitialContextFactory&lt;br /&gt;
 log4j.appender.jms.ProviderURL=t3://miApplicationServer:7001&lt;br /&gt;
 log4j.appender.jms.TopicConnectionFactoryBindingName=JmsZimCF&lt;br /&gt;
 log4j.appender.jms.TopicBindingName=ZimTopic&lt;br /&gt;
 log4j.appender.jms.locationInfo=true&lt;br /&gt;
&lt;br /&gt;
En el ejemplo, utilizamos el Connection Factory ''JmsZmiCF'' para conectarnos al topic ''ZimTopic'' (ambos teniendo que estar configurados en algún [[Servidor de Aplicaciones]]).&lt;br /&gt;
&lt;br /&gt;
Con esta configuración todos los logs de las clases que pertenezcan al paquete &amp;quot;com.zim&amp;quot; se enviaran como mensajes al topic. Al Topic se envian objetos de tipo ''LoggingEvent'', clase que contiene la información de un evento de log.&lt;br /&gt;
&lt;br /&gt;
Luego, podrá haber distintos suscriptores que tomen las acciones necesarias sobre el mensaje. Por ejemplo, podriamos tener suscriptores que guarden el log en una base de datos, u otros que envien un mail o sms.&lt;br /&gt;
&lt;br /&gt;
====Sobre el locationInfo====&lt;br /&gt;
&lt;br /&gt;
Por default, el atributo locationInfo está en &amp;quot;false&amp;quot;. Esto hace que NO se envien los datos para el objeto ''LocationInfo'' de ''LoggingEvent''. Al setearlo en true, el objeto ''LocationInfo'' contendrá la información sobre la clase, método y número de línea en donde ocurrió el error.&lt;br /&gt;
&lt;br /&gt;
====Procesando el mensaje====&lt;br /&gt;
&lt;br /&gt;
Luego, queda tan solo decidir qué hacer con el mensaje. Usualmente, será un [[Message Driven Bean]] que procese de alguna manera el mensaje que envia Log4J.&lt;br /&gt;
&lt;br /&gt;
¿Y qué envia exactamente? Log4J enviará un ''ObjectMessage'' de JMS, que contiene una instancia de ''LoggingEvent'', la cual contiene la información relativa al log que generó la aplicación.&lt;br /&gt;
&lt;br /&gt;
===SMTPAppender===&lt;br /&gt;
&lt;br /&gt;
Es un Appender muy útil para la generación de alarmas vía mail. &lt;br /&gt;
&lt;br /&gt;
NOTA 1: Por estar pensado para casos de error (o tal vez por bug) sólo se envía el mail cuando el nivel de log es ERROR o superior. &lt;br /&gt;
&lt;br /&gt;
NOTA 2: Utilizar la versión de log4j 1.2.16 o superior (en las anteriores hay algún inconveniente sobre todo si se utiliza smtp.gmail.com).&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo de uso ====&lt;br /&gt;
&lt;br /&gt;
Configuración en ''log4j.properties'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
# Acordate!!! Nivel ERROR o superior&lt;br /&gt;
&lt;br /&gt;
log4j.logger.com.demo.smtpAppender.MyService=ERROR, mailAppender&lt;br /&gt;
&lt;br /&gt;
# SMTP appender para alarmas via mail&lt;br /&gt;
&lt;br /&gt;
log4j.appender.mailAppender=org.apache.log4j.net.SMTPAppender&lt;br /&gt;
log4j.appender.mailAppender.Threshold=WARN&lt;br /&gt;
log4j.appender.mailAppender.BufferSize=10&lt;br /&gt;
log4j.appender.mailAppender.To=&amp;lt;mails_destino_separados_por_coma&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.From=&amp;lt;mail_from&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPHost=&amp;lt;smtp_host&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPPort=&amp;lt;puerto&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPUsername=&amp;lt;username&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPPassword=&amp;lt;password&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPProtocol=smtps&lt;br /&gt;
log4j.appender.mailAppender.Subject=Alarma generada con Log4J&lt;br /&gt;
log4j.appender.mailAppender.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.mailAppender.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esta configuración los logs de nivel error o superior de la clase MyService enviarán un mail con la información que se loguee.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Log4j en J2EE, en servidores WebLogic==&lt;br /&gt;
&lt;br /&gt;
Si queres compartir los mismos componentes log4j en un módulo EJB y Web, y el EJB se usa localmente, en el ear tienen que estar el EJB y el Web. El log4-*.jar en /APP-INF/lib, y log4.properties en /APP-INF/classes. /APP-INF/ en la raíz del ear. &lt;br /&gt;
&lt;br /&gt;
Y dentro del build-impl.xml del ear, los sgtes. pasos para la tarea que crea el META-INF:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;copy todir=&amp;quot;${build.dir}/APP-INF/lib&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fileset file=&amp;quot;${log4j.jar}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/copy&amp;gt;&lt;br /&gt;
&amp;lt;copy todir=&amp;quot;${build.dir}/APP-INF/classes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fileset file=&amp;quot;${log4j.properties}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/copy&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Log4J en Debug==&lt;br /&gt;
&lt;br /&gt;
Se puede usar el argumento '''-Dlog4j.debug''' como parametro para la JVM y muestra algunas cosas de log4J por consola, como por ejemplo, el archivo desde donde está levantando las propiedades.&lt;br /&gt;
&lt;br /&gt;
==Obtención del Logger==&lt;br /&gt;
Existe una serie de variantes para definir y obtener el logger de una clase:&lt;br /&gt;
&lt;br /&gt;
===Los modificadores===&lt;br /&gt;
====private====&lt;br /&gt;
Por lo general queremos que el logger se reporte como la clase que se está ejecutando. Utilizando private nos aseguramos que una clase que herede tenga que declarar su propio Logger y no usará accidentalmente el de la superclase. Contrariamente, si queremos por granularidad que utilice el de la superclase, habrá que declararlo como protected.&lt;br /&gt;
&lt;br /&gt;
====final====&lt;br /&gt;
La referencia al logger es la misma durante todo el ciclo de vida de una clase (si se declara static) o de un objeto (si es atributo de instancia). Por lo tanto, declarándola final se expresa esto, se protege a una asignación errónea y se mejora la performance.&lt;br /&gt;
&lt;br /&gt;
====static====&lt;br /&gt;
La creación del Logger está administrada por una fábrica a la que le pedimos las instancias. Es responsabilidad de la fábrica darnos la instancia correcta. En este caso, la motivación de utilizar static no es la de tener una sola copia. La motivación es que los logger no deben serializarse, deberían ser transient. Siendo static es una variable de la clase y no un atributo de la instancia, por lo que no será serializado. La razón de no marcarlo como transient (que sería conceptualmente más acertado) es que se debería implementar un mecanismo para que cuando la instancia es des-serializada, vuelva a obtener una copia del logger.&lt;br /&gt;
&lt;br /&gt;
====transient====&lt;br /&gt;
Los logger no deben ser serializados, por eso deberían ser marcados como transient. Es más fácil marcarlos como static ya que de esta forma no es necesario volver a obtenerlos cuando la clase es des-serializada. Si la clase no es serializable, no es necesario.&lt;br /&gt;
&lt;br /&gt;
===Clave para la obtención del logger===&lt;br /&gt;
El logger se le pide a la fábrica a través de una clave. Esta clave es de tipo String. El método está sobrecargado para recibir también un objeto de tipo class que luego la fábrica convertirá a String.&lt;br /&gt;
&lt;br /&gt;
====String====&lt;br /&gt;
 private static final Logger log = Logger.getLogger(&amp;quot;com.foo.bar.Blah&amp;quot;);&lt;br /&gt;
Utilizando un String se obtiene un logger independientemente de la clase donde se esté. Si lo que se busca el logger para la clase, esta es la forma más riesgosa ya que no está verificada por el compilador.&lt;br /&gt;
&lt;br /&gt;
====Objeto class====&lt;br /&gt;
 private static final Logger log = Logger.getLogger(Blah.class);&lt;br /&gt;
Utilizando un objeto de tipo Class permite que el compilador verifique el nombre de la clase. También se actualiza si se utiliza alguna herramienta o IDE para cambiar el nomre de la clase.&lt;br /&gt;
&lt;br /&gt;
====método getClass()====&lt;br /&gt;
 private transient Logger log = Logger.getLogger(getClass());&lt;br /&gt;
En este caso la clave se genera en tiempo de ejecución pidiendo al objeto su clase a través del método getClass(). Esto tiene la ventaja de que siempre tendrá el nombre apropiado de la clase. Tiene la restricción de que sólo se podrá utilizar si el logger es un atributo de  instancia (no static).&lt;br /&gt;
&lt;br /&gt;
Otra particularidad es que el método getClass() invocado en una clase padre responderá desde la clase hija.&lt;br /&gt;
&lt;br /&gt;
En caso de que el objeto sea serializable habrá que agregar el modificador transient para que no se serialice el logger.&lt;br /&gt;
&lt;br /&gt;
===Conclusión===&lt;br /&gt;
La forma práctica de no cometer errores es la de utilizar la combinación más restrictiva y cambiarla sólo si se tiene alguna razón claramente justificada e implementando los mecanismos necesarios.&lt;br /&gt;
&lt;br /&gt;
Forma típica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public class Blah {&lt;br /&gt;
    private static final Logger log = Logger.getLogger(Blah.class);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Log4JMDC ==&lt;br /&gt;
MDC es una característica de [[Log4J]] que permite agregar información adicional (de forma &amp;quot;clave=valor&amp;quot;), que luego puede ser referenciada en el patrón de log. Aquí entonces podemos almacenar datos generales (como ser, el nombre de usuario) y mostrarlos en todos los logs que se generen. &lt;br /&gt;
&lt;br /&gt;
En el patrón de log, se pueden hacer referencia a las variables del MDC usando: &lt;br /&gt;
 %X{clave}&lt;br /&gt;
&lt;br /&gt;
Los datos del MDC se guardan en el thread en ejecución. Un uso común es crear un Filter web, y allí guardar el nombre de usuario logueado en el entorno MDC, para que luego pueda loguearse. &lt;br /&gt;
&lt;br /&gt;
=== Filter web con MDC ===&lt;br /&gt;
El siguiente es un filter web común que guarda la variable &amp;quot;username&amp;quot; en el MDC, para luego referenciarla en patrón de log4j.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * To change this template, choose Tools | Templates&lt;br /&gt;
 * and open the template in the editor.&lt;br /&gt;
 */&lt;br /&gt;
package com.dosideas.mdc.filter;&lt;br /&gt;
&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import javax.servlet.*;&lt;br /&gt;
import org.apache.log4j.MDC;&lt;br /&gt;
import org.springframework.security.core.Authentication;&lt;br /&gt;
import org.springframework.security.core.context.SecurityContextHolder;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Adds MDC information for Log4j. In particular, it adds the username (if&lt;br /&gt;
 * available) to MDC.&lt;br /&gt;
 */&lt;br /&gt;
public class Log4jMDCFilter implements Filter {&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {&lt;br /&gt;
&lt;br /&gt;
        String username = obtenerNombreDeUsuarioLogueado();&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            MDC.put(&amp;quot;username&amp;quot;, username);&lt;br /&gt;
            chain.doFilter(request, response);&lt;br /&gt;
        } finally {&lt;br /&gt;
            MDC.remove(&amp;quot;username&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void init(FilterConfig filterConfig) throws ServletException { }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void destroy() { }&lt;br /&gt;
&lt;br /&gt;
    private String obtenerNombreDeUsuarioLogueado() { .... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego, en el archivo log4j.xml podemos hacer uso de la variable username (noten el valor del atributo &amp;quot;ConversionPattern&amp;quot;): &lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM &amp;quot;log4j.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;log4j:configuration xmlns:log4j=&amp;quot;http://jakarta.apache.org/log4j/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;appender name=&amp;quot;console&amp;quot; class=&amp;quot;org.apache.log4j.ConsoleAppender&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;Target&amp;quot; value=&amp;quot;System.out&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;layout class=&amp;quot;org.apache.log4j.PatternLayout&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;param name=&amp;quot;ConversionPattern&amp;quot; value=&amp;quot;%-5p %d{ISO8601} [%X{username}] %c - %m%n&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/layout&amp;gt;&lt;br /&gt;
    &amp;lt;/appender&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;root&amp;gt;&lt;br /&gt;
        &amp;lt;priority value =&amp;quot;debug&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;appender-ref ref=&amp;quot;console&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/log4j:configuration&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modificar log4j en ejecución ==&lt;br /&gt;
Utilizando un listener de spring se puede configurar la ruta del archivo log4j.properties (fuera del empaquetado) y el tiempo en que se vuelve a leer el mismo, lo cual nos permite modificar sus valores en ejecucion sin necesidad de redeployar la aplicacion. &lt;br /&gt;
&lt;br /&gt;
Para esto se configura dentro del web.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;listener&amp;gt;&lt;br /&gt;
  &amp;lt;listener-class&amp;gt;org.springframework.web.util.Log4jConfigListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;
&amp;lt;/listener&amp;gt;&lt;br /&gt;
&amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;log4jConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;file:/path/log4j.properties&amp;lt;/param-value&amp;gt;&lt;br /&gt;
&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;log4jRefreshInterval&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;5000&amp;lt;/param-value&amp;gt;&lt;br /&gt;
&amp;lt;/context-param&amp;gt;   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un error con el que nos podemos topar al momento de agregar esta configuración e intentar desplegar en Weblogic es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;Cannot set web app root system property when WAR file is not expanded&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ante este error, la solución es agregar en el weblogic.xml dentro del tag &amp;lt;weblogic-web-app&amp;gt; el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;container-descriptor&amp;gt;&lt;br /&gt;
        &amp;lt;show-archived-real-path-enabled&amp;gt;true&amp;lt;/show-archived-real-path-enabled&amp;gt;&lt;br /&gt;
&amp;lt;/container-descriptor&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configurar Log4j con Spring ==&lt;br /&gt;
Para configurar Log4j con Spring se debe agregar el siguiente bean a la aplicación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
 &amp;lt;bean id=&amp;quot;log4jInitializer&amp;quot;  class=&amp;quot;org.springframework.beans.factory.config.MethodInvokingFactoryBean&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;staticMethod&amp;quot;  value=&amp;quot;org.springframework.util.Log4jConfigurer.initLogging&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;arguments&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;list&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;file:/path/log4j.properties&amp;lt;/value&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;1000&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
 &amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el bean se esta indicando la ruta desde la cual se va a tomar el log4j.properties y el intervalo de refresco.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [http://logging.apache.org/log4j Web oficial de Log4J]&lt;br /&gt;
* [http://logging.apache.org/log4j/docs/api/org/apache/log4j/spi/LoggingEvent.html Javadoc del LogginEvent]&lt;br /&gt;
* [http://www.slideshare.net/Emmerson_Miranda/log4j-1215-short-manual Introducción a Log4j]&lt;br /&gt;
* [http://books.google.com.ar/books?id=vHvY008Zq-YC&amp;amp;pg=PA158&amp;amp;lpg=PA158&amp;amp;dq=weblogic+same+class+loader+log4j&amp;amp;source=bl&amp;amp;ots=yh8Z3e1X7C&amp;amp;sig=x81fCioIEn5nGAZNRg8kLNcOk0Y&amp;amp;hl=es&amp;amp;ei=x267Sum5HprKtgfD1NXEDQ&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=7#v=onepage&amp;amp;q=weblogic%20same%20class%20loader%20log4j&amp;amp;f=false Pro Apache Log4j]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Log4J&amp;diff=6498</id>
		<title>Log4J</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Log4J&amp;diff=6498"/>
				<updated>2012-02-14T15:46:58Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Log4J es una librería para resolver el log de aplicaciones [[Java]].&lt;br /&gt;
&lt;br /&gt;
==Los Appender==&lt;br /&gt;
Log4J utiliza &amp;quot;appenders&amp;quot; para guardar el log generado por las aplicaciones. Un appender es el encargado de procesar un mensaje de log enviado por la aplicación. Usualmente se encarga de almacenarlo en algún medio persistente, como ser un archivo. &lt;br /&gt;
&lt;br /&gt;
Existen distintos appenders para guardar logs en archivos, base de datos o colas de mensajeria. &lt;br /&gt;
&lt;br /&gt;
===JMSAppnder===&lt;br /&gt;
&lt;br /&gt;
Log4J cuenta con un Appender especial que redirecciona los eventos de log a un Topic [[JMS]].&lt;br /&gt;
&lt;br /&gt;
El appender a utilizar es ''org.apache.log4j.net.JMSAppender'', el cual se encarga de enviar los eventos de log a un Topic asociado. Un topic es parecido a una cola, pero con la diferencia que los mensajes se distribuyen a todos los suscriptores de la misma. Si no hay suscriptores, el mensaje se pierde.&lt;br /&gt;
&lt;br /&gt;
El JMSAppnder es muy útil en un ambiente en cluster, para centralizar la información de los log en un único lugar.&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo de uso ====&lt;br /&gt;
&lt;br /&gt;
En la práctica, utilizar log4j con este appender es igual que en cualquier otro caso. En el archivo de configuración ''log4j.properties'' es necesario agregar el appender en cuestión.&lt;br /&gt;
&lt;br /&gt;
 log4j.logger.com.zim=DEBUG, jms&lt;br /&gt;
 log4j.appender.jms=org.apache.log4j.net.JMSAppender&lt;br /&gt;
 log4j.appender.jms.InitialContextFactoryName=weblogic.jndi.WLInitialContextFactory&lt;br /&gt;
 log4j.appender.jms.ProviderURL=t3://miApplicationServer:7001&lt;br /&gt;
 log4j.appender.jms.TopicConnectionFactoryBindingName=JmsZimCF&lt;br /&gt;
 log4j.appender.jms.TopicBindingName=ZimTopic&lt;br /&gt;
 log4j.appender.jms.locationInfo=true&lt;br /&gt;
&lt;br /&gt;
En el ejemplo, utilizamos el Connection Factory ''JmsZmiCF'' para conectarnos al topic ''ZimTopic'' (ambos teniendo que estar configurados en algún [[Servidor de Aplicaciones]]).&lt;br /&gt;
&lt;br /&gt;
Con esta configuración todos los logs de las clases que pertenezcan al paquete &amp;quot;com.zim&amp;quot; se enviaran como mensajes al topic. Al Topic se envian objetos de tipo ''LoggingEvent'', clase que contiene la información de un evento de log.&lt;br /&gt;
&lt;br /&gt;
Luego, podrá haber distintos suscriptores que tomen las acciones necesarias sobre el mensaje. Por ejemplo, podriamos tener suscriptores que guarden el log en una base de datos, u otros que envien un mail o sms.&lt;br /&gt;
&lt;br /&gt;
====Sobre el locationInfo====&lt;br /&gt;
&lt;br /&gt;
Por default, el atributo locationInfo está en &amp;quot;false&amp;quot;. Esto hace que NO se envien los datos para el objeto ''LocationInfo'' de ''LoggingEvent''. Al setearlo en true, el objeto ''LocationInfo'' contendrá la información sobre la clase, método y número de línea en donde ocurrió el error.&lt;br /&gt;
&lt;br /&gt;
====Procesando el mensaje====&lt;br /&gt;
&lt;br /&gt;
Luego, queda tan solo decidir qué hacer con el mensaje. Usualmente, será un [[Message Driven Bean]] que procese de alguna manera el mensaje que envia Log4J.&lt;br /&gt;
&lt;br /&gt;
¿Y qué envia exactamente? Log4J enviará un ''ObjectMessage'' de JMS, que contiene una instancia de ''LoggingEvent'', la cual contiene la información relativa al log que generó la aplicación.&lt;br /&gt;
&lt;br /&gt;
===SMTPAppender===&lt;br /&gt;
&lt;br /&gt;
Es un Appender muy útil para la generación de alarmas vía mail. &lt;br /&gt;
&lt;br /&gt;
NOTA 1: Por estar pensado para casos de error (o tal vez por bug) sólo se envía el mail cuando el nivel de log es ERROR o superior. &lt;br /&gt;
&lt;br /&gt;
NOTA 2: Utilizar la versión de log4j 1.2.16 o superior (en las anteriores hay algún inconveniente sobre todo si se utiliza smtp.gmail.com).&lt;br /&gt;
&lt;br /&gt;
==== Ejemplo de uso ====&lt;br /&gt;
&lt;br /&gt;
Configuración en ''log4j.properties'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
# Acordate!!! Nivel ERROR o superior&lt;br /&gt;
&lt;br /&gt;
log4j.logger.com.demo.smtpAppender.MyService=ERROR, mailAppender&lt;br /&gt;
&lt;br /&gt;
# SMTP appender para alarmas via mail&lt;br /&gt;
&lt;br /&gt;
log4j.appender.mailAppender=org.apache.log4j.net.SMTPAppender&lt;br /&gt;
log4j.appender.mailAppender.Threshold=WARN&lt;br /&gt;
log4j.appender.mailAppender.BufferSize=10&lt;br /&gt;
log4j.appender.mailAppender.To=&amp;lt;mails_destino_separados_por_coma&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.From=&amp;lt;mail_from&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPHost=&amp;lt;smtp_host&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPPort=&amp;lt;puerto&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPUsername=&amp;lt;username&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPPassword=&amp;lt;password&amp;gt;&lt;br /&gt;
log4j.appender.mailAppender.SMTPProtocol=smtps&lt;br /&gt;
log4j.appender.mailAppender.Subject=Alarma generada con Log4J&lt;br /&gt;
log4j.appender.mailAppender.layout=org.apache.log4j.PatternLayout&lt;br /&gt;
log4j.appender.mailAppender.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esta configuración los logs de nivel error o superior de la clase MyService enviarán un mail con la información que se loguee.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Log4j en J2EE, en servidores WebLogic==&lt;br /&gt;
&lt;br /&gt;
Si queres compartir los mismos componentes log4j en un módulo EJB y Web, y el EJB se usa localmente, en el ear tienen que estar el EJB y el Web. El log4-*.jar en /APP-INF/lib, y log4.properties en /APP-INF/classes. /APP-INF/ en la raíz del ear. &lt;br /&gt;
&lt;br /&gt;
Y dentro del build-impl.xml del ear, los sgtes. pasos para la tarea que crea el META-INF:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;copy todir=&amp;quot;${build.dir}/APP-INF/lib&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fileset file=&amp;quot;${log4j.jar}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/copy&amp;gt;&lt;br /&gt;
&amp;lt;copy todir=&amp;quot;${build.dir}/APP-INF/classes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fileset file=&amp;quot;${log4j.properties}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/copy&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Log4J en Debug==&lt;br /&gt;
&lt;br /&gt;
Se puede usar el argumento '''-Dlog4j.debug''' como parametro para la JVM y muestra algunas cosas de log4J por consola, como por ejemplo, el archivo desde donde está levantando las propiedades.&lt;br /&gt;
&lt;br /&gt;
==Obtención del Logger==&lt;br /&gt;
Existe una serie de variantes para definir y obtener el logger de una clase:&lt;br /&gt;
&lt;br /&gt;
===Los modificadores===&lt;br /&gt;
====private====&lt;br /&gt;
Por lo general queremos que el logger se reporte como la clase que se está ejecutando. Utilizando private nos aseguramos que una clase que herede tenga que declarar su propio Logger y no usará accidentalmente el de la superclase. Contrariamente, si queremos por granularidad que utilice el de la superclase, habrá que declararlo como protected.&lt;br /&gt;
&lt;br /&gt;
====final====&lt;br /&gt;
La referencia al logger es la misma durante todo el ciclo de vida de una clase (si se declara static) o de un objeto (si es atributo de instancia). Por lo tanto, declarándola final se expresa esto, se protege a una asignación errónea y se mejora la performance.&lt;br /&gt;
&lt;br /&gt;
====static====&lt;br /&gt;
La creación del Logger está administrada por una fábrica a la que le pedimos las instancias. Es responsabilidad de la fábrica darnos la instancia correcta. En este caso, la motivación de utilizar static no es la de tener una sola copia. La motivación es que los logger no deben serializarse, deberían ser transient. Siendo static es una variable de la clase y no un atributo de la instancia, por lo que no será serializado. La razón de no marcarlo como transient (que sería conceptualmente más acertado) es que se debería implementar un mecanismo para que cuando la instancia es des-serializada, vuelva a obtener una copia del logger.&lt;br /&gt;
&lt;br /&gt;
====transient====&lt;br /&gt;
Los logger no deben ser serializados, por eso deberían ser marcados como transient. Es más fácil marcarlos como static ya que de esta forma no es necesario volver a obtenerlos cuando la clase es des-serializada. Si la clase no es serializable, no es necesario.&lt;br /&gt;
&lt;br /&gt;
===Clave para la obtención del logger===&lt;br /&gt;
El logger se le pide a la fábrica a través de una clave. Esta clave es de tipo String. El método está sobrecargado para recibir también un objeto de tipo class que luego la fábrica convertirá a String.&lt;br /&gt;
&lt;br /&gt;
====String====&lt;br /&gt;
 private static final Logger log = Logger.getLogger(&amp;quot;com.foo.bar.Blah&amp;quot;);&lt;br /&gt;
Utilizando un String se obtiene un logger independientemente de la clase donde se esté. Si lo que se busca el logger para la clase, esta es la forma más riesgosa ya que no está verificada por el compilador.&lt;br /&gt;
&lt;br /&gt;
====Objeto class====&lt;br /&gt;
 private static final Logger log = Logger.getLogger(Blah.class);&lt;br /&gt;
Utilizando un objeto de tipo Class permite que el compilador verifique el nombre de la clase. También se actualiza si se utiliza alguna herramienta o IDE para cambiar el nomre de la clase.&lt;br /&gt;
&lt;br /&gt;
====método getClass()====&lt;br /&gt;
 private transient Logger log = Logger.getLogger(getClass());&lt;br /&gt;
En este caso la clave se genera en tiempo de ejecución pidiendo al objeto su clase a través del método getClass(). Esto tiene la ventaja de que siempre tendrá el nombre apropiado de la clase. Tiene la restricción de que sólo se podrá utilizar si el logger es un atributo de  instancia (no static).&lt;br /&gt;
&lt;br /&gt;
Otra particularidad es que el método getClass() invocado en una clase padre responderá desde la clase hija.&lt;br /&gt;
&lt;br /&gt;
En caso de que el objeto sea serializable habrá que agregar el modificador transient para que no se serialice el logger.&lt;br /&gt;
&lt;br /&gt;
===Conclusión===&lt;br /&gt;
La forma práctica de no cometer errores es la de utilizar la combinación más restrictiva y cambiarla sólo si se tiene alguna razón claramente justificada e implementando los mecanismos necesarios.&lt;br /&gt;
&lt;br /&gt;
Forma típica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public class Blah {&lt;br /&gt;
    private static final Logger log = Logger.getLogger(Blah.class);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Log4JMDC ==&lt;br /&gt;
MDC es una característica de [[Log4J]] que permite agregar información adicional (de forma &amp;quot;clave=valor&amp;quot;), que luego puede ser referenciada en el patrón de log. Aquí entonces podemos almacenar datos generales (como ser, el nombre de usuario) y mostrarlos en todos los logs que se generen. &lt;br /&gt;
&lt;br /&gt;
En el patrón de log, se pueden hacer referencia a las variables del MDC usando: &lt;br /&gt;
 %X{clave}&lt;br /&gt;
&lt;br /&gt;
Los datos del MDC se guardan en el thread en ejecución. Un uso común es crear un Filter web, y allí guardar el nombre de usuario logueado en el entorno MDC, para que luego pueda loguearse. &lt;br /&gt;
&lt;br /&gt;
=== Filter web con MDC ===&lt;br /&gt;
El siguiente es un filter web común que guarda la variable &amp;quot;username&amp;quot; en el MDC, para luego referenciarla en patrón de log4j.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * To change this template, choose Tools | Templates&lt;br /&gt;
 * and open the template in the editor.&lt;br /&gt;
 */&lt;br /&gt;
package com.dosideas.mdc.filter;&lt;br /&gt;
&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import javax.servlet.*;&lt;br /&gt;
import org.apache.log4j.MDC;&lt;br /&gt;
import org.springframework.security.core.Authentication;&lt;br /&gt;
import org.springframework.security.core.context.SecurityContextHolder;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Adds MDC information for Log4j. In particular, it adds the username (if&lt;br /&gt;
 * available) to MDC.&lt;br /&gt;
 */&lt;br /&gt;
public class Log4jMDCFilter implements Filter {&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {&lt;br /&gt;
&lt;br /&gt;
        String username = obtenerNombreDeUsuarioLogueado();&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            MDC.put(&amp;quot;username&amp;quot;, username);&lt;br /&gt;
            chain.doFilter(request, response);&lt;br /&gt;
        } finally {&lt;br /&gt;
            MDC.remove(&amp;quot;username&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void init(FilterConfig filterConfig) throws ServletException { }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void destroy() { }&lt;br /&gt;
&lt;br /&gt;
    private String obtenerNombreDeUsuarioLogueado() { .... }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luego, en el archivo log4j.xml podemos hacer uso de la variable username (noten el valor del atributo &amp;quot;ConversionPattern&amp;quot;): &lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM &amp;quot;log4j.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;log4j:configuration xmlns:log4j=&amp;quot;http://jakarta.apache.org/log4j/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;appender name=&amp;quot;console&amp;quot; class=&amp;quot;org.apache.log4j.ConsoleAppender&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;param name=&amp;quot;Target&amp;quot; value=&amp;quot;System.out&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;layout class=&amp;quot;org.apache.log4j.PatternLayout&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;param name=&amp;quot;ConversionPattern&amp;quot; value=&amp;quot;%-5p %d{ISO8601} [%X{username}] %c - %m%n&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/layout&amp;gt;&lt;br /&gt;
    &amp;lt;/appender&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;root&amp;gt;&lt;br /&gt;
        &amp;lt;priority value =&amp;quot;debug&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;appender-ref ref=&amp;quot;console&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/log4j:configuration&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modificar log4j en ejecución ==&lt;br /&gt;
Utilizando un listener de spring se puede configurar la ruta del archivo log4j.properties (fuera del empaquetado) y el tiempo en que se vuelve a leer el mismo, lo cual nos permite modificar sus valores en ejecucion sin necesidad de redeployar la aplicacion. &lt;br /&gt;
&lt;br /&gt;
Para esto se configura dentro del web.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;listener&amp;gt;&lt;br /&gt;
  &amp;lt;listener-class&amp;gt;org.springframework.web.util.Log4jConfigListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;
&amp;lt;/listener&amp;gt;&lt;br /&gt;
&amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;log4jConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;file:/path/log4j.properties&amp;lt;/param-value&amp;gt;&lt;br /&gt;
&amp;lt;/context-param&amp;gt;&lt;br /&gt;
&amp;lt;context-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;log4jRefreshInterval&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;5000&amp;lt;/param-value&amp;gt;&lt;br /&gt;
&amp;lt;/context-param&amp;gt;   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un error con el que nos podemos topar al momento de agregar esta configuración e intentar desplegar en Weblogic es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;Cannot set web app root system property when WAR file is not expanded&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ante este error, la solución es agregar en el weblogic.xml dentro del tag &amp;lt;weblogic-web-app&amp;gt; el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;container-descriptor&amp;gt;&lt;br /&gt;
        &amp;lt;show-archived-real-path-enabled&amp;gt;true&amp;lt;/show-archived-real-path-enabled&amp;gt;&lt;br /&gt;
&amp;lt;/container-descriptor&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configurar Log4j con Spring ==&lt;br /&gt;
Para configurar Log4j con Spring se debe agregar el siguiente bean a la aplicación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
 &amp;lt;bean id=&amp;quot;log4jInitializer&amp;quot;  class=&amp;quot;org.springframework.beans.factory.config.MethodInvokingFactoryBean&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;staticMethod&amp;quot;  value=&amp;quot;org.springframework.util.Log4jConfigurer.initLogging&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;property name=&amp;quot;arguments&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;list&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;file:/path/log4j.properties&amp;lt;/value&amp;gt;&lt;br /&gt;
       &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/property&amp;gt;&lt;br /&gt;
 &amp;lt;/bean&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [http://logging.apache.org/log4j Web oficial de Log4J]&lt;br /&gt;
* [http://logging.apache.org/log4j/docs/api/org/apache/log4j/spi/LoggingEvent.html Javadoc del LogginEvent]&lt;br /&gt;
* [http://www.slideshare.net/Emmerson_Miranda/log4j-1215-short-manual Introducción a Log4j]&lt;br /&gt;
* [http://books.google.com.ar/books?id=vHvY008Zq-YC&amp;amp;pg=PA158&amp;amp;lpg=PA158&amp;amp;dq=weblogic+same+class+loader+log4j&amp;amp;source=bl&amp;amp;ots=yh8Z3e1X7C&amp;amp;sig=x81fCioIEn5nGAZNRg8kLNcOk0Y&amp;amp;hl=es&amp;amp;ei=x267Sum5HprKtgfD1NXEDQ&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=7#v=onepage&amp;amp;q=weblogic%20same%20class%20loader%20log4j&amp;amp;f=false Pro Apache Log4j]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Jawr&amp;diff=6487</id>
		<title>Jawr</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Jawr&amp;diff=6487"/>
				<updated>2012-02-08T20:32:49Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Empaquetado y compresión de JS y CSS&lt;br /&gt;
&lt;br /&gt;
Jawr es una solución de empaquetado para Javascript y CSS, que permite un rápido desarrollo de los recursos en módulos separados.&lt;br /&gt;
Mediante el uso de una biblioteca de etiquetas, Jawr permite el uso de las mismas páginas, sin cambios para el desarrollo y la producción. Jawr también minimiza y comprime los archivos, lo que resulta en una reducción de los tiempos de carga.&lt;br /&gt;
Jawr se configura mediante un archivo de properties.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la esencia de jawr&lt;br /&gt;
[[Archivo:jawr.png]]&lt;br /&gt;
&lt;br /&gt;
ejemplo de jawr.properties&lt;br /&gt;
 # Common properties&lt;br /&gt;
 jawr.debug.on=false&lt;br /&gt;
 jawr.gzip.on=false&lt;br /&gt;
 jawr.gzip.ie6.on=false&lt;br /&gt;
 jawr.charset.name=UTF-8 &lt;br /&gt;
 &lt;br /&gt;
 # Javascript properties and mappings&lt;br /&gt;
 jawr.js.bundle.basedir=/js &lt;br /&gt;
 &lt;br /&gt;
 # All files within /js/lib will be together in a bundle. &lt;br /&gt;
 # The remaining scripts will be served sepparately. &lt;br /&gt;
 jawr.js.bundle.jquery.id=/jquery.js&lt;br /&gt;
 jawr.js.bundle.jquery.mappings=/js/jquery/**&lt;br /&gt;
 &lt;br /&gt;
 jawr.js.bundle.jquery-json.id=/jquery-json.js&lt;br /&gt;
 jawr.js.bundle.jquery-json.mappings=/js/jquery-json/** &lt;br /&gt;
 &lt;br /&gt;
 # The /bundles/lib.js bundle is global &lt;br /&gt;
 # (always imported before other scripts to pages using the taglib)&lt;br /&gt;
 jawr.js.bundle.lib.global=true &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # CSS properties and mappings&lt;br /&gt;
 jawr.css.bundle.basedir=/css&lt;br /&gt;
 &lt;br /&gt;
 # CSS files will be all bundled together automatically&lt;br /&gt;
 jawr.css.factory.use.singlebundle=true&lt;br /&gt;
 jawr.css.factory.singlebundle.bundlename=/default.css&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
web.xml&lt;br /&gt;
        &amp;lt;servlet&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;JavascriptServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-class&amp;gt;net.jawr.web.servlet.JawrServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;!-- Location in classpath of the config file --&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;param-name&amp;gt;configLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 			&amp;lt;param-value&amp;gt;/jawr.properties&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;servlet&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;CSSServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-class&amp;gt;net.jawr.web.servlet.JawrServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;!-- Location in classpath of the config file --&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;param-name&amp;gt;configLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 			&amp;lt;param-value&amp;gt;/jawr.properties&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;param-name&amp;gt;type&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 			&amp;lt;param-value&amp;gt;css&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;JavascriptServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;url-pattern&amp;gt;*.js&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;CSSServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;url-pattern&amp;gt;*.css&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
	&lt;br /&gt;
ejemplo de un jsp&lt;br /&gt;
 &amp;lt;%@ taglib uri=&amp;quot;http://jawr.net/tags&amp;quot; prefix=&amp;quot;jwr&amp;quot;%&amp;gt;&lt;br /&gt;
 &amp;lt;%@ page contentType=&amp;quot;text/html;charset=UTF-8&amp;quot;%&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
       &amp;lt;jwr:script src=&amp;quot;/jquery.js&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;jwr:script src=&amp;quot;/jquery-json.js&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;jwr:style src=&amp;quot;/default.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
  	&amp;lt;h 2&amp;gt;Hello World!&amp;lt;/h 2&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Jawr&amp;diff=6486</id>
		<title>Jawr</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Jawr&amp;diff=6486"/>
				<updated>2012-02-08T20:31:46Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Empaquetado y compresión de JS y CSS&lt;br /&gt;
&lt;br /&gt;
Jawr es una solución de empaquetado para Javascript y CSS, que permite un rápido desarrollo de los recursos en módulos separados.&lt;br /&gt;
Mediante el uso de una biblioteca de etiquetas, Jawr permite el uso de las mismas páginas, sin cambios para el desarrollo y la producción. Jawr también minimiza y comprime los archivos, lo que resulta en una reducción de los tiempos de carga.&lt;br /&gt;
Jawr se configura mediante un archivo de properties.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:jawr.png]]&lt;br /&gt;
&lt;br /&gt;
ejemplo de jawr.properties&lt;br /&gt;
 # Common properties&lt;br /&gt;
 jawr.debug.on=false&lt;br /&gt;
 jawr.gzip.on=false&lt;br /&gt;
 jawr.gzip.ie6.on=false&lt;br /&gt;
 jawr.charset.name=UTF-8 &lt;br /&gt;
 &lt;br /&gt;
 # Javascript properties and mappings&lt;br /&gt;
 jawr.js.bundle.basedir=/js &lt;br /&gt;
 &lt;br /&gt;
 # All files within /js/lib will be together in a bundle. &lt;br /&gt;
 # The remaining scripts will be served sepparately. &lt;br /&gt;
 jawr.js.bundle.jquery.id=/jquery.js&lt;br /&gt;
 jawr.js.bundle.jquery.mappings=/js/jquery/**&lt;br /&gt;
 &lt;br /&gt;
 jawr.js.bundle.jquery-json.id=/jquery-json.js&lt;br /&gt;
 jawr.js.bundle.jquery-json.mappings=/js/jquery-json/** &lt;br /&gt;
 &lt;br /&gt;
 # The /bundles/lib.js bundle is global &lt;br /&gt;
 # (always imported before other scripts to pages using the taglib)&lt;br /&gt;
 jawr.js.bundle.lib.global=true &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # CSS properties and mappings&lt;br /&gt;
 jawr.css.bundle.basedir=/css&lt;br /&gt;
 &lt;br /&gt;
 # CSS files will be all bundled together automatically&lt;br /&gt;
 jawr.css.factory.use.singlebundle=true&lt;br /&gt;
 jawr.css.factory.singlebundle.bundlename=/default.css&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
web.xml&lt;br /&gt;
        &amp;lt;servlet&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;JavascriptServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-class&amp;gt;net.jawr.web.servlet.JawrServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;!-- Location in classpath of the config file --&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;param-name&amp;gt;configLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 			&amp;lt;param-value&amp;gt;/jawr.properties&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;servlet&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;CSSServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-class&amp;gt;net.jawr.web.servlet.JawrServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;!-- Location in classpath of the config file --&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;param-name&amp;gt;configLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 			&amp;lt;param-value&amp;gt;/jawr.properties&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;init-param&amp;gt;&lt;br /&gt;
 			&amp;lt;param-name&amp;gt;type&amp;lt;/param-name&amp;gt;&lt;br /&gt;
 			&amp;lt;param-value&amp;gt;css&amp;lt;/param-value&amp;gt;&lt;br /&gt;
 		&amp;lt;/init-param&amp;gt;&lt;br /&gt;
 		&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;JavascriptServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;url-pattern&amp;gt;*.js&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 	&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
 		&amp;lt;servlet-name&amp;gt;CSSServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
 		&amp;lt;url-pattern&amp;gt;*.css&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
 	&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
	&lt;br /&gt;
ejemplo de un jsp&lt;br /&gt;
 &amp;lt;%@ taglib uri=&amp;quot;http://jawr.net/tags&amp;quot; prefix=&amp;quot;jwr&amp;quot;%&amp;gt;&lt;br /&gt;
 &amp;lt;%@ page contentType=&amp;quot;text/html;charset=UTF-8&amp;quot;%&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
       &amp;lt;jwr:script src=&amp;quot;/jquery.js&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;jwr:script src=&amp;quot;/jquery-json.js&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;jwr:style src=&amp;quot;/default.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
  	&amp;lt;h 2&amp;gt;Hello World!&amp;lt;/h 2&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:Jawr.png&amp;diff=6485</id>
		<title>Archivo:Jawr.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:Jawr.png&amp;diff=6485"/>
				<updated>2012-02-08T20:23:48Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: subida una nueva versión de «Archivo:Jawr.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;configuracion de jawr&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:Jawr.png&amp;diff=6484</id>
		<title>Archivo:Jawr.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:Jawr.png&amp;diff=6484"/>
				<updated>2012-02-08T20:08:46Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: configuracion de jawr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;configuracion de jawr&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Jawr&amp;diff=6483</id>
		<title>Jawr</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Jawr&amp;diff=6483"/>
				<updated>2012-02-08T20:07:30Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: Página creada con 'JAWR: Empaquetado y compresión de JS y CSS  Jawr es una solución de empaquetado para Javascript y CSS, que permite un rápido desarrollo de los recursos en módulos separados.…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JAWR: Empaquetado y compresión de JS y CSS&lt;br /&gt;
&lt;br /&gt;
Jawr es una solución de empaquetado para Javascript y CSS, que permite un rápido desarrollo de los recursos en módulos separados.&lt;br /&gt;
Mediante el uso de una biblioteca de etiquetas, Jawr permite el uso de las mismas páginas, sin cambios para el desarrollo y la producción. Jawr también minimiza y comprime los archivos, lo que resulta en una reducción de los tiempos de carga.&lt;br /&gt;
Jawr se configura mediante un archivo de properties.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:jawr.png]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Java&amp;diff=6482</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Java&amp;diff=6482"/>
				<updated>2012-02-08T20:06:13Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: /* Librerías */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Java es un lenguaje de programación, aunque también se suele hacer referencia con este nombre a toda una plataforma para el desarrollo de aplicaciones. Hay un buen [http://es.wikipedia.org/wiki/Java_%28Sun%29 resumen de Java en la wikipedia].&lt;br /&gt;
&lt;br /&gt;
Al desarrollar un sistema se suele basar en una [[Arquitectura De Software]] para crear los componentes.&lt;br /&gt;
&lt;br /&gt;
Java se caracteriza por una enorme cantidad de proyectos libres.&lt;br /&gt;
&lt;br /&gt;
== Algunas tecnologías Java ==&lt;br /&gt;
=== Frameworks de base===&lt;br /&gt;
* [[Spring Framework]]&lt;br /&gt;
* [[Terracotta]]&lt;br /&gt;
* [[EJB]]&lt;br /&gt;
* [[Restlet]]&lt;br /&gt;
&lt;br /&gt;
===Acceso a datos===&lt;br /&gt;
* [[Hibernate]]&lt;br /&gt;
* [[Apache Lucene]]&lt;br /&gt;
&lt;br /&gt;
===Frameworks de presentación===&lt;br /&gt;
* [[Struts]]&lt;br /&gt;
* [[JSF]]&lt;br /&gt;
* [[JSTL]]&lt;br /&gt;
* [[GWT]]&lt;br /&gt;
&lt;br /&gt;
===Librerías===&lt;br /&gt;
* [[Google Guava]]&lt;br /&gt;
* [[Jawr]]&lt;br /&gt;
&lt;br /&gt;
===Mensajeria===&lt;br /&gt;
* [[JMS]]&lt;br /&gt;
&lt;br /&gt;
===Web Services===&lt;br /&gt;
* [[Web Service]]&lt;br /&gt;
* [[Web Service Con Spring]]&lt;br /&gt;
&lt;br /&gt;
===Ejecuciones batch y programadas===&lt;br /&gt;
* [[Quartz]]&lt;br /&gt;
* [[Spring Batch]]&lt;br /&gt;
&lt;br /&gt;
===Cuestiones generales de Java===&lt;br /&gt;
* [[Fechas En Java]]&lt;br /&gt;
* [[Numeros En Java]]&lt;br /&gt;
* [[Encoding En Java]]&lt;br /&gt;
* [[Serializacion De Objetos En Java]]&lt;br /&gt;
* [[Log4J]]&lt;br /&gt;
* [[Cache De Objetos Java]]&lt;br /&gt;
* [[Exportacion Hacia Archivos]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Java&amp;diff=6481</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Java&amp;diff=6481"/>
				<updated>2012-02-08T20:05:53Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Java es un lenguaje de programación, aunque también se suele hacer referencia con este nombre a toda una plataforma para el desarrollo de aplicaciones. Hay un buen [http://es.wikipedia.org/wiki/Java_%28Sun%29 resumen de Java en la wikipedia].&lt;br /&gt;
&lt;br /&gt;
Al desarrollar un sistema se suele basar en una [[Arquitectura De Software]] para crear los componentes.&lt;br /&gt;
&lt;br /&gt;
Java se caracteriza por una enorme cantidad de proyectos libres.&lt;br /&gt;
&lt;br /&gt;
== Algunas tecnologías Java ==&lt;br /&gt;
=== Frameworks de base===&lt;br /&gt;
* [[Spring Framework]]&lt;br /&gt;
* [[Terracotta]]&lt;br /&gt;
* [[EJB]]&lt;br /&gt;
* [[Restlet]]&lt;br /&gt;
&lt;br /&gt;
===Acceso a datos===&lt;br /&gt;
* [[Hibernate]]&lt;br /&gt;
* [[Apache Lucene]]&lt;br /&gt;
&lt;br /&gt;
===Frameworks de presentación===&lt;br /&gt;
* [[Struts]]&lt;br /&gt;
* [[JSF]]&lt;br /&gt;
* [[JSTL]]&lt;br /&gt;
* [[GWT]]&lt;br /&gt;
&lt;br /&gt;
===Librerías===&lt;br /&gt;
* [[Google Guava]]&lt;br /&gt;
* [[jawr]]&lt;br /&gt;
&lt;br /&gt;
===Mensajeria===&lt;br /&gt;
* [[JMS]]&lt;br /&gt;
&lt;br /&gt;
===Web Services===&lt;br /&gt;
* [[Web Service]]&lt;br /&gt;
* [[Web Service Con Spring]]&lt;br /&gt;
&lt;br /&gt;
===Ejecuciones batch y programadas===&lt;br /&gt;
* [[Quartz]]&lt;br /&gt;
* [[Spring Batch]]&lt;br /&gt;
&lt;br /&gt;
===Cuestiones generales de Java===&lt;br /&gt;
* [[Fechas En Java]]&lt;br /&gt;
* [[Numeros En Java]]&lt;br /&gt;
* [[Encoding En Java]]&lt;br /&gt;
* [[Serializacion De Objetos En Java]]&lt;br /&gt;
* [[Log4J]]&lt;br /&gt;
* [[Cache De Objetos Java]]&lt;br /&gt;
* [[Exportacion Hacia Archivos]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6466</id>
		<title>Restlet</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6466"/>
				<updated>2011-12-30T11:01:56Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Restlet]]&lt;br /&gt;
&lt;br /&gt;
Restlet es un framework ligero que ayuda a desarrollar clientes y servicios REST en la plataforma Java creado por Jerome Louvel (Noelios Technologies). &lt;br /&gt;
&lt;br /&gt;
==Arquitectura==&lt;br /&gt;
&lt;br /&gt;
Soporta todos los conceptos del estilo de arquitectura Transferencia de Estado Representacional (REST) (Recursos, Representación, Conectores, Componentes, etc..).&lt;br /&gt;
&lt;br /&gt;
Restlet es capaz de soportar los principales estándares Web tales como HTTP, SMTP, XML, JSON, WADL y Atom. Están disponibles diversas extensiones para integrarse con Servlet, Spring, Jetty, Grizzly, Simple, JAXB, JiBX, Velocity o FreeMarker.&lt;br /&gt;
&lt;br /&gt;
==Primeros pasos==&lt;br /&gt;
Vamos a explicar como crear un recurso que diga &amp;quot;Hola Mundo&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
Creamos un recurso, el cual se va a publicar por medio del metodo GET.&lt;br /&gt;
 public class HolaMundoResource extends ServerResource {  &lt;br /&gt;
   &lt;br /&gt;
     @Get  &lt;br /&gt;
     public String mensaje() {  &lt;br /&gt;
         return &amp;quot;Hola Mundo&amp;quot;;  &lt;br /&gt;
     }  &lt;br /&gt;
   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
A continuación creamos un router que es el encarga de publicar nuestro servicio.&lt;br /&gt;
&lt;br /&gt;
 public class HolaMundoApplication extends Application {  &lt;br /&gt;
   &lt;br /&gt;
     /** &lt;br /&gt;
      * Creamos la ruta desde la cual se van a recibir todas las llamadas.&lt;br /&gt;
      */  &lt;br /&gt;
     @Override  &lt;br /&gt;
     public synchronized Restlet createInboundRoot() {  &lt;br /&gt;
        // Creamos el enrutador que rutea cada llamada a una nueva instancia de HolaMundoResource.&lt;br /&gt;
        Router router = new Router(getContext());  &lt;br /&gt;
 &lt;br /&gt;
        // Definimos una ruta.&lt;br /&gt;
        router.attach(&amp;quot;/hola&amp;quot;, HolaMundoResource.class);  &lt;br /&gt;
   &lt;br /&gt;
        return router;  &lt;br /&gt;
     }  &lt;br /&gt;
   &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
Configuramos el web.xml con nuestro servlet para que cuando le enviemos un pedido a una URL, nuestro servidor lo delegue al servlet de rest. &lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;  &lt;br /&gt;
    &amp;lt;web-app id=&amp;quot;WebApp_ID&amp;quot; version=&amp;quot;2.4&amp;quot;  &lt;br /&gt;
                xmlns=&amp;quot;http://java.sun.com/xml/ns/j2ee&amp;quot;  &lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;  &lt;br /&gt;
                xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/j2ee  &lt;br /&gt;
                     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&amp;quot;&amp;gt;  &lt;br /&gt;
       &amp;lt;display-name&amp;gt;demo restlet&amp;lt;/display-name&amp;gt;  &lt;br /&gt;
       &amp;lt;!-- Application class name --&amp;gt;  &lt;br /&gt;
       &amp;lt;context-param&amp;gt;  &lt;br /&gt;
          &amp;lt;param-name&amp;gt;org.restlet.application&amp;lt;/param-name&amp;gt;  &lt;br /&gt;
          &amp;lt;param-value&amp;gt;  &lt;br /&gt;
             com.demo.restlet.HolaMundoApplication  &lt;br /&gt;
          &amp;lt;/param-value&amp;gt;  &lt;br /&gt;
       &amp;lt;/context-param&amp;gt;  &lt;br /&gt;
      &lt;br /&gt;
       &amp;lt;!-- Restlet adapter --&amp;gt;  &lt;br /&gt;
       &amp;lt;servlet&amp;gt;  &lt;br /&gt;
          &amp;lt;servlet-name&amp;gt;RestletServlet&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;
          &amp;lt;servlet-class&amp;gt;  &lt;br /&gt;
             org.restlet.ext.servlet.ServerServlet  &lt;br /&gt;
          &amp;lt;/servlet-class&amp;gt;  &lt;br /&gt;
       &amp;lt;/servlet&amp;gt;  &lt;br /&gt;
      &lt;br /&gt;
       &amp;lt;!-- Catch all requests --&amp;gt;  &lt;br /&gt;
       &amp;lt;servlet-mapping&amp;gt;  &lt;br /&gt;
          &amp;lt;servlet-name&amp;gt;RestletServlet&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;
          &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;  &lt;br /&gt;
       &amp;lt;/servlet-mapping&amp;gt;  &lt;br /&gt;
    &amp;lt;/web-app&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Finalmente deployar el war (en mi caso demo-restlet.war) en el servidor de aplicación que más deseen, ingresar la url http://127.0.0.1/demo-restlet/hola y se visualiza nuestro Hola Mundo en el navegador.&lt;br /&gt;
&lt;br /&gt;
Referencias:&lt;br /&gt;
http://www.restlet.org/documentation/2.0/firstSteps&lt;br /&gt;
&lt;br /&gt;
==Más información==&lt;br /&gt;
[http://www.restlet.org/ Web oficial de Restlet]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6431</id>
		<title>Restlet</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6431"/>
				<updated>2011-11-14T12:17:23Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Restlet]]&lt;br /&gt;
&lt;br /&gt;
Restlet es un framework ligero que ayuda a desarrollar clientes y servicios REST en la plataforma Java creado por Jerome Louvel (Noelios Technologies). &lt;br /&gt;
&lt;br /&gt;
==Arquitectura==&lt;br /&gt;
&lt;br /&gt;
Soporta todos los conceptos del estilo de arquitectura Transferencia de Estado Representacional (REST) (Recursos, Representación, Conectores, Componentes, etc..).&lt;br /&gt;
&lt;br /&gt;
Restlet es capaz de soportar los principales estándares Web tales como HTTP, SMTP, XML, JSON, WADL y Atom. Están disponibles diversas extensiones para integrarse con Servlet, Spring, Jetty, Grizzly, Simple, JAXB, JiBX, Velocity o FreeMarker.&lt;br /&gt;
&lt;br /&gt;
==Más información==&lt;br /&gt;
[http://www.restlet.org/ Web oficial de Restlet]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6430</id>
		<title>Restlet</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Restlet&amp;diff=6430"/>
				<updated>2011-11-14T12:11:47Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: Página creada con '===Restlet=== Restlet es un framework ligero que ayuda a desarrollar clientes y servicios REST en la plataforma Java creado por Jerome Louvel (Noelios Technologies).   ==Arquite…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Restlet===&lt;br /&gt;
Restlet es un framework ligero que ayuda a desarrollar clientes y servicios REST en la plataforma Java creado por Jerome Louvel (Noelios Technologies). &lt;br /&gt;
&lt;br /&gt;
==Arquitectura==&lt;br /&gt;
&lt;br /&gt;
Soporta todos los conceptos del estilo de arquitectura Transferencia de Estado Representacional (REST) (Recursos, Representación, Conectores, Componentes, etc..).&lt;br /&gt;
&lt;br /&gt;
Restlet es capaz de soportar los principales estándares Web tales como HTTP, SMTP, XML, JSON, WADL y Atom. Están disponibles diversas extensiones para integrarse con Servlet, Spring, Jetty, Grizzly, Simple, JAXB, JiBX, Velocity o FreeMarker.&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Java&amp;diff=6429</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Java&amp;diff=6429"/>
				<updated>2011-11-14T12:09:55Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Java es un lenguaje de programación, aunque también se suele hacer referencia con este nombre a toda una plataforma para el desarrollo de aplicaciones. Hay un buen [http://es.wikipedia.org/wiki/Java_%28Sun%29 resumen de Java en la wikipedia].&lt;br /&gt;
&lt;br /&gt;
Al desarrollar un sistema se suele basar en una [[Arquitectura De Software]] para crear los componentes.&lt;br /&gt;
&lt;br /&gt;
Java se caracteriza por una enorme cantidad de proyectos libres.&lt;br /&gt;
&lt;br /&gt;
== Algunas tecnologías Java ==&lt;br /&gt;
=== Frameworks de base===&lt;br /&gt;
* [[Spring Framework]]&lt;br /&gt;
* [[Terracotta]]&lt;br /&gt;
* [[EJB]]&lt;br /&gt;
* [[Restlet]]&lt;br /&gt;
&lt;br /&gt;
===Acceso a datos===&lt;br /&gt;
* [[Hibernate]]&lt;br /&gt;
* [[Apache Lucene]]&lt;br /&gt;
&lt;br /&gt;
===Frameworks de presentación===&lt;br /&gt;
* [[Struts]]&lt;br /&gt;
* [[JSF]]&lt;br /&gt;
* [[JSTL]]&lt;br /&gt;
* [[GWT]]&lt;br /&gt;
&lt;br /&gt;
===Librerías===&lt;br /&gt;
* [[Google Guava]]&lt;br /&gt;
&lt;br /&gt;
===Mensajeria===&lt;br /&gt;
* [[JMS]]&lt;br /&gt;
&lt;br /&gt;
===Web Services===&lt;br /&gt;
* [[Web Service]]&lt;br /&gt;
* [[Web Service Con Spring]]&lt;br /&gt;
&lt;br /&gt;
===Ejecuciones batch y programadas===&lt;br /&gt;
* [[Quartz]]&lt;br /&gt;
* [[Spring Batch]]&lt;br /&gt;
&lt;br /&gt;
===Cuestiones generales de Java===&lt;br /&gt;
* [[Fechas En Java]]&lt;br /&gt;
* [[Numeros En Java]]&lt;br /&gt;
* [[Encoding En Java]]&lt;br /&gt;
* [[Serializacion De Objetos En Java]]&lt;br /&gt;
* [[Log4J]]&lt;br /&gt;
* [[Cache De Objetos Java]]&lt;br /&gt;
* [[Exportacion Hacia Archivos]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6079</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6079"/>
				<updated>2011-08-16T12:34:19Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: /* Asserts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es QUnit? ==&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript. &lt;br /&gt;
&lt;br /&gt;
== Escribir test unitarios con QUnit  ==&lt;br /&gt;
&lt;br /&gt;
Lo primero que se debe hacer es configurar el ambiente de test. &lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit se deben usar los siguientes archivos: qunit.js y qunit.css. El qunit.js es un script con la libreria, y el qunit.css es una hoja de estilo y es opcional. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.css&amp;quot; media=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Además de estos archivos, nuestras aplicaciones tienen que contar con una serie de etiquetas HTML donde se mostrarán los resultados de nuestros tests: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;QUnit-header&amp;quot;&amp;gt;QUnit Test Suite&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;QUnit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ol id=&amp;quot;QUnit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación se deja un ejemplo completo de un html donde se incluyen los archivos y las etiquetas html que necesita QUnit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Dos Ideas - QUnit&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://code.jquery.com/qunit/git/qunit.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/qunit/git/qunit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Your source files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeas.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Your tests files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeasTest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1 id=&amp;quot;qunit-header&amp;quot;&amp;gt;QUnit example&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ol id=&amp;quot;qunit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Any HTML you may require for your tests to work properly --&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-fixture&amp;quot;&amp;gt;test markup, will be hidden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser. &lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeasTest.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
&lt;br /&gt;
	module(&amp;quot;dosIdeasTest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	test('probando validarImporte()', function() { &lt;br /&gt;
		ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;11A12&amp;quot;),'El importe es 11A12'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;A1112&amp;quot;),'El importe es A1112');&lt;br /&gt;
		ok(!validarImporte(&amp;quot;1112A&amp;quot;),'El importe es 1112A');&lt;br /&gt;
	}) &lt;br /&gt;
	&lt;br /&gt;
	test('probando extraerSubCadena()', function() { &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'deas'); &lt;br /&gt;
	}) &lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; El archivo dosIdeas.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function validarImporte(importe) {&lt;br /&gt;
&lt;br /&gt;
        if (importe.length == 0) {&lt;br /&gt;
            return false;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
function extraerSubCadena(cadena, posicionInicial, longitud)&lt;br /&gt;
{&lt;br /&gt;
	return cadena.substr(posicionInicial, longitud);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El resultado de los test quedan de la siguiente manera: &lt;br /&gt;
&lt;br /&gt;
[[Image:DosIdeasQUnitResultado.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Asserts  ==&lt;br /&gt;
&lt;br /&gt;
Qunit nos provee de una serie de asserts para nuestros test. En el ejemplo anterior se hace mención de ok y equal. A continuación vamos a dar más detalle de los mismos y de nuevos.&lt;br /&gt;
&lt;br /&gt;
'''ok''':&lt;br /&gt;
Es para validar resultado booleanos (es el equivalente a assertTrue de JUnit). &lt;br /&gt;
&lt;br /&gt;
La sintaxis es la siguiente: ok(estado, mensaje).&lt;br /&gt;
&lt;br /&gt;
estado: es una expresión booleana a evaluar.&lt;br /&gt;
&lt;br /&gt;
mensaje: es el mensaje a mostrar cuando finaliza el assert.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''equal''':&lt;br /&gt;
Valida que el resultado obtenido es igual al esperado (es similiar al assertEqual de JUnit). &lt;br /&gt;
&lt;br /&gt;
La sintaxis es la siguiente: equal(actual, esperado, mensaje)&lt;br /&gt;
&lt;br /&gt;
actual: es el objeto a evaluar.&lt;br /&gt;
&lt;br /&gt;
esperado: es el resultado esperado.&lt;br /&gt;
&lt;br /&gt;
mensaje: es el mensaje a mostrar cuando finaliza el assert.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también  ==&lt;br /&gt;
[http://docs.jquery.com/Qunit Página de QUnit]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6078</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6078"/>
				<updated>2011-08-16T12:20:45Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: /* Asserts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es QUnit? ==&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript. &lt;br /&gt;
&lt;br /&gt;
== Escribir test unitarios con QUnit  ==&lt;br /&gt;
&lt;br /&gt;
Lo primero que se debe hacer es configurar el ambiente de test. &lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit se deben usar los siguientes archivos: qunit.js y qunit.css. El qunit.js es un script con la libreria, y el qunit.css es una hoja de estilo y es opcional. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.css&amp;quot; media=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Además de estos archivos, nuestras aplicaciones tienen que contar con una serie de etiquetas HTML donde se mostrarán los resultados de nuestros tests: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;QUnit-header&amp;quot;&amp;gt;QUnit Test Suite&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;QUnit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ol id=&amp;quot;QUnit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación se deja un ejemplo completo de un html donde se incluyen los archivos y las etiquetas html que necesita QUnit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Dos Ideas - QUnit&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://code.jquery.com/qunit/git/qunit.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/qunit/git/qunit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Your source files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeas.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Your tests files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeasTest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1 id=&amp;quot;qunit-header&amp;quot;&amp;gt;QUnit example&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ol id=&amp;quot;qunit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Any HTML you may require for your tests to work properly --&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-fixture&amp;quot;&amp;gt;test markup, will be hidden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser. &lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeasTest.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
&lt;br /&gt;
	module(&amp;quot;dosIdeasTest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	test('probando validarImporte()', function() { &lt;br /&gt;
		ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;11A12&amp;quot;),'El importe es 11A12'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;A1112&amp;quot;),'El importe es A1112');&lt;br /&gt;
		ok(!validarImporte(&amp;quot;1112A&amp;quot;),'El importe es 1112A');&lt;br /&gt;
	}) &lt;br /&gt;
	&lt;br /&gt;
	test('probando extraerSubCadena()', function() { &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'deas'); &lt;br /&gt;
	}) &lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; El archivo dosIdeas.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function validarImporte(importe) {&lt;br /&gt;
&lt;br /&gt;
        if (importe.length == 0) {&lt;br /&gt;
            return false;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
function extraerSubCadena(cadena, posicionInicial, longitud)&lt;br /&gt;
{&lt;br /&gt;
	return cadena.substr(posicionInicial, longitud);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El resultado de los test quedan de la siguiente manera: &lt;br /&gt;
&lt;br /&gt;
[[Image:DosIdeasQUnitResultado.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Asserts  ==&lt;br /&gt;
&lt;br /&gt;
Qunit nos provee de una serie de asserts para nuestros test. En el ejemplo anterior se hace mención de ok y equal. A continuación vamos a dar más detalle de los mismos y de nuevos.&lt;br /&gt;
&lt;br /&gt;
'''ok''':&lt;br /&gt;
Es para validar resultado booleanos (es el equivalente a assertTrue de JUnit). Tiene la siguiente estructura: ok(estado, mensaje) donde estado es una expresión booleana y mensaje es la salida del assert.&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también  ==&lt;br /&gt;
[http://docs.jquery.com/Qunit Página de QUnit]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6077</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6077"/>
				<updated>2011-08-16T12:08:02Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es QUnit? ==&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript. &lt;br /&gt;
&lt;br /&gt;
== Escribir test unitarios con QUnit  ==&lt;br /&gt;
&lt;br /&gt;
Lo primero que se debe hacer es configurar el ambiente de test. &lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit se deben usar los siguientes archivos: qunit.js y qunit.css. El qunit.js es un script con la libreria, y el qunit.css es una hoja de estilo y es opcional. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.css&amp;quot; media=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Además de estos archivos, nuestras aplicaciones tienen que contar con una serie de etiquetas HTML donde se mostrarán los resultados de nuestros tests: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;QUnit-header&amp;quot;&amp;gt;QUnit Test Suite&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;QUnit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ol id=&amp;quot;QUnit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación se deja un ejemplo completo de un html donde se incluyen los archivos y las etiquetas html que necesita QUnit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Dos Ideas - QUnit&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://code.jquery.com/qunit/git/qunit.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/qunit/git/qunit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Your source files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeas.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Your tests files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeasTest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1 id=&amp;quot;qunit-header&amp;quot;&amp;gt;QUnit example&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ol id=&amp;quot;qunit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Any HTML you may require for your tests to work properly --&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-fixture&amp;quot;&amp;gt;test markup, will be hidden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser. &lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeasTest.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
&lt;br /&gt;
	module(&amp;quot;dosIdeasTest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	test('probando validarImporte()', function() { &lt;br /&gt;
		ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;11A12&amp;quot;),'El importe es 11A12'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;A1112&amp;quot;),'El importe es A1112');&lt;br /&gt;
		ok(!validarImporte(&amp;quot;1112A&amp;quot;),'El importe es 1112A');&lt;br /&gt;
	}) &lt;br /&gt;
	&lt;br /&gt;
	test('probando extraerSubCadena()', function() { &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'deas'); &lt;br /&gt;
	}) &lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; El archivo dosIdeas.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function validarImporte(importe) {&lt;br /&gt;
&lt;br /&gt;
        if (importe.length == 0) {&lt;br /&gt;
            return false;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
function extraerSubCadena(cadena, posicionInicial, longitud)&lt;br /&gt;
{&lt;br /&gt;
	return cadena.substr(posicionInicial, longitud);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El resultado de los test quedan de la siguiente manera: &lt;br /&gt;
&lt;br /&gt;
[[Image:DosIdeasQUnitResultado.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Asserts  ==&lt;br /&gt;
&lt;br /&gt;
== Ver también  ==&lt;br /&gt;
[http://docs.jquery.com/Qunit Página de QUnit]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6076</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6076"/>
				<updated>2011-08-16T12:06:32Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es QUnit? ==&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript. &lt;br /&gt;
&lt;br /&gt;
== Escribir test unitarios con QUnit  ==&lt;br /&gt;
&lt;br /&gt;
Lo primero que se debe hacer es configurar el ambiente de test. &lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit se deben usar los siguientes archivos: qunit.js y qunit.css. El qunit.js es un script con la libreria, y el qunit.css es una hoja de estilo y es opcional. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.css&amp;quot; media=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Además de estos archivos, nuestras aplicaciones tienen que contar con una serie de etiquetas HTML donde se mostrarán los resultados de nuestros tests: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;QUnit-header&amp;quot;&amp;gt;QUnit Test Suite&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;QUnit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ol id=&amp;quot;QUnit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación se deja un ejemplo completo de un html donde se incluyen los archivos y las etiquetas html que necesita QUnit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Dos Ideas - QUnit&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://code.jquery.com/qunit/git/qunit.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/qunit/git/qunit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Your source files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeas.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Your tests files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeasTest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1 id=&amp;quot;qunit-header&amp;quot;&amp;gt;QUnit example&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ol id=&amp;quot;qunit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Any HTML you may require for your tests to work properly --&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-fixture&amp;quot;&amp;gt;test markup, will be hidden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser. &lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeasTest.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
&lt;br /&gt;
	module(&amp;quot;dosIdeasTest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	test('probando validarImporte()', function() { &lt;br /&gt;
		ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;11A12&amp;quot;),'El importe es 11A12'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;A1112&amp;quot;),'El importe es A1112');&lt;br /&gt;
		ok(!validarImporte(&amp;quot;1112A&amp;quot;),'El importe es 1112A');&lt;br /&gt;
	}) &lt;br /&gt;
	&lt;br /&gt;
	test('probando extraerSubCadena()', function() { &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'deas'); &lt;br /&gt;
	}) &lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; El archivo dosIdeas.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function validarImporte(importe) {&lt;br /&gt;
&lt;br /&gt;
        if (importe.length == 0) {&lt;br /&gt;
            return false;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
function extraerSubCadena(cadena, posicionInicial, longitud)&lt;br /&gt;
{&lt;br /&gt;
	return cadena.substr(posicionInicial, longitud);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El resultado de los test quedan de la siguiente manera: &lt;br /&gt;
&lt;br /&gt;
[[Image:DosIdeasQUnitResultado.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Ver también  ==&lt;br /&gt;
[http://docs.jquery.com/Qunit Página de QUnit]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6075</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6075"/>
				<updated>2011-08-16T11:49:35Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es QUnit? ==&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript. &lt;br /&gt;
&lt;br /&gt;
== Escribir test unitarios con QUnit  ==&lt;br /&gt;
&lt;br /&gt;
Lo primero que se debe hacer es configurar el ambiente de test. &lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit se deben usar los siguientes archivos: qunit.js y qunit.css. El qunit.js es un script con la libreria, y el qunit.css es una hoja de estilo y es opcional. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.css&amp;quot; media=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://github.com/jquery/QUnit/raw/master/QUnit/QUnit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Además de estos archivos, nuestras aplicaciones tienen que contar con una serie de etiquetas HTML donde se mostrarán los resultados de nuestros tests: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;QUnit-header&amp;quot;&amp;gt;QUnit Test Suite&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;QUnit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;QUnit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ol id=&amp;quot;QUnit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A continuación se deja un ejemplo completo de un html donde se incluyen los archivos y las etiquetas html que necesita QUnit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Dos Ideas - QUnit&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://code.jquery.com/qunit/git/qunit.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/qunit/git/qunit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Your source files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeas.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Your tests files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeasTest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1 id=&amp;quot;qunit-header&amp;quot;&amp;gt;QUnit example&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ol id=&amp;quot;qunit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Any HTML you may require for your tests to work properly --&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-fixture&amp;quot;&amp;gt;test markup, will be hidden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser. &lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeasTest.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
&lt;br /&gt;
	module(&amp;quot;dosIdeasTest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	test('probando validarImporte()', function() { &lt;br /&gt;
		ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;11A12&amp;quot;),'El importe es 11A12'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;A1112&amp;quot;),'El importe es A1112');&lt;br /&gt;
		ok(!validarImporte(&amp;quot;1112A&amp;quot;),'El importe es 1112A');&lt;br /&gt;
	}) &lt;br /&gt;
	&lt;br /&gt;
	test('probando extraerSubCadena()', function() { &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'deas'); &lt;br /&gt;
	}) &lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; El archivo dosIdeas.js: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function validarImporte(importe) {&lt;br /&gt;
&lt;br /&gt;
        if (importe.length == 0) {&lt;br /&gt;
            return false;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
function extraerSubCadena(cadena, posicionInicial, longitud)&lt;br /&gt;
{&lt;br /&gt;
	return cadena.substr(posicionInicial, longitud);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El resultado de los test quedan de la siguiente manera: &lt;br /&gt;
&lt;br /&gt;
[[Image:DosIdeasQUnitResultado.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6069</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6069"/>
				<updated>2011-08-15T21:36:05Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: /* Escribir test unitarios con QUnit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es QUnit? ==&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript. &lt;br /&gt;
&lt;br /&gt;
== Escribir test unitarios con QUnit ==&lt;br /&gt;
&lt;br /&gt;
Lo primero que se debe hacer es el ambiente de test. &lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Dos Ideas - QUnit&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://code.jquery.com/qunit/git/qunit.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/qunit/git/qunit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Your source files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeas.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Your tests files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeasTest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1 id=&amp;quot;qunit-header&amp;quot;&amp;gt;QUnit example&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ol id=&amp;quot;qunit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Any HTML you may require for your tests to work properly --&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-fixture&amp;quot;&amp;gt;test markup, will be hidden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser.&lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeasTest.js:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
&lt;br /&gt;
	module(&amp;quot;dosIdeasTest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	test('probando validarImporte()', function() { &lt;br /&gt;
		ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;11A12&amp;quot;),'El importe es 11A12'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;A1112&amp;quot;),'El importe es A1112');&lt;br /&gt;
		ok(!validarImporte(&amp;quot;1112A&amp;quot;),'El importe es 1112A');&lt;br /&gt;
	}) &lt;br /&gt;
	&lt;br /&gt;
	test('probando extraerSubCadena()', function() { &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'deas'); &lt;br /&gt;
	}) &lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeas.js:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function validarImporte(importe) {&lt;br /&gt;
        esImporteValido = true;&lt;br /&gt;
&lt;br /&gt;
        if (importe.length == 0) {&lt;br /&gt;
            mensajeError = 'Ingresá el importe a pagar.';&lt;br /&gt;
            esImporteValido = false;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {&lt;br /&gt;
                mensajeError = &amp;quot;El importe a pagar debe ser numérico, mayor a cero con hasta 2 decimales.&amp;quot;;&lt;br /&gt;
                esImporteValido = false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return esImporteValido;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
function extraerSubCadena(cadena, posicionInicial, longitud)&lt;br /&gt;
{&lt;br /&gt;
	return cadena.substr(posicionInicial, longitud);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DosIdeasQUnitResultado.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6068</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6068"/>
				<updated>2011-08-15T21:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es QUnit? ==&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript. &lt;br /&gt;
&lt;br /&gt;
== Escribir test unitarios con QUnit ==&lt;br /&gt;
&lt;br /&gt;
Lo primero que se debe hacer es hacer el ambiente de test. &lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Dos Ideas - QUnit&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://code.jquery.com/jquery-latest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://code.jquery.com/qunit/git/qunit.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://code.jquery.com/qunit/git/qunit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Your source files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeas.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Your tests files go here --&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;dosIdeasTest.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;h1 id=&amp;quot;qunit-header&amp;quot;&amp;gt;QUnit example&amp;lt;/h1&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-banner&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-testrunner-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;h2 id=&amp;quot;qunit-userAgent&amp;quot;&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ol id=&amp;quot;qunit-tests&amp;quot;&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Any HTML you may require for your tests to work properly --&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;qunit-fixture&amp;quot;&amp;gt;test markup, will be hidden&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El codigo que se va a testear debe estar en dosIdeas.js y los test en dosIdeasTest.js. Para correr los test simplemente se debe abrir el html en el browser.&lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeasTest.js:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function(){&lt;br /&gt;
&lt;br /&gt;
	module(&amp;quot;dosIdeasTest&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	test('probando validarImporte()', function() { &lt;br /&gt;
		ok(validarImporte(&amp;quot;1112&amp;quot;),'El importe es 1112'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;11A12&amp;quot;),'El importe es 11A12'); &lt;br /&gt;
		ok(!validarImporte(&amp;quot;A1112&amp;quot;),'El importe es A1112');&lt;br /&gt;
		ok(!validarImporte(&amp;quot;1112A&amp;quot;),'El importe es 1112A');&lt;br /&gt;
	}) &lt;br /&gt;
	&lt;br /&gt;
	test('probando extraerSubCadena()', function() { &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'Ideas'); &lt;br /&gt;
		equal(extraerSubCadena(&amp;quot;dosIdeas&amp;quot;,3,5),'deas'); &lt;br /&gt;
	}) &lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo dosIdeas.js:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function validarImporte(importe) {&lt;br /&gt;
        esImporteValido = true;&lt;br /&gt;
&lt;br /&gt;
        if (importe.length == 0) {&lt;br /&gt;
            mensajeError = 'Ingresá el importe a pagar.';&lt;br /&gt;
            esImporteValido = false;&lt;br /&gt;
        } else {&lt;br /&gt;
            if (!/^[1-9][0-9]*(?:\.)?[0-9]?[0-9]?$/.test(importe.replace(',','.'))) {&lt;br /&gt;
                mensajeError = &amp;quot;El importe a pagar debe ser numérico, mayor a cero con hasta 2 decimales.&amp;quot;;&lt;br /&gt;
                esImporteValido = false;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return esImporteValido;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
function extraerSubCadena(cadena, posicionInicial, longitud)&lt;br /&gt;
{&lt;br /&gt;
	return cadena.substr(posicionInicial, longitud);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DosIdeasQUnitResultado.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:DosIdeasQUnitResultado.jpg&amp;diff=6067</id>
		<title>Archivo:DosIdeasQUnitResultado.jpg</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:DosIdeasQUnitResultado.jpg&amp;diff=6067"/>
				<updated>2011-08-15T19:56:31Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6061</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6061"/>
				<updated>2011-08-15T17:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EjemploQUnit.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6060</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6060"/>
				<updated>2011-08-15T17:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de javascript con QUnit&lt;br /&gt;
&lt;br /&gt;
QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EjemploQUnit.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6059</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6059"/>
				<updated>2011-08-15T17:31:02Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de javascript con QUnit&lt;br /&gt;
QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EjemploQUnit.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6058</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6058"/>
				<updated>2011-08-15T17:30:11Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de javascript con QUnit&lt;br /&gt;
QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EjemploQUnit.jpg|200px|thumb|left|Ejemplo de QUnit]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:EjemploQUnit.jpg&amp;diff=6057</id>
		<title>Archivo:EjemploQUnit.jpg</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:EjemploQUnit.jpg&amp;diff=6057"/>
				<updated>2011-08-15T17:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: Ejemplo de QUnit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ejemplo de QUnit&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6056</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6056"/>
				<updated>2011-08-15T17:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de javascript con QUnit&lt;br /&gt;
QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:EjemploQUnit.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6055</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6055"/>
				<updated>2011-08-15T17:24:36Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de javascript con QUnit&lt;br /&gt;
QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:Dos_Ideas_-_QUnit_example.jpg&amp;diff=6054</id>
		<title>Archivo:Dos Ideas - QUnit example.jpg</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:Dos_Ideas_-_QUnit_example.jpg&amp;diff=6054"/>
				<updated>2011-08-15T17:21:07Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: Ejemplo de QUnit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ejemplo de QUnit&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6053</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6053"/>
				<updated>2011-08-15T17:19:36Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de javascript con QUnit&lt;br /&gt;
QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Dos Ideas - QUnit_example.jpg]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6052</id>
		<title>Test de javascript con QUnit</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Test_de_javascript_con_QUnit&amp;diff=6052"/>
				<updated>2011-08-15T17:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: Página creada con 'Test de javascript con QUnit QUnit es una potente herramienta para testear javascript.  Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML pa…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de javascript con QUnit&lt;br /&gt;
QUnit es una potente herramienta para testear javascript.&lt;br /&gt;
&lt;br /&gt;
Para utilizar QUnit, se tiene que incluir a los archivos qunit.js, qunit.css y un HTML para mostrar los resultados de las pruebas.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Dos Ideas - QUnit_example.png]]&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Archivo:Dos_Ideas_-_QUnit_example.png&amp;diff=6051</id>
		<title>Archivo:Dos Ideas - QUnit example.png</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Archivo:Dos_Ideas_-_QUnit_example.png&amp;diff=6051"/>
				<updated>2011-08-15T17:16:28Z</updated>
		
		<summary type="html">&lt;p&gt;Eestevez: Ejemplo de QUnit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ejemplo de QUnit.&lt;/div&gt;</summary>
		<author><name>Eestevez</name></author>	</entry>

	</feed>