Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007. Twitter: @rcanalesmora
Autor del Libro: Informática profesional, las reglas no escritas para triunfar en la empresa
Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí
Regístrate para votar
Instalación de Tomcat 5 y Pool de Conexiones
Los servidores de aplicaciones están en constante evolución. Aparte de para arreglar posibles problemas, también para dar soporte a las nuevas versiones de las especificaciones de Java.
| Especificación Servlet/JSP | Versión de Tomcat |
|---|---|
| 2.4/2.0 | 5.0.12 Beta |
| 2.3/1.2 | 4.1.27 |
| 2.2/1.1 | 3.3.1a |
Vamos a descargarnos la última versión disponible de Tomcat y mostraros algunas de sus características.
No nos vamos a quedar aquí sino que os vamos a mostrar como se configura para utilizar un Pool de conexiones y optimizar de este modo los accesos a la base de datos. Como siempre ... usaremos MySQL.
Antes que nada, vamos al Web y pinchamos en el botón de descarga.
Descarga
http://jakarta.apache.org/tomcat/index.html
Nos descargamos el ejecutable y lo lanzamos.

Arranca la instalación de Tomcat 5

Seleccionamos la configuración normal

Vemos que el directorio tradicional de instalación ha cambiado

Seleccionamos un usuario y password para administración

Elegimos el trayecto de la versión de Java a utilizar.

Finalizamos y leemos las notas de versión

Comprobación
Ahora probamos que funciona

Administración
En la parte de administración tenemos unos enlaces para ver el Estado (status)

Si pinchamos el segundo enlace, podemos ver la administración

Donde podemos administrar los ficheros de configuración de un modo gráfico

Y la última opción es el Manager ... donde podemos desplegar y recargar las aplicaciones Web

Pool de Conexiones
Ahora, no nos vamos a quedar solo en la configuración..... vamos a hacer un ejemplo que seguro que os gustará.... la configuración de un Pool de conexiones a MySQL.
Debemos
- Registrar el Pool en el fichero server.xml
- Dejar a mano las clases del Driver
- Crear nuestro servlet
- Hacer accesible el Pool al servlet
- Crear la tabla en base de datos
Com vereis, es sencillo y rápido
Server.xml
Lo primero que hacemos, es modificar el fichero server.xml
C:\Program Files\Apache Software Foundation\Tomcat 5.0\conf\server.xml
| <Context path="/tomcat5"
docBase="tomcat5"
debug="0"
reloadable= "true" > <ResourceParams name="jdbc/tutoriales"> <parameter> <name>username</name> <value>root</value> </parameter> <parameter> <name>password</name> <value></value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost/tutoriales</value> </parameter> </ResourceParams></Context> |
Jar del Driver JDBC
Ahora introducimos el Jar del Driver Jdbc de MySQL en el directorio adecuado
C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\mysql-connector-java-3.0.7-stable-bin.jar
El Servlet
Debemos crear nuestra aplicación. Creemos nuestro Servlet (poolBaseDatos.java).
Este código ya tiene mejor pinta..... y le falta muy poquito para ser profesional ..... solo faltaría gestionar un poquito mejor los errores y ...... sobre todo .... separar la lógica de negocio de la de presentación.
import java.io.*; import java.sql.*; import javax.sql.*; import javax.servlet.*; import javax.servlet.http.*; import javax.naming.*; public class poolBaseDatos extends HttpServlet {
private DataSource fuenteDatos = null;
public void init(ServletConfig config) throws ServletException
{
try
{
// recuperamos el contexto inicial y la referencia a la fuente de datos
Context ctx = new InitialContext();
fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/tutoriales");
}
catch (Exception e)
{
throw new ServletException("Imposible recuperar java:comp/env/jdbc/tutoriales",e);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
Connection con = null; // conexion parcial
response.setContentType("text/html"); // retornamos el tipo de respuesta
PrintWriter out = response.getWriter();
out.println("Prueba del Pool de Objetos");
out.println("Buscamos tutorial con sentencias preparadas");
try {
out.println("Probamos a recuperar conexión");
synchronized (fuenteDatos)
{
con = fuenteDatos.getConnection(); // cogemos la conexion
}
if(con == null)
{
out.println("Error al recuperar la conexion, es nula");
throw new ServletException("Problemas con la conexion");
}
out.println("Preparamos la consulta");
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM tutoriales WHERE id < ?");
pstmt.setInt(1,10); // establecemos el entero
ResultSet results = pstmt.executeQuery();
while (results.next())
{
String id = results.getString(1);
String titulo = results.getString(2);
out.println("El titulo es " + titulo + " para id " + id + "");
}
}
catch (Exception e)
{
out.println("Error al procesar consulta " + e.getMessage());
}
finally // pase lo que pase retornamos la conexion
{
try
{
con.close();
}
catch (Exception e)
{
out.println("Error en proceso " + e.getMessage());
}
}
out.println("-Fin-"); // cerramos la respuesta
out.close(); // Cerramos buffer
}
}
|
Descriptor de la Web APP
Ahora, necesitamos un fichero descriptor ... web.xml
| <?xml version="1.0" encoding="UTF-8"?> <!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> <servlet> <servlet-name>poolBaseDatos</servlet-name> <servlet-class>poolBaseDatos</servlet-class> </servlet> <servlet-mapping> <servlet-name>poolBaseDatos</servlet-name> <url-pattern>/servlet/poolBaseDatos</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> </welcome-file-list> <resource-ref> <res-ref-name>jdbc/tutoriales</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app> |
La tabla en la Base de Datos
Creamos una tabla e insertamos datos de los tutoriales

Ahora solo nos hace falta desplegar la aplicación ...... por lo que creamos nuestro directorio y copiamos los ficheros
C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\tomcat5
| WEB-INF │ web.xml │ ├───classes │ poolBaseDatos.class │ poolBaseDatos.java │ └───lib |
Otra solución es comprimir la estructura anterior en un fichero WAR y dejarlo caer en
C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps
El resultado
Fijaros bien el la URL ..... y comprobad el rendimiento ... os sorprendereis.

Ya hemos dado otro pasito ..... aunque el camino cada vez es mas largo y con más bifulcaciones ....
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.
Comentarios
-
2010-01-02 - 23:31:35jcarmonaloechesGenial, un diez en utilidad y explicación, y muy animado este año a seguir siguiendo vuestros tutoriales.
¡Por cierto feliz año nuevo a todos!
-
Adaflex2009-09-08 - 11:56:03 PMHola, tengo una aplicación para Pocket PC que funciona con SQLServer 2000, VB.Net y eclipse. Todo marcha perfectamente, pero ahora me piden que cambie la conexión para que acceda a la base de datos en Firebird en vez de SQLServer, dónde puedo configurar ese cambio? Tengo poco programando para Pocket
-
wlanderz2007-09-21 - 10:44:51 PMmuy bueno
-
Martin2007-08-31 - 09:01:14 PMExcelente el curso sobre la configuracion muy bien detallado
-
Ruben Martinez2007-04-30 - 12:10:54 PMMuchas gracias por los tutoriales, me sacais de muchos problemas. Un saludo.
-
Marlon J Durán A2006-12-26 - 05:12:21 PMBuenos días. He hecho todo con execepción sel servidor de la db que estoy utilizando(firebird). Al ejecutar el servlet me genera el siguiente error y no he podido conseguir su causa. Estado HTTP 405 - El Metodo HTTP POST no es soportado por esta URL -------------------------------------------------------------------------------- type Informe de estado mensaje El Metodo HTTP POST no es soportado por esta URL descripción El método HTTP especificado no está permitido para el recurso requerido (El Metodo HTTP POST no es soportado por esta URL). -------------------------------------------------------------------------------- Apache Tomcat/5.5.20 Gracias.
-
uno2006-04-11 - 12:43:55 PMeres un crá killo
-
Pedro Díaz2006-03-28 - 12:04:13 AMMe viene de perlas. Soy profe de Java "migrado" a J2EE y esto es un infierno. Siempre había utilizado conexiones a BBDD "manuales" porque los ejemplos de clase no son comparables a los reales y no sabía cómo acometer esto de los pools de conexiones. El ejemplo es ideal; pero además de eso me tengo que estrenar con Struts y EJB's. Ya veremos cómo se me dan a base de trasnochadas... Gracias.








