Recetas · Servidores de Aplicaciones

Origen de datos JNDI en Tomcat

Tomcat
Si estás tratando de configurar un origen de datos JNDI en Tomcat (a partir de la versión 5.5) y recibes un mensaje tal que así:

org.apache.tomcat.dbcp.dbcp.SQLNestedException
Cannot create JDBC driver of class ‘ ‘ for connect URL ‘null’

tal vez te ocurra lo que me sucedió a mí y es que resulta que ya no se utilizan los «resource-params» que se solían usar (en versiones anteriores a la 5.5). Ahora solamente se pueden definir los recursos JNDI mediante atributos.

Hay que cambiar esto:

<Context …>

<Resource name=»jdbc/EmployeeDB» auth=»Container»
type=»javax.sql.DataSource»/>
<ResourceParams name=»jdbc/EmployeeDB»>
<parameter>
<name>username</name>
<value>dbusername</value>
</parameter>
<parameter>
<name>password</name>
<value>dbpassword</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.hsql.jdbcDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:HypersonicSQL:database</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>8</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>4</value>
</parameter>
</ResourceParams>

</Context>

Por esto:

<Context …>

<Resource name=»jdbc/EmployeeDB» auth=»Container»
type=»javax.sql.DataSource» username=»dbusername» password=»dbpassword»
driverClassName=»org.hsql.jdbcDriver» url=»jdbc:HypersonicSQL:database»
maxActive=»8″ maxIdle=»4″/>

</Context>

Vía

NOTA: Si además, lo que queremos es que nuestro origen de datos esté accesible para toda aplicación web, basta con que la definición del recurso y sus parámetros se pongan dentro de la etiqueta <DefaultContext></DefaultContext> de la definición del <Host name=»localhost»></Host> del archivo server.xml.

Significado de los parámetros

  • url:
    La cadena de conexión de la base de datos
  • driverClassName:
    El nombre de la clase del driver JDBC
  • username:
    El nombre de usuario para acceder a la base de datos
  • password:
    La constraseña del usuario para acceder a la base de datos
  • maxActive:
    El número máximo de conexiones en el pool de conexiones (0=ilimitado)
  • maxIdle:
    El número máximo de conexiones inactivas a retener en el pool de conexiones (0=ilimintado)
  • maxWait:
    El tiempo máximo a esperar para obtener una conexión, en milisegundos (-1=ilimitado)
  • removeAbandoned:
    Si removeAbandoned = true entonces cuando haya pocas conexiones disponibles en el pool de conexiones se recuperará y reciclará cualquier conexión abandonada que se encuentre.
  • removeAbandonedTimeout:
    El número de segundos que una conexión tiene que estar inactiva hasta que sea considerada abandonada por el pool de conexiones (por defecto 300).
  • logAbandoned:
    Si logAbandoned = true el pool de conexiones guardará un seguimiento de pila del código que abandonó un recurso de conexión.

vía