Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/12/2008, 10:26
Avatar de SPAWN3000
SPAWN3000
 
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 3 meses
Puntos: 15
Pregunta Respuesta: Error - Pool de conexiones

También lo intente con este código y nada:

Estoy usando Apache Tomcat 6.0.18 Server.

En mi webapps(o directorio de aplicaciones):
Tengo una carpteta llamada: Pool

Pool
..+
..|
..|
....+ WEB-INF
....|
....|
....+
......web.xml
......+classes
.......|
.......|
.......TestPoolServlet.class

Código:
import java.io.IOException;
import java.io.PrintWriter;
import java.io.IOException;
import java.sql.*;
import javax.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
  
/** 
 * Servlet que usaremos para medir el rendimiento de conexiones con y sin pool de conexiones 
 * @author Carlos García. Autentia. 
 */  
//public class TestPoolServlet extends javax.servlet.http.HttpServlet {
public class TestPoolServlet extends HttpServlet {
      
    private DataSource source;  
  
    /*  
     * Realizamos las tareas de inizialización 
     */  
    public void init(ServletConfig config) throws ServletException {
        super.init();
          
        try {
            // Cargamos el Driver, para los accesos sin pool de conexiones.  
            Class.forName("com.sybase.jdbc3.jdbc.SybDriver");
              
            // Obtenemos el pool.  
            Context initCtx = new InitialContext();
            Context envCtx  = (Context) initCtx.lookup("java:comp/env");
            this.source     = (DataSource) envCtx.lookup("jdbc/Pruebas");         
        } catch (Exception e) {
            throw new ServletException(e);
        }
    }
    /*  
     * Realizamos las tarea de conexión con la base de datos. 
     */  
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
        Connection conn = null;
        
        response.setContentType("text/html");   // retornamos el tipo de respuesta
        PrintWriter out = response.getWriter();
        
        try {
            response.setStatus(HttpServletResponse.SC_OK);
              
            // ¿ Usamos el Pool de conexiones ?
            boolean usePool = "1".equals(req.getParameter("pool"));
            if (usePool){
                conn = source.getConnection();
                out.println("Prueba con Pool exitosa...");
            } else {
                conn = DriverManager.getConnection("jdbc:sybase:Tds:VISTAESCRITORIO:5000/Pruebas","sa","123456");
                out.println("Prueba sin Pool, no exitosa...");
            }
            if (conn!=null){
            	PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM usuarios");
                pstmt.setInt(1,10); // establecemos el entero
            }
        } catch (Exception ex){  
            response.getWriter().println(ex.getMessage());  
        } finally {  
            try {  
                conn.close();   // Liberamos recursos descartando las excepciones que se pudieran producir  
            } catch (Exception ex){}  
        }  
    }  
}
El web.xml, que se encuentre en mi directorio WEB-INF de mi proyecto.
Código:
<?xml version="1.0" encoding="utf-8"?>  
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
    <display-name>Test Performance Pool Servlet</display-name>  
      
    <servlet>  
        <servlet-name>TestPoolServlet</servlet-name>  
        <servlet-class>TestPoolServlet</servlet-class>  
    </servlet>  
      
    <servlet-mapping>  
        <servlet-name>TestPoolServlet</servlet-name>  
        <url-pattern>/TestPoolServlet</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/Pruebas</res-ref-name>  
        <res-type>javax.sql.DataSource</res-type>  
        <res-auth>Container</res-auth>  
    </resource-ref>  
      
</web-app>
La configuración de context.xml, creo que es el que se encuentra en el directorio conf. junto al archivo server.xml(O estoy equivocado?).
Código:
	<!--Mi linea de inicializacion persistencia-->
		<Resource name="jdbc/TestPoolServlet" auth="Container" type="javax.sql.DataSource"  
        username="sa" password="123456" driverClassName="com.sybase.jdbc3.jdbc.SybDriver"  
        url="jdbc:sybase:Tds:VISTAESCRITORIO:5000/Pruebas?autoReconnect=true" maxActive="8" maxIdle="8" />
	<!--Fin linea de persistencia-->
El error que me retorna es el siguiente:
Prueba sin Pool, no exitosa... JZ0SB: indice de par?metro fuera de rango: 1.

Naturalmente, deduzco que ingreso por el pool de conexiones si no que uso el tipo normal de conexión por eso el indice esta fuera del rango.
Pero por que no crea esta conexión. Ya copie el conector Jconn3.jar en la carpeta lib de tomcat. Y también lo copie en una carpeta lib dentro de WEB-INF