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 <web-app> <servlet> |
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 ….
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!
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?
Como siempre, sus tutoriales son excelentes