Pool de Conexiones y Tomcat5

3
113419

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

Sobre
el Autor ..

3 COMENTARIOS

  1. Genial, 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!

  2. Quiero hacer un pool de conexiones en php y aun busco pero no encuentro nada.Por eso estaba pensando si es posible aprovechar el pool de conexiones de tomcat (incrementa el rendimiento porque ya no abren conexiones para realizar consultas por cada usuario)y enviar las consultas hechas desde php para mostrarlas en una pagina desde el servidor tomcat?

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad