Resultados 1 al 7 de 7

Tema: Problemas con el pool de conexiones en tomcat

  1. #1

    Predeterminado Problemas con el pool de conexiones en tomcat

    Estoy intentando cambiar una aplicacion web en jsp con conexiones a mysql para
    que use un pool de conexiones en lugar de establecer una conexión nueva en cada
    petición. He estado leyendo por internet y he hecho todo lo que he encontrado,
    pero me encuentro un error que no sé por qué se produce. Tal vez podaís
    ayudarme.
    La aplicación está instalada en el directorio C:\Archivos de programa\Apache
    Software Foundation\Tomcat 5.5\webapps\gpool. He añadido al server.xml el
    siguiente context:
    <Context path="/gpool" docBase="gpool" debug="0"
    reloadable="true" >
    <Resource
    name="jdbc/gpool" auth="Container"
    type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="gpool" password="pool"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1/gpool?autoReconnect=true">
    </Context>

    El fichero index.jsp incluye un fichero conectar.jsp, que realiza la conexión
    utilizando el pool con el siguiente código:
    <%@ page import="java.sql.*" %>
    <%@ page import="javax.naming.*" %>
    <%@ page import="javax.sql.*" %>
    <%
    Context ctx = new InitialContext();
    DataSource fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/gpool");
    con = fuenteDatos.getConnection();
    s = con.createStatement();
    %>

    En el directorio C:\Archivos de programa\Apache Software Foundation\Tomcat
    5.5\common\lib he copiado el fichero mysql-connector-java-3.1.10-bin.jar. Al
    reiniciar el tomcat y acceder a la página web me da el siguiente error:
    descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.
    excepción
    javax.servlet.ServletException: El nombre jdbc no este asociado a este contexto
    org.apache.jasper.runtime.PageContextImpl.doHandle PageException(PageContextImpl.java:848)
    org.apache.jasper.runtime.PageContextImpl.handlePa geException(PageContextImpl.java:781)
    org.apache.jsp.index_jsp._jspService(org.apache.js p.index_jsp:3753)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    causa raíz
    javax.naming.NameNotFoundException: El nombre jdbc no este asociado a este contexto
    org.apache.naming.NamingContext.lookup(NamingConte xt.java:769)
    org.apache.naming.NamingContext.lookup(NamingConte xt.java:139)
    org.apache.naming.NamingContext.lookup(NamingConte xt.java:780)
    org.apache.naming.NamingContext.lookup(NamingConte xt.java:139)
    org.apache.naming.NamingContext.lookup(NamingConte xt.java:780)
    org.apache.naming.NamingContext.lookup(NamingConte xt.java:152)
    org.apache.naming.SelectorContext.lookup(SelectorC ontext.java:136)
    javax.naming.InitialContext.lookup(Unknown Source)
    org.apache.jsp.index_jsp._jspService(org.apache.js p.index_jsp:354)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

    No sé lo que puede estar mal. Ésto lo he hecho sin crear ningún web.xml en la
    aplicación. También he intentado crear uno en el directorio C:\Archivos de
    programa\Apache Software Foundation\Tomcat 5.5\webapps\gpool\WEB-INF con el
    siguiente contenido:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <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/gpool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    </web-app>
    Pero entonces me da el siguiente error:
    descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.
    excepción
    javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null'
    org.apache.jasper.runtime.PageContextImpl.doHandle PageException(PageContextImpl.java:848)
    org.apache.jasper.runtime.PageContextImpl.handlePa geException(PageContextImpl.java:781)
    org.apache.jsp.index_jsp._jspService(org.apache.js p.index_jsp:3753)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

    causa raíz
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.create DataSource(BasicDataSource.java:780)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getCon nection(BasicDataSource.java:540)
    org.apache.jsp.index_jsp._jspService(org.apache.js p.index_jsp:356)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
    La versión de tomcat que estoy usando es la 5.5.9. Si me pudierais ayudar os lo
    agradecería.
    Saludos.

  2. #2

    Predeterminado Re: Problemas con el pool de conexiones en tomcat

    Ya lo he solucionado para mysql, pero ahora no consigo hacer que funcione con
    oracle.
    He creado el siguiente contexto en el server.xml:
    <Context path="/ganaderia" docBase="ganaderia" debug="0"
    reloadable="true" >

    <Resource
    name="jdbc/gpool" auth="Container"
    type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="gpool" password="gpool"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    url="jdbcracle:thin:@127.0.0.1:1521:GLOBALDB" />

    </Context>

    Y he hecho una página de prueba tan sencilla como esto:
    <html>
    <head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <%@ page import="java.sql.*" %>
    <%@ page import="javax.naming.*" %>
    <%@ page import="javax.sql.*" %>
    Opciones<br><br>
    <%
    try
    {
    Context initCtx = new InitialContext();
    Context ctx = (Context) initCtx.lookup("java:/comp/env");
    DataSource fuenteDatos = (DataSource) ctx.lookup("/jdbc/ganaderia");
    Connection con = fuenteDatos.getConnection();
    Statement s = con.createStatement();
    String query = "select idOpcion, texto from opciones";
    ResultSet r = s.executeQuery(query);
    String opcion, texto;
    while(r.next())
    {
    opcion = r.getString(1);
    texto = r.getString(2);%>
    <%= opcion + ": " + texto %><br><%
    }
    r.close();
    }
    catch(Exception e)
    {%>
    <%= "<br>Excepción: " + e + "<br>" %><%
    }%>
    </body>
    </html>

    No me da ningún error, pero la página sale vacía. Como si no leyera nada de la
    conexión. Lo he comprobado con el SQLPlus Worksheet y en la tabla hay datos.
    El web.xml está en su sitio y es el mismo que he usado para mysql.
    Si alguien sabe lo que está pasando se lo agradecería.

  3. #3

    Predeterminado Re: Problemas con el pool de conexiones en tomcat

    Me podrias decir que fue lo que hiciste para solucionar el problema con mysql, yo he intentado hacer el pool y nomas no queda. Segui el how to que se encuentra en la pagina de tomcat pero no funciona el error que obtengo es el de: javax.naming.NameNotFoundException: El nombre jdbc no este asociado a este contexto

  4. #4
    Novatill@
    Ubicación
    Tarragona
    Mensajes
    6

    Predeterminado Re: Problemas con el pool de conexiones en tomcat

    Yo tengo un fichero context.xml dentro del directorio META-INF con el siguiente contenido:

    Código:
    <Context path="/lab7" docBase="" reloadable="true" crossContext="true">
     
    	<Resource name="jdbc/demodb"
    		auth="Container"
    		type="javax.sql.DataSource"
    		maxActive="100"
    		maxIdle="30"
    		maxWait="10000"
    		username="root"
    		password="clave"
    		driverClassName="com.mysql.jdbc.Driver"
    		url="jdbc:mysql://localhost:3306/demodb?autoReconnect=true"/>
    
    
    </Context>

  5. #5

    Predeterminado Re: Problemas con el pool de conexiones en tomcat

    Hola!

    Por lo que he visto así de primeras, hexborg no había puesto en la url el puerto en que escuchaba mySql. Supongo que el problema venía de ahí.


    De todas maneras, por lo que me han enseñado, creo que es mejor tener una clase aparte que se encargue del tema de las conexiones, ya que los jsp sólo deberían encargarse de mostrar páginas dinámicas, llamando a métodos de las clases del modelo. Así, si hubiera problemas, basta modificar aquella clase donde éste se produzca.

    En mi clase Conexion, el código para obtener la conexión del pool es éste:
    try{
    // Conexión a partir del DataSource
    javax.naming.InitialContext c = new javax.naming.InitialContext();
    DataSource ds = (DataSource) c.lookup("java:comp/env/jdbc/baseDeDatos");
    con = ds.getConnection();
    } catch(Exception ex){
    throw new ExcepcionConexion(ex.toString());
    //throw new ExcepcionConexion("No se pudo conectar con la base de datos");
    }

    Como ves, lo de InitialContext no es exactamente igual en el tuyo, prueba éste a ver si te funciona.

  6. #6

    Predeterminado Re: Problemas con el pool de conexiones en tomcat

    El problema con mysql era que estaba poniendo el Context fuera de la sección Host en el server.xml y mi versión de tomcat no permitía eso.

    El problema con oracle era distinto. No sé lo que pasaba realmente pero
    se solucionaba reiniciando.

    Ojalá haya ayudado.

  7. #7

    Predeterminado Re: Problemas con el pool de conexiones en tomcat

    Buenas a todos,

    A quien pueda interesar, yo también he tenido el problema de "El nombre jdbc no este asociado a este contexto" y lo he solucionado de la siguiente manera.

    En el context.xml del servidor tomcat tenia un enlace al resource así:
    Código:
    <ResourceLink global="jdbc/miDataSource" name="jdbc/miDataSource" type="oracle.jdbc.pool.OracleDataSource"/>
    Luego, en la configuración de Spring recogia el supuesto resource con
    Código:
    <jee:jndi-lookup id="PoolId" jndi-name="java:comp/env/jdbc/miDataSource"/>
    Bien, pues el problema parece que era que no gusta el caracter "/" en el name (o donde sea). La solución que he encontrado es cambiar el nombre del resourceLink. Así queda el context.cml
    Código:
    <ResourceLink global="jdbc/miDataSource" name="miDataSource" type="oracle.jdbc.pool.OracleDataSource"/>
    y así el fichero de configuración de Spring
    Código:
    <jee:jndi-lookup id="PoolId" jndi-name="java:comp/env/miDataSource"/>
    Ahora me funciona, y todos contentos!

    Sé que este topic es viejo pero si alguien llega aquí buscando una solución espero que pueda servirle!

    Saludos

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •