viernes, 17 de agosto de 2012

Directorios Virtuales Weblogic

Buenas tardes, he estado buscando como acceder desde el navegador de un cliente a un recurso ubicado en un directorio fuera del contexto de una aplicación web desplegado en el servidor de aplicaciones weblogic, para lo cual me encontré con un archivo de configuración que permite realizar esto. El archivo que permite realizar esto es un descriptor de despliegue propio de weblogic. Pero primero que todo veamos el problema:

Me pidieron realizar una funcionalidad dentro de una aplicación web que permitiera a un usuario subir archivos HTML estáticos comprimidos en un archivo zip, la aplicación debía descomprimir dicho archivo zip y guardarlo en alguna parte del servidor web para que éstas páginas fueran mostradas al cliente a través del navegador por una URL especifica.

Posibles soluciones:

  1. Crear una carpeta dentro de la aplicación web. WEB-INF por ejemplo. Resulta que ésta carpeta es de acceso privado, así que solución no óptima.
  2. Crear una carpeta en el mismo directorio de la página jsp que se encarga de mostrar las páginas HTML, podría ser una opción, sino fuera porque tocaría hacer un backup de dicho directorio cada vez que realice un 'undeploy' de la aplicación, además depende de como el servidor realice el despliegue (exploded o no-exploded).
  3. Crear una carpeta en cualquier lugar del file system y darle acceso al usuario para que acceda a dicha carpeta desde el navegador.
Seguramente habrán muchas mas opciones, pero estas fueron las que se me ocurrieron y de las tres planteadas me incline a llevar a cabo la tercera opción, para esto cree un directorio en la raíz del sistema de archivos donde se ejecuta el servidor. 

sudo mkdir /home/nombreUsuario/archivosHtml

allí se ubicaran todos los archivos HTML subidos por un cliente y que así mismo serán accedidos por él para una visualización integrada con toda la aplicación web.

una vez hecho esto creo un archivo (si es que no existe) en la siguiente ruta de mi aplicación web: 

nombreProyecto/resource/WEB-INF/weblogic.xml

Éste archivo debe tener la siguiente estructura:


<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 
                    http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
    //add block code here
</weblogic-web-app>

Hay que tener en cuenta que éste ejemplo se realizó en un servidor weblogic versión 10


Una vez creado el archivo se debe agregar el siguiente bloque de código dentro de los elementos <weblogic-web-app></weblogic-web-app>

<virtual-directory-mapping>
    <local-path> /home/nombreUsuario/archivosHtml </local-path>
    <url-pattern>*.html</url-pattern>
    <url-pattern>paginas/*.html</url-pattern>
 <url-pattern>*.htm</url-pattern>
</virtual-directory-mapping>


donde local-path indica cual es el directorio al cual se le quiere dar acceso a los usuarios.
y url-pattern indica a que recursos le voy a dar acceso.

Una vez realizado esto y desplegada la aplicación el usuario puede acceder a dichos recursos de la siguiente manera:

http://server:port/nombreProyecto/cualquierCosa.html

ó 

http://server:port/nombreProyecto/paginas/cualquierCosa.html

Bueno eso es todo, espero les sirva de algo.

Bibliografia:

http://weblogicserveradministration.blogspot.com/2010/10/virtual-directory-mapping-in-webapps.html