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

<channel>
	<title>Blog sobre Administración de Contenidos (CMS) para Portales, Diarios, Revistas y Comunidades &#187; xml</title>
	<atom:link href="http://blog.tfsla.com/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tfsla.com</link>
	<description>Software de Administración de Contenidos, Facebook Apps, TV Widgets y tecnologías Internet</description>
	<lastBuildDate>Thu, 02 Feb 2012 20:02:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Cómo crear un archivo XML de configuración para módulos de OpenCms?</title>
		<link>http://blog.tfsla.com/2009/09/como-crear-un-archivo-xml-de-configuracion-para-modulos-de-opencms/</link>
		<comments>http://blog.tfsla.com/2009/09/como-crear-un-archivo-xml-de-configuracion-para-modulos-de-opencms/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 21:07:36 +0000</pubDate>
		<dc:creator>vpod</dc:creator>
				<category><![CDATA[OpenCms]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.tfsla.com/?p=153</guid>
		<description><![CDATA[Al crear un módulo en OpenCms es probable que tengamos parámetros configurables. Por lo general, estas configuraciones son almacenadas a nivel de cada módulo en archivos de propiedades.  Por cada módulo tendremos dentro del mismo configuraciones específicas. Este artículo explica como generar un archivo XML de configuración centralizado que nos permitirá acelerar los tiempos de [...]]]></description>
			<content:encoded><![CDATA[<address><img class="alignnone size-full wp-image-157" title="xmllogo" src="http://blog.tfsla.com/wp-content/uploads/2009/09/xmllogo.jpg" alt="xmllogo" width="454" height="145" /></address>
<p>Al crear un módulo en OpenCms es probable que tengamos parámetros configurables. Por lo general, estas configuraciones son almacenadas a nivel de cada módulo en archivos de propiedades.  Por cada módulo tendremos dentro del mismo configuraciones específicas.</p>
<p>Este artículo explica como generar un archivo XML de configuración centralizado que nos permitirá acelerar los tiempos de desarrollo y tener un LOG de eventos consolidado. OpenCms tiene un mecanismo interno para cargar la configuración de sus módulos que podemos aprovechar reduciendo la cantidad de trabajo.</p>
<p><span id="more-153"></span>A efectos prácticos, utilizaremos como ejemplo durante todo el artículo un MODULO DE COMENTARIOS. A nivel configuración, este módulo podría tener un parámetro para definir si debe estar activo o inactivo y otro parámetro para la cantidad de entradas que tiene que mostrar por página. </p>
<h1>Qué necesitamos saber?</h1>
<ul>
<li><strong>Formato XML</strong>: conjunto de reglas para codificar documentos</li>
<li><strong>Definición de DTD</strong>: formato que define la descripción de estructura y sintaxis de un documento XML</li>
<li><strong>Digester de Apache Commons</strong>: componente que permite definir un conjunto de reglas para procesar un archivo XML</li>
</ul>
<p> </p>
<h1>Construcción de archivo de configuración</h1>
<p>Cada vez que se inicia OpenCms se configuran las clases propias y de sus módulos utilizando información almacenada en archivos XML. Cuando creamos un módulo con clases que requieren cierta configuración, podemos aprovechar este comportamiento extendiendo ciertas clases provistas por OpenCms.</p>
<p>La construcción de la carga de configuración de un módulo se puede dividir en 3 partes:</p>
<h2>1. Creación de archivo con la configuración</h2>
<p>Los archivos de configuración de OpenCms se guardan dentro de la carpeta <strong>&#8216;/WEB-INF/config&#8217; </strong>de la carpeta raíz de la aplicación. Al ver su contenido, notaremos que son simples archivos XML. Por ejemplo: opencms-modules.xml, opencms-search.xml, etc.</p>
<p>Utilizando nuestro ejemplo del MODULO DE COMENTARIOS, asignamos el parámetro de configuración ESTADO y otro parámetro NUMERO a un archivo de configuración <strong>comentariosConfiguration.XML </strong>y lo almacenamos en la carpeta <strong>config </strong>con un formato similar al detallado a continuación.</p>
<p>- ESTADO : un valor booleano que determina si se deberá permitir ingresar o no comentarios a un recurso.</p>
<p>- NÚMERO: un entero que determina cuantos comentarios por vez se mostrarán en cada página.</p>
<p><span style="color: #ff0000;">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</span></p>
<p><span style="color: #ff0000;">&lt;opencms&gt;</span></p>
<p><span style="color: #ff0000;">&lt;comentarios&gt;</span></p>
<p><span style="color: #ff0000;">&lt;estado&gt;true&lt;/estado&gt;</span></p>
<p><span style="color: #ff0000;">&lt;numero&gt;20&lt;/numero&gt;</span></p>
<p><span style="color: #ff0000;">&lt;/comentarios&gt;</span></p>
<p><span style="color: #ff0000;">&lt;/opencms&gt;</span></p>
<h2>2. Creación de clase de carga de configuración.</h2>
<p>El siguiente paso es crear la estructura necesaria para que se cargue la configuración. Por un lado necesitamos un DTD, comentariosConfig.DTD,  que defina la organizacion del XML:</p>
<p><span style="color: #ff0000;">&lt;!&#8211; # The root configuration node is called &lt;opencms&gt; for all OpenCms configurations. &#8211;&gt; </span></p>
<p><span style="color: #ff0000;">&lt;!ELEMENT opencms (comentarios)&gt; </span></p>
<p><span style="color: #ff0000;">&lt;!ELEMENT comentarios ( estado, numero )&gt; </span></p>
<p><span style="color: #ff0000;">&lt;!ELEMENT estado (#PCDATA)&gt; </span></p>
<p><span style="color: #ff0000;">&lt;!ELEMENT numero (#PCDATA)&gt;</span></p>
<p>Luego, crearemos la clase que leerá el archivo de configuracion. Para eso utilizaremos una herencia de la clase <strong>org.opencms.configuration.A_CmsXmlConfiguration</strong>. Dentro del mismo, definimos que archivo XML leeremos, el DTD con la estructura y el conjunto de reglas a ejecutar al leer la configuración.</p>
<p>Esta deberá ser creada dentro de un paquete, incluyendo el DTD en la misma ubicación.</p>
<p><span style="color: #ff0000;">package org.opencms.configuration;</span></p>
<p><span style="color: #ff0000;">public class ComentariosConfiguration extends A_CmsXmlConfiguration {</span></p>
<p><span style="color: #ff0000;">public static final String CONFIGURATION_DTD_NAME = &#8220;comentariosConfiguration.dtd&#8221;;</span></p>
<p><span style="color: #ff0000;">public static final String DEFAULT_XML_FILE_NAME = &#8220;comentariosConfiguration.xml&#8221;;</span></p>
<p><span style="color: #ff0000;">public ComentariosConfiguration() {</span></p>
<p><span style="color: #ff0000;">// Retornamos que dtd se usa para controlar el xml.</span></p>
<p><span style="color: #ff0000;">setXmlFileName(DEFAULT_XML_FILE_NAME);</span></p>
<p><span style="color: #ff0000;">}</span></p>
<p><span style="color: #ff0000;">// Configuramos las reglas a utilizar al leer el xml.</span></p>
<p><span style="color: #ff0000;">public void addXmlDigesterRules(Digester digester) {</span></p>
<p><span style="color: #ff0000;"> </span></p>
<p><span style="color: #ff0000;">// Agregamos una regla que al encontrar el tag estado, llame al metodo &#8220;setEstado&#8221; pasandole por parámetro el contenido del mismo.</span></p>
<p><span style="color: #ff0000;">digester.addCallMethod(&#8220;*/comentarios/estado&#8221;, &#8220;setEstado&#8221;, 1);</span></p>
<p><span style="color: #ff0000;">digester.addCallParam(&#8220;*/comentarios/estado&#8221;, 0);</span></p>
<p><span style="color: #ff0000;">// Agregamos una regla que al encontrar el tag numero, llame al metodo &#8220;setNumero&#8221; pasandole por parámetro el contenido del mismo.</span></p>
<p><span style="color: #ff0000;">digester.addCallMethod(&#8220;*/comentarios/numero&#8221;, &#8220;setNumero&#8221;, 1);</span></p>
<p><span style="color: #ff0000;">digester.addCallParam(&#8220;*/comentarios/numero&#8221;, 0);</span></p>
<p><span style="color: #ff0000;">}</span></p>
<p><span style="color: #ff0000;">public String getDtdFilename() {</span></p>
<p><span style="color: #ff0000;">return CONFIGURATION_DTD_NAME;</span></p>
<p><span style="color: #ff0000;">}</span></p>
<p><span style="color: #ff0000;">// Metodo llamado al parsear el xml que supone que existe una clase singleton &#8220;valorConfiguracion&#8221; a la que se le pasa la configuración leida.</span></p>
<p><span style="color: #ff0000;">public void setEstado(String value) {</span></p>
<p><span style="color: #ff0000;">String valueLower = value.toLowerCase();</span></p>
<p><span style="color: #ff0000;">if (valueLower.equals(&#8220;yes&#8221;) || valueLower.equals(&#8220;true&#8221;))</span></p>
<p><span style="color: #ff0000;">valorConfiguracion.getInstance().setEstado(Boolean.TRUE);</span></p>
<p><span style="color: #ff0000;">else</span></p>
<p><span style="color: #ff0000;">valorConfiguracion.getInstance().setEstado(Boolean.FALSE);</span></p>
<p><span style="color: #ff0000;">}</span></p>
<p><span style="color: #ff0000;">// Metodo llamado al parsear el xml que supone que existe una clase singleton &#8220;valorConfiguracion&#8221; a la que se le pasa la configuración leida.</span></p>
<p><span style="color: #ff0000;">public void setNumero(String value) {</span></p>
<p><span style="color: #ff0000;">int numero = Integer.parseInt(value);</span></p>
<p><span style="color: #ff0000;">valorConfiguracion.getInstance().setNumero(numero);</span></p>
<p><span style="color: #ff0000;">}</span></p>
<p><span style="color: #ff0000;">}</span></p>
<p>Para utilizar este mecanismo, tendremos que definir en la misma carpeta que la clase anterior la clase &#8220;MessagesComentarios&#8221; que hereda de &#8220;A_CmsMessageBundle&#8221; y  defina los mensajes a mostar en el <strong>opencms.log</strong>. También deberemos crear la clase properties con el texto de los mensajes a mostrar.</p>
<h2>3. Agregado de la nueva configuración</h2>
<p>Una vez que tengamos definidas las clases y los archivos de configuración deberemos indicar al OpenCms que al iniciar debe ejecutar nuestra clase y tomar la configuración. Esto se realiza agregando una nueva entrada al archivo <strong>opencms.xml</strong> ubicado en el directorio <strong>/WEB-INF/config</strong>.</p>
<p><span style="color: #ff0000;">&lt;config class=&#8221;org.opencms.configuration.ComentariosConfiguration&#8221;/&gt;</span></p>
<p>Finalizado este paso, en el próximo inicio del sistema se levantará la configuración del archivo XML y la misma podrá ser utilizada por nuestras clases y aplicaciones.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tfsla.com/2009/09/como-crear-un-archivo-xml-de-configuracion-para-modulos-de-opencms/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

