Pool de conexiones a BBDD con struts

1
46913

Pool de Conexiones en Struts

Cuando construimos un Web en Java y tenemos el hosting en instalaciones
compartidas es muy probable que
queramos tener el menor número 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 cuan es posible que no tengáis acceso….

Una solución para trabajar del modo más autónomo 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 través 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 creación de un framework empresarial
pero encontrareis algunos puntos a mejorar y, además, creo que la
evolución de la tecnología de PORTALES (ya os hablaremos sobre esto…
tengo un tutorial en el horno), constituirá la verdadera referencia de
desarrollo Web en unos meses/años.

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 líneas del struts-config.xml,
la referencia al pool (para saber donde meterlo mirar la DTD del XML)

<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 podéis encontrar
en:

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

Creamos una acción de prueba

package appbasica;

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

/**
 * @author Roberto Canales rcanales@autentia.com
 */
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 
            
            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>
</html>

Introducimos la entrada en el fichero de configuración 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 fácil verdad…. jejeje … aunque todo es fácil 
hasta que te pones a hacerlo y te tiras dos mañanas porque a alguien se le
olvido algún detalle en la documentación ;-).

Bueno, al final no voy a tener excusa para no pasar el Web
www.adictosaltrabajo.com a Java
(ahora está en PHP)…….

Feliz Navidad

 

1 COMENTARIO

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