martes, abril 24, 2007

How to: Servlets & JNDI

Nota: Contenido altamente técnico 0% recomendado para el lector casual de este blog. (Ya escribiré sobre temas más humanos)

Situémonos en contexto:
Estás trabajando en una aplicación J2EE, con multiples capas, y todo lo que el concepto engloba y significa. Por algún motivo le tienes alergia a los EJBs, y prefieres ser tu mismo quien maneje la persistencia, ejecutando las consultas SQLs "casi a la antigua". Así te ahorras los dolores de cabeza de Hibernate y bicharracos similares, al menos eso dices tu (y yo te creo).

Problema:
Quieres conectarte desde un Servlet a tu base de datos, pero quieres hacerlo bien, dejando que el administrador de conexiones de tu servidor de aplicaciones (porque estás usando un servidor de aplicaciones de verdad... ¡¿QUÉ?! ¡¿QUÉ ESTAS USANDO TOMCAT?!... ehm... bueno... supongamos que estas usando un servidor de aplicaciones (digo, para que continues leyendo...)) se encargue del trabajo sucio.

Las conexiones están configuradas, sabes que JNDI funciona, pero no hay caso para recuperar la conexión a partir de su nombre. La API del servidor de aplicaciones no te provee de ningún método al qeu le pases un String y te devuelva un Connection, eso no es bueno.

Solución:
Vas a tener que hacer un mapeo de la conexión, de manera de indicarle al contexto de tu Aplicación Web (donde está el Servlet que quieres conectar a la BD), que a partir de un nombre (arbitrario), apunte a la conexión tal como está configurada en el JNDI del Servidor de Aplicaciones.

¿Cómo lo hago?
Fácil y bonito. Tienes que editar el archivo web.xml, que normalmente encontrarás en la carpeta WEB-INF de tu proyecto, y agregar/modificar la sección resource-ref:

DataSource Reference
jdbc/miConexion
javax.sql.DataSource
Container

En el caso del Sun Application Server, ahora GlassFish, deberás también editar el archivo sun-web.xml :

jdbc/miConexion
jdbc/miConexion

jndi-name es el nombre real de la conexión.
Por una cosa de simplicidad sugiero que el mapeo use el mismo nombre jndi, aunque puede darse que tengan algún problema.

Así que eso. Ojala les funcione.
Publicar un comentario