Ficheros de Configuración
Ya estamos listos para crear los ficheros de configuración de nuestra aplicación
Librería
:
Libreria/WEB-INF/web.xml
Libreria/WEB-INF/web.xml es el descriptor de despliegue para la aplicación Web. Contiene dos parámetros clave.
El parámetro listener identifica la clase Java del oyente libreria.ContextListener, al que se llamará durante la arrancada y parada de la aplicación.
<listener>
<listener-class>listener.ContextListener</listener-class>
</listener>
El parámetro welcome-file-list controla el punto de entrada a la aplicación. El siguiente código selecciona la página Index.jsp como único punto de entrada a la aplicación Librería:
<welcome-file-list>
<welcome-file>Index.jsp</welcome-file>
</welcome-file-list>
Propósito del Fichero web.xml
Es el descriptor de despliegue de la aplicación y está contenido en el directorio WEB-INF. Define varios parámetros que son usados cuando se despliega la aplicación en el contenedor de Servlets/JSP Tomcat.
display-name
Configura el nombre de la aplicación web que se mostrará en los listados de Tomcat. La siguiente línea selecciona este parámetro de la aplicación Libreria como "Aplicación Web de Libreria":
<display-name>Aplicación Web de Libreria</display-name>
description
Configura la descripción de la aplicación Web. La siguiente línea selecciona la descripción de la aplicación Libreria como "Esta aplicación mantiene una base de datos de libros.":
<description>Esta aplicación mantiene una base de datos de libros.</description>
listener
Configura la aplicación web para que se ejecute un oyente de contexto servlet cuando se arranque o se pare la propia aplicación Web. Las siguiente líneas seleccionan que el oyente de contexto servlet de la aplicación Librería sea libreria.ContextListener
<listener>
<listener-class>libreria.ContextListener</listener-class>
</listener>
welcome-file-list
Configura el punto de entrada a la aplicación web. Las preferencias por defecto para este parámetro se seleccionan en el fichero conf/web.xml de Tomcat. Usando nuestro editor de texto, podemos echar una mirada a la parte final de nuestro fichero conf/web.xml. Deberíamos ver algo como esto:
<!-- ==================== Default Welcome File List ===================== -->
<!-- When a request URI refers to a directory, the default servlet looks -->
<!-- for a "welcome file" within that directory and, if present, -->
<!-- to the corresponding resource URI for display. If no welcome file -->
<!-- is present, the default servlet either serves a directory listing, -->
<!-- or returns a 404 status, depending on how it is configured. -->
<!-- -->
<!-- If you define welcome files in your own application's web.xml -->
<!-- deployment descriptor, that list *replaces* the list configured -->
<!-- here, so be sure that you include any of the default values that -->
<!-- you wish to include. -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>Home.jsp</welcome-file>
</welcome-file-list>
Es posible realizar cambios globales en nuestra configuración de Tomcat modificando el fichero conf/web.xml, pero no recomiendo hacerlo. Es mucho mejor seleccionar las preferencias en el parámetro welcome-file-list de la propia aplicación. Las siguiente líneas seleccionan el punto de entrada de la aplicación Librería como Index.jsp
<welcome-file-list>
<welcome-file>Index.jsp</welcome-file>
</welcome-file-list>
Código Fuente Completo del Fichero web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Aplicación Web de Libreria</display-name>
<description>Esta aplicación mantiene una base de datos de libros.</description>
<listener>
<listener-class>libreria.ContextListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>Index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Libreria.xml
Propósito del Fichero Libreria.xml
El fichero Libreria.xml contiene los detalles del "contexto" de la aplicación Libreria, es decir, los parámetros que Tomcat usará cuando ejecute la aplicación, entre ellos la definición del DataSource a utilizar, o el tipo de "Log" que va a tener esta aplicación, por ejemplo.
Este código define el path de contexto, el documento base, el nivel de depuración, el marcador de recargable, y el marcador de contexto cruzado:
<Context path="/Libreria" docBase="Libreria" debug="1" reloadable="true" crossContext="true">
... Aquí va la definición del Logger ...
... Aquí va la definición del DataSource ...
</Context>
Lo más importante a observar en este trozo de código son los atributos path y docBase, pero veamos una breve descripción de cada uno de ellos.
-
path indica el path que utilizaremos para acceder a nuestra aplicación una vez instalada en Tomcat y formará parte de la URI para acceder a la aplicación desde nuestro navegador, por ejemplo http://localhost:8080/Libreria en nuestro caso.
-
docBase también conocido como Raíz del Documento se utiliza para indicar el directorio donde van a residir los ficheros de la aplicación cuyo contexto estamos configurando. Nota: Si nuestra aplicación se encuentra empaquetada en un fichero WAR, en el atributo docBase deberemos poner el path completo del fichero .war.
-
debug indica el nivel de log de esta aplicación, cuando mayor sea el número que pongamos aquí, mayor será el nivel de detalle que veremos en los ficheros de log.
-
reloadable especifica si queremos que Tomcat monitorice cada cierto tiempo las clases de esta aplicación para ver si han cambiado, pero debemos tener en cuenta que esta operación consume muchos recursos y que puede ser muy útil para entornos de prueba pero puede ser una mala idea para entornos de producción.
-
crossContext indica si queremos que las llamadas a ServletContext.getContext() dentro de esta aplicación sobre otras aplicaciones Web que se ejecuten en el mismo host virtual devuelvan siempre un request dispatcher válido. En entornos de alta seguridad se puede seleccionar a false para hacer que getContext() siempre devuelva null.
Hay muchos otros atributos del elemento context, podrás encontrar más información sobre ellos en el fichero Context.html que viene en la documentación de Tomcat, en el directorio C:\Archivos de programa\Apache Group\Tomcat 4.1\webapps\tomcat-docs\config\
Definición de Logger
Este código define un objeto Logger como una clase org.apache.catalina.logger.FileLogger. En el directorio logs de Tomcat se creará un fichero log llamado localhost_Libreria_log.YYYY-MM-DD.txt donde YYYY-MM-DD es la fecha del log:
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_Libfreria_log." suffix=".txt" timestamp="true"/>
Definición del DataSource
Este código define un Resource llamado jdbc/biblioteca como una clase javax.sql.DataSource:
<Resource name="jdbc/biblioteca" auth="Container" type="javax.sql.DataSource"/>
Este código define el ResourceParams llamado jdbc/biblioteca como una clase org.apache.commons.dbcp.BasicDataSourceFactory:
<ResourceParams name="jdbc/biblioteca">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
... aquí van los parámetros de la base de datos ...
... aquí van los parámetros del Repositorio de Conexiones ...
</ResourceParams>
Parámetros de la Base de Datos
url
La URL de la base de datos url = jdbc:mysql://localhost:1306/biblioteca?autoReconnect=true. Por defecto, MySQL cierra las conexión inactivas después de 8 horas. Si esto sucede, usando autoReconnect=true se hará que Tomcat se reconecte automáticamente. Otras bases de datos podrían funcionar de forma diferente:
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:1306/biblioteca?autoReconnect=true</value>
</parameter>
driverClassName
El nombre de la clase del driver JDBC, driverClassName = org.gjt.mm.mysql.Driver que es el nombre de la clase para el driver
MySQL Connector/J JDBC
.
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
Nota: Recuerda que debes situar el fichero JAR mysql-connector-java-2.0.14-bin.jar en el directorio ..\common\lib de Tomcat.
username
El nombre de usuario para acceder a la base de datos MySQL username = mysqlusername.
<parameter>
<name>username</name>
<value>mysqlusername</value>
</parameter>
password
La password MySQL para acceder a la base de datos, password = mysqlpassword.
<parameter>
<name>password</name>
<value>mysqlpassword</value>
</parameter>
Parámetros del Repositorio de Conexiones
maxActive
El número máximo de conexiones en el repositorio, maxActive = 100. Seleccionamos maxActive = 0 para que no haya limite. Debemos asegurarnos de configurar max_connections lo suficientemente grande para manejar todas las conexiones a nuestra base de datos.
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
maxIdle
El número máximo de conexiones inactivas a retener en el repositorio, maxIdle = 30. Seleccionamos maxIdle = 0 para que no haya límite.
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
maxWait
El tiempo máximo a esperar para obtener una conexión disponible [en milisegundos], maxWait = 10000. Seleccionamos maxWait = -1 para esperar indefinidamente. Si hay un timeout, se lanza una Exception.
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
removeAbandoned
Si removeAbandoned = true entonces cuando haya pocas conexiones disponibles en el repositorio de conexiones se recuperará y reciclará cualquier conexión abandonada que se encuentre. El valor por defecto es removeAbandoned = false.
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
removeAbandonedTimeout
El número de segundos que una conexión tiene que estar inactiva hasta que sea considerada abandonada por el repositorio de conexiones. removeAbandonedTimeout = 300 es el tiempo por defecto.
<parameter>
<name>removeAbandonedTimeout</name>
<value>300</value>
</parameter>
logAbandoned
Si logAbandoned = true el repositorio de conexiones guardará un seguimiento de pila del código que abandonó un recurso de conexión.
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
Código Fuente Completo del fichero Libreria.xml
<Context path="/Libreria" docBase="Libreria"
debug="1" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_Libreria_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/biblioteca" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/biblioteca">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:1306/biblioteca?autoReconnect=true</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value>mysqlusername</value>
</parameter>
<parameter>
<name>password</name>
<value>mysqlpassword</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>300</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
</ResourceParams>
</Context>