Estás en:

informaciónDESARROLLADO POR:
icono_twiter icono_linkedin icono_linkedin icono_xing

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í

Fecha de publicación del tutorial: 2003-10-13
Tutorial visitado 87.907 veces87.907
Descargar el tutorial en PDF


Regístrate para votar
Share |
Instalación de Tomcat 5 Prueba del Pool de Objetos

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

Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.


(Sólo para usuarios registrados)

» Registrate y accede a esta y otras ventajas «

Comentarios

  1. 2010-01-02 - 23:31:35
    jcarmonaloeches

    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!

  1. Adaflex
    2009-09-08 - 11:56:03 PM

    Hola, 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

  2. wlanderz
    2007-09-21 - 10:44:51 PM

    muy bueno

  3. Martin
    2007-08-31 - 09:01:14 PM

    Excelente el curso sobre la configuracion muy bien detallado

  4. Ruben Martinez
    2007-04-30 - 12:10:54 PM

    Muchas gracias por los tutoriales, me sacais de muchos problemas. Un saludo.

  5. Marlon J Durán A
    2006-12-26 - 05:12:21 PM

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

  6. uno
    2006-04-11 - 12:43:55 PM

    eres un crá killo

  7. Pedro Díaz
    2006-03-28 - 12:04:13 AM

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