Ficheros de configuración externa en aplicación Tomcat y lectura con JNDI de la localización.

Siguiendo la entrada anterior sobre ficheros editables por el usuario que va a manejar (y administrar) la aplicación, podemos localizarlos en un lugar más útil que dentro de las clases de la aplicación (.war que se sobreescribirá en nuevos despliegues).

Podemos colocar los ficheros de configuración en un directorio en el servidor y configurar esta ubicación en el fichero context.xml de Tomcat. De este modo, usando JNDI podremos tener acceso desde el código al lugar indicando en un variable de entorno. Vamos a verlo.

Supongamos que tenemos el fichero con la plantilla que queremos que sea editable por el usuario en /server/myApp/configuracion.txt.

Podemos editar el fichero context.xml de nuestro tomcat para incluir una variable de entorno que apunte al fichero.

<Environment name="ficheroConf" value="/server/myApp/configuracion.txt." type="java.lang.String"/>

El fichero context.xml se encuentra en:

  • $CATALINA_BASE/conf/context.xml para todas las aplicaciones que estén corriendo en el servidor
  • $CATALINA_BASE/conf/[enginename]/[hostname]/myApp.xml donde myApp es el nombre de la aplicación

¿Cómo leemos la variable de entorno? Muy fácil, usando JNDI dentro de nuestra aplicación.

Si estamos usando un contenedor JEE, simplemente tenemos que tomar el contexto inicial:

InitialContext ctx;
String fileName = null;
try {
    ctx = new InitialContext();
    fileName = (String) ctx.lookup("java:comp/env/ficheroConf");
}
catch (NamingException e1) {
    fileName = getClass().getResource(".configuracion.txt").getFile();
    LOG.error(e1);
}

LOG.info("Leyendo configuración desde: " + fileLineZPL);

File labelFile = new File(fileLineZPL);

try {
    ret = FileUtils.readFileToString(labelFile);
} catch (IOException e) {
    LOG.error(e);
}

return ret;

Como se puede ver en el código, se lee la variable usando JNDI y empleando el contexto inicial que nos permite el servidor JEE. Si fallase, o para hacer test sin levantar Tomcat (pero teniendo preparado el fichero de configuración en otro lugar), también se opta por usar getResource como alternativa.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s