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>
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.