POOL DE CONEXIONES A TRAVÉS DE TOMCAT 5

Anuncio
POOL DE CONEXIONES A TRAVÉS DE TOMCAT 5.5
Objetivo
Se pretende utilizar el servidor Tomcat como gestor de conexiones a las bases de
datos que utiliza la aplicación. Es de esperar que el resultado sea mucho mejor que
utilizar un pool de conexiones propio ya que el propio de Tomcat debe estar mucho más
optimizado, además de ser más configurable.
Hay que destacar que la configuración dependerá de la versión de Tomcat que
estemos utilizando, ya que es distinta la forma de proceder entre las versiones 4.x, 5.0 y
5.5. En nuestro caso, la versión a utilizar es la 5.5.4.
Procedimiento
El procedimiento a seguir se resume en los siguientes cuatro pasos.
1. Instalar los drivers JDBC
En primer lugar debemos copiar los ficheros .jar que contienen los drivers JDBC que
vamos a usar en el directorio $CATALINA_HOME/common/lib. Desde ahí estarán
disponibles para la aplicación y para el servidor por lo que en principio ya no hará falta
distribuirlos con la aplicación.
2. Configurar el fichero WEB-INF/web.xml
Por cada fuente JDBC añadimos una entrada como la siguiente en el fichero web.xml
<resource-ref>
<description>Descripcion del driver</description>
<res-ref-name>jdbc/hsqldb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>




<description>:
descripción textual del recurso.
<res-ref-name>: hace las veces de alias para acceder al recurso JDBC.
Puede ser cualquier nombre que queramos, pero siempre con el prefijo jdbc/
ya que éste forma parte del nombre JNDI (Java Naming and Directory
Interface) que emplea Tomcat para localizar los recursos de la aplicación.
<res-type>: indica el tipo de fuente de datos a la que estamos accediendo. El
tipo javax.sql.DataSource es el propio de los drivers JDBC.
<res-auth>: especifica si la aplicación se registra en el gestor de recursos a
través de su propio código fuente o si el contenedor de la aplicación se
registra en nombre de la misma de forma automática . Sus valores posibles
son Container y Application.
3. Configurar el fichero META-INF/context.xml
El siguiente fichero a configurar es context.xml en el directorio META-INF. Es
posible que dicho fichero no exista, por lo que deberemos crearlo en tal caso.
En este fichero es en el que realmente especificaremos los parámetros de conexión a
una base de datos determinada. Deberá existir una entrada <Resource> por cada base de
datos que se vaya a emplear y su nombre deberá coincidir con el indicado en el fichero
web.xml
<Context path="/PrePangea" docBase="PrePangea">
<Resource
name="jdbc/hsqldb"
auth="Container"
type="javax.sql.DataSource"
username="user"
password="password"
driverClassName="org.hsqldb.jdbcDriver"
url="jdbc:hsqldb:hsql://phoenix/hsqlDB"
maxActive="8"
maxIdle="4"
/>
</Context>
El elemento <Context> hace referencia al contexto donde este recurso es válido, esto
es, a la aplicación que se está desplegando. Sus propiedades path y docBase hacen
referencia al nombre de dicha aplicación.
Las propiedades de configuración de <resource> son las siguientes:











name: nombre JNDI. Debe ser el mismo nombre que el indicado en web.xml.
auth: igual que <res-auth> en el fichero web.xml.
type: igual que <res-type> en el fichero web.xml.
username: usuario para acceder a la base de datos.
password: su contraseña.
driverClassName: nombre completo de la clase con el driver JDBC
url: url de conexión a la base de datos
maxActive: número máximo de instancias activas simultáneas para esta base de
datos.
maxIdle: número máximo de conexiones simultáneas sin actividad.
maxWait: tiempo en milisegundos que esperará el sistema antes de generar una
excepción cuando se le solicita una nueva conexión y no haya ninguna
disponible.
validationQuery: Consulta SQL que puede usarse para comprobar la validez de
una conexión. Debe ser un SELECT y devolver al menos una fila.
4. Código de la aplicación
El código necesario para que nuestra aplicación acceda a una fuente de datos JDBC a
través de un pool de conexiones gestionado por Tomcat es el que sigue:
try {
// Obtenemos un contexto inicial
InitialContext ctx = new InitialContext();
// Obtenemos el contexto de nuestro entorno. La cadena
// "java:comp/env" es siempre la misma
Context envCtx = (Context) ctx.lookup("java:comp/env");
// Obtenemos una fuente de datos identificada con la cadena que
// le hemos asignado en los ficheros de configuración
DataSource ds = (DataSource) envCtx.lookup("jdbc/hsqldb");
// Ya podemos obtener una conexión y operar con ella normalmente
Connection conn = ds.getConnection();
} catch( Exception e ) {}
Descargar