Modificar archivos propiedades WebLogic 12c en tiempo de ejecución
16/04/2015 -
Muchas veces nos encontramos con la necesidad de modificar en tiempo de ejecución los valores de variables definidas en archivos .properties. Para que estos archivos puedan ser modificados por las aplicaciones o por otro proceso externo (incluso por nosotros mismos mediante un editor de texto) deberán estar situados en una carpeta del sistema de archivos y hallarse fuera de cualquier paquete .ear, .war o .jar. Tenemos que decidir como accedemos a los archivos en disco:
- Usando una ruta absoluta y cargado el archivo, típicamente mediante la clase File, por ejemplo: File file = File(“C:\abcfolder\textfile.txt”);
- Usando una ruta absoluta obtenida previamente de un archivo .properties incluido en la aplicación, a la que se concatena el nombre del archivo
- Apoyándonos en el cargador de clases de la aplicación y creando una librería compartida que incluya una carpeta ‘classes’, donde pondremos nuestros archivos .properties.
Elegir la primera de las opciones no es una buena práctica: si cambia la ubicación del archivo, estaremos obligados a volver a compilar y desplegar nuestra aplicación.
La segunda es una buena opción, pero la tercera tiene la ventaja de poder versionar fácilmente los recursos almacenados en el disco.
Además, los programadores de la aplicación podrá usar el cargador de clases para localizar el archivo sin especificar la ruta o creando una estructura de sub-carpetas a partir de la raíz del classpath (la carpeta ‘classes’), si así lo desean.
Vamos a realizar una pequeña aplicación que haga uso de una librería compartida con un único archivo de propiedades conteniendo dos variables: usuario y contraseña. Si ambos valores introducidos en la página inical coinciden con los valores en el archivo, se mostrará una segunda página indicándonos que hemos tenido éxito en la autenticación; de lo contrario, nos llevará a una tercera diciendo que el usuario o la contraseña no coinciden. Con este sencillo ejemplo podremos cambiar el archivo Credentials.properties y verificar que la aplicación toma los cambios cada vez que suceden.
Veamos la estructura que tendrá nuestra librería compartida antes de ser desplegada:
Estructura de archivos de la libraría
Si desplegamos esta carpeta en Weblogic como ‘Biblioteca’ y en el apartado ‘Accesibilidad de Origen’ marcamos la opción ‘Usar Valores por Defecto Definidos por Destinos de Despliegue’ estaremos indicando al servidor de aplicaciones que los archivos localizados en ‘WEB-INF/classes’ serán modificables en tiempo de ejecución por las aplicaciones que hagan referencia a esta librería desde sus weblogic.xml.
La aplicación aquí descrita tiene el siguiente contenido dentro de ‘weblogic.xml’
La etiqueta <librar-ref> permite a la aplicación hacer uso de la librería cuya versión de implementación detalla mediante <implementation-version>
Y ya sólo nos queda conocer cómo accede nuestra aplicación a este recurso. La forma más sencilla es con un método en el ManagedBean de la página principal que será invocado cuando se pulse el botón ‘Login’.
Desplegamos la librería compartida y a continuación la aplicación.
Podéis descargar el proyecto completo para JDeveloper aquí.