Problemas con el pool de conexiones en tomcat

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Julio J.
Novat@
Mensajes: 2
Registrado: Mié Oct 25, 2006 12:06 pm

Problemas con el pool de conexiones en tomcat

Mensaje por Julio J. » Mié Oct 25, 2006 12:14 pm

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 podais
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:

javax.servlet.ServletException: El nombre jdbc no este asociado a este contexto
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:3753)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.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(NamingContext.java:769)
org.apache.naming.NamingContext.lookup(NamingContext.java:139)
org.apache.naming.NamingContext.lookup(NamingContext.java:780)
org.apache.naming.NamingContext.lookup(NamingContext.java:139)
org.apache.naming.NamingContext.lookup(NamingContext.java:780)
org.apache.naming.NamingContext.lookup(NamingContext.java:152)
org.apache.naming.SelectorContext.lookup(SelectorContext.java:136)
javax.naming.InitialContext.lookup(Unknown Source)
org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:354)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.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"
xmlns:xsi="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:

javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null'
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:3753)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.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.createDataSource(BasicDataSource.java:780)
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:356)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.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.

Julio J.
Novat@
Mensajes: 2
Registrado: Mié Oct 25, 2006 12:06 pm

Mensaje por Julio J. » Jue Oct 26, 2006 12:57 pm

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="jdbc:oracle: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.

Saludos.

Responder