p

        

xmllogo

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 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.

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. 

Qué necesitamos saber?

  • Formato XML: conjunto de reglas para codificar documentos
  • Definición de DTD: formato que define la descripción de estructura y sintaxis de un documento XML
  • Digester de Apache Commons: componente que permite definir un conjunto de reglas para procesar un archivo XML

 

Construcción de archivo de configuración

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.

La construcción de la carga de configuración de un módulo se puede dividir en 3 partes:

1. Creación de archivo con la configuración

Los archivos de configuración de OpenCms se guardan dentro de la carpeta ‘/WEB-INF/config’ 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.

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 comentariosConfiguration.XML y lo almacenamos en la carpeta config con un formato similar al detallado a continuación.

- ESTADO : un valor booleano que determina si se deberá permitir ingresar o no comentarios a un recurso.

- NÚMERO: un entero que determina cuantos comentarios por vez se mostrarán en cada página.

<?xml version=”1.0″ encoding=”UTF-8″?>

<opencms>

<comentarios>

<estado>true</estado>

<numero>20</numero>

</comentarios>

</opencms>

2. Creación de clase de carga de configuración.

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:

<!– # The root configuration node is called <opencms> for all OpenCms configurations. –>

<!ELEMENT opencms (comentarios)>

<!ELEMENT comentarios ( estado, numero )>

<!ELEMENT estado (#PCDATA)>

<!ELEMENT numero (#PCDATA)>

Luego, crearemos la clase que leerá el archivo de configuracion. Para eso utilizaremos una herencia de la clase org.opencms.configuration.A_CmsXmlConfiguration. 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.

Esta deberá ser creada dentro de un paquete, incluyendo el DTD en la misma ubicación.

package org.opencms.configuration;

public class ComentariosConfiguration extends A_CmsXmlConfiguration {

public static final String CONFIGURATION_DTD_NAME = “comentariosConfiguration.dtd”;

public static final String DEFAULT_XML_FILE_NAME = “comentariosConfiguration.xml”;

public ComentariosConfiguration() {

// Retornamos que dtd se usa para controlar el xml.

setXmlFileName(DEFAULT_XML_FILE_NAME);

}

// Configuramos las reglas a utilizar al leer el xml.

public void addXmlDigesterRules(Digester digester) {

 

// Agregamos una regla que al encontrar el tag estado, llame al metodo “setEstado” pasandole por parámetro el contenido del mismo.

digester.addCallMethod(“*/comentarios/estado”, “setEstado”, 1);

digester.addCallParam(“*/comentarios/estado”, 0);

// Agregamos una regla que al encontrar el tag numero, llame al metodo “setNumero” pasandole por parámetro el contenido del mismo.

digester.addCallMethod(“*/comentarios/numero”, “setNumero”, 1);

digester.addCallParam(“*/comentarios/numero”, 0);

}

public String getDtdFilename() {

return CONFIGURATION_DTD_NAME;

}

// Metodo llamado al parsear el xml que supone que existe una clase singleton “valorConfiguracion” a la que se le pasa la configuración leida.

public void setEstado(String value) {

String valueLower = value.toLowerCase();

if (valueLower.equals(“yes”) || valueLower.equals(“true”))

valorConfiguracion.getInstance().setEstado(Boolean.TRUE);

else

valorConfiguracion.getInstance().setEstado(Boolean.FALSE);

}

// Metodo llamado al parsear el xml que supone que existe una clase singleton “valorConfiguracion” a la que se le pasa la configuración leida.

public void setNumero(String value) {

int numero = Integer.parseInt(value);

valorConfiguracion.getInstance().setNumero(numero);

}

}

Para utilizar este mecanismo, tendremos que definir en la misma carpeta que la clase anterior la clase “MessagesComentarios” que hereda de “A_CmsMessageBundle” y  defina los mensajes a mostar en el opencms.log. También deberemos crear la clase properties con el texto de los mensajes a mostrar.

3. Agregado de la nueva configuración

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 opencms.xml ubicado en el directorio /WEB-INF/config.

<config class=”org.opencms.configuration.ComentariosConfiguration”/>

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.

 

2 Responses to “Cómo crear un archivo XML de configuración para módulos de OpenCms?”

  1. Ángel C. Lázaro

    Muchas gracias por la información , siempre está bien contar con nuevos puntos de vista. ¿Qué opinas de utilizar los .properties de I18N que proporciona OpenCms para modelar la configuración de los módulos?, yo lo hago así y me ahorro muchísimo código ya que se utilizan las clases que OpenCms proporciona.

    Un saludo.

    • vpod

      Ángel:

      Ambos métodos son proporcionados por OpenCms. Ambos son útiles y la selección de uno u otro es a criterio del desarrollador.

      En principio los archivos de .properties de I18N están pensados fundamentalmente para la internacionalización del producto. Aunque también se pueden utilizar perfectamente para cargar configuración de un módulo. Su utilización es bastante sencilla.

      Los archivos de configuración xml estan pensados especificamente para la carga de configuración. Como ventaja tienen que al ser cargados mediante el Digester (http://commons.apache.org/digester/) se pueden crear reglas y generar la carga de configuraciones complicadas escribiendo pocas lineas de código. Además se pueden realizar cargas de configuraciones más dinamicas creando de acuerdo al xml un conjunto de objetos listos para utillizar en el módulo.

      Gracias por leernos.

Leave a Reply

You must be logged in to post a comment.