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>