Pool de Conexiones en Struts

Este articulo es cortesia de la Web Adictos Al trabajo.

Cuando construimos un Web en Java y tenemos el hosting en instalaciones compartidas (como nuestro caso que lo tenemos en http://www.enredados.com/), es muy probable que queramos tener el menor nmero de dependencias con el personal administrativo de estos sistemas.....

Para constituir un pool de conexiones en Tomcat, hace falta tocar el fichero server.xml ... al cual es posible que no tengis acceso....

Una solucin para trabajar del modo ms autnomo posible consiste en utilizar vuestro propio pool de conexiones.

En el casos de Struts, ste nos proporciona el soporte para poder gestionar el Pool a travs del fichero struts-config.xml.

  • Nota: Si veis que hacemos muchas referencias a struts, no es porque sea la panacea universal. Creo que es un buen punto de comienzo para la creacin de un framework empresarial pero encontrareis algunos puntos a mejorar y, adems, creo que la evolucin de la tecnologa de PORTALES (ya os hablaremos sobre esto... tengo un tutorial en el horno), constituir la verdadera referencia de desarrollo Web en unos meses/aos.

Vamos a ir al Web de referencia y seguir las instrucciones pero ........ se les ha olvidado algunos detalles que os comentamos aqu...

Lo primero, introducir en las primeras lineas del struts-config.xml, la referencia al pool (para saber donde meterlo mirar la DTD del XML)

Configurar el pool
<data-sources>
  <data-source type="org.apache.commons.dbcp.BasicDataSource">
     <set-property property="driverClassName" value="com.mysql.jdbc.Driver" />
     <set-property property="url" value="jdbc:mysql://localhost/tutoriales" />
     <set-property property="username" value="root" />
     <set-property property="password" value="" />
     <set-property property="maxActive" value="10" />
     <set-property property="maxWait" value="5000" />
     <set-property property="defaultAutoCommit" value="false" />
     <set-property property="defaultReadOnly" value="false" />
     <set-property property="validationQuery" value="SELECT COUNT(*) FROM tutoriales" />
  </data-source>
</data-sources>

Para que funcione correctamente, hay que descargarse unos ficheros de soporte (esto es lo que no esta demasiado completo)

Estar seguros de tener estos ficheros en vuestro directorio lib

El nico con un poco de trampa es en struts-legacy.jar, que podis encontrar en:

http://apache.tsuren.net/dist/jakarta/struts/struts-legacy/

Creamos una accin de prueba

package appbasica;

import org.apache.struts.action.*;
import java.sql.*;
import javax.sql.*;

/**
 * @author Roberto Canales [email protected]
 */
public class poolAction extends Action {

    /** Creates a new instance of LoginAction */
    public poolAction() {
    }

    public org.apache.struts.action.ActionForward execute(
          org.apache.struts.action.ActionMapping actionMapping,
          org.apache.struts.action.ActionForm actionForm,
          javax.servlet.http.HttpServletRequest httpServletRequest,
          javax.servlet.http.HttpServletResponse httpServletResponse)
            throws java.lang.Exception {

        java.util.Vector noticias = Noticia.getNoticiasPrueba();
        httpServletRequest.setAttribute("noticias",  noticias);

        java.sql.Connection con = null;

        String resultado = "";

        try {
            javax.sql.DataSource dataSource = getDataSource(httpServletRequest);
            con = dataSource.getConnection();
            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);
                resultado = resultado + "El titulo es " +
                  titulo + " para id " + id + "";
            }

            httpServletRequest.setAttribute("listado",  resultado);

        } catch (java.sql.SQLException sqle) {
            getServlet().log("Connection.process", sqle);
        }
        finally {
            try {
                con.close();
            } catch (java.sql.SQLException e) {
                getServlet().log("Connection.close", e);
            }
        }

        ActionForward retValue = actionMapping.findForward("respool");
        return retValue;
    }

}

Y un JSP (que incluye las cabeceras y pies)

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<html>
<head>
<title>Muestra de uso de Pools de conexiones en Struts</title>
</head>
<body>
<center>

<bean:include id="cabecera" page="cabecera.jsp"/>
<bean:write name="cabecera" filter="false"/>

<h2>La informacion recuperada de la bbdds es:</h2>
<hr width="60%"/><bean:write name="listado" filter="false"/>

<bean:include id="pie" page="pie.jsp"/>
<bean:write name="pie" filter="false"/>

</center>
</body>
</html>

Introducimos la entrada en el fichero de configuracin struts-config.xml

<action path="/pool" parameter="accion" type="appbasica.poolAction"
 name="emptyForm" validate="false">
      <forward name="respool" path="/pages/respool.jsp" redirect="false"/>
</action>

Si vemos la base de datos

Y ya estamos funcionando

Pues si que es fcil verdad.... jejeje ... aunque todo es fcil hasta que te pones a hacerlo y te tiras dos maanas porque a alguien se le olvido algn detalle en la documentacin ;-).

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
SIGUIENTE ARTÍCULO

¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.