Hace algún tiempo me encontré con la necesidad de «simular» el funcionamiento de obtención de recursos de tipo URL mediante JNDI que proporciona WebShpere Application Server, pero en Tomcat.
En su día escribí una factoría para Tomcat pero, lamentablemente, perdí el código así que hoy me he puesto manos a la obra para reescribirla (ya que, realmente, no es nada complicado).
La definición de un recurso URL solamente requiere de un nombre, un nombre JNDI y la URL.
Aquí está disponible la factoría para todo aquel que la desee utilizar (código fuente incluido).
Los pasos a seguir para poder hacer uso de la misma son los siguientes:
- Asegúrate que la URLFactory está disponible para Tomcat:
Pon el fichero tomcat-factory-url.jar en el directorio $CATALINA_HOME/lib.
- Declara tu recurso:
Modifica el descriptor de despliegue de de tu aplicación web (/WEB-INF/web.xml) para definir el nombre JNDI bajo el que solicitarás las nuevas instancias de URL. El modo más sencillo de hacerlo es utilizar el elemento <resource-env-ref>, tal que así:
<resource-env-ref>
<description>
Object factory for URL instances.
</description>
<resource-env-ref-name>
url/MyURL
</resource-env-ref-name>
<resource-env-ref-type>
java.net.URL
</resource-env-ref-type>
</resource-env-ref>
- Codifica tu aplicación para utilizar este recurso:
Un uso típico de referencia de recurso de entorno sería algo así:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
URL url = (URL) envCtx.lookup("url/MyURL");
writer.println(«url = » + url.toString());
- Configura la factoría de recursos de Tomcat:
Edita el META-INF/context.xml de tu aplicación o el $CATALINA_HOME/conf/server.xml si quieres que el recurso esté disponible para todo el sistema:
<Resource name="url/MyURL" auth="Container"
type="java.net.URL"
factory="org.eu.rubensa.tomcat.factory.URLFactory"
url="http://blog.rubena.eu.org/" />
Algunos enlaces de interés
Apache Tomcat 6.0 JNDI Resources HOW-TO