JSP (Java Server Page) - Problema con el pool de conexiones en tomcat

 
Vista:

Problema con el pool de conexiones en tomcat

Publicado por Julio J. (3 intervenciones) el 25/10/2006 11:54:36
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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con el pool de conexiones en tomcat

Publicado por neossoftware (70 intervenciones) el 25/10/2006 18:14:56
No me gusta responder con preguntas, pero ya copiaste el driver a la ruta:

$CATALINA_HOME/common/lib.

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con el pool de conexiones en tomcat

Publicado por Julio J. (3 intervenciones) el 25/10/2006 18:48:00
Muchas gracias por responder, neossoftware. El driver está metido en esa ruta y
ya lo he hecho funcionar. El problema era que el context no estaba puesto en su
sitio en el fichero server.xml, pero ya lo he solucionado.

Muchísimas gracias. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con el pool de conexiones en tomcat

Publicado por Julio J. (3 intervenciones) el 26/10/2006 12:41:56
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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con el pool de conexiones en tomcat

Publicado por neossoftware (70 intervenciones) el 26/10/2006 16:19:25
Prueba con esto

1. server.xml configuration

<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
username="scott" password="tiger" maxActive="20" maxIdle="10"
maxWait="-1"/>

2. web.xml configuration
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

3.Code Sample

Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
//etc.

Ten cuidado con los nombres del sid y del tnsname.

Lo que te recomendaria es que hicieras una conexion a Oracle desde un main para verificar que la configuracion de Red de Oracle esta correcta porque generalmente desde ahi son los errores.

Saludos!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con el pool de conexiones en tomcat

Publicado por Marisol (1 intervención) el 29/05/2007 22:24:11
Hola yo he hecho exactamente lo mismo que dice neossoftware, solo que yo trabajo con sqlServer, pero desafortunadamente nada que me funciona.

A mi me sale el error de que el URL es nulo, es como si no accesara lo que esta en la etiqueta "Resource", por otro lado no estoy segura de donde lo tengo que uibar ya que estoy trabanjando con tomcat 6 y en el server.xml se trabaja es con la etiqueta "GlobalNamingResources" y es dentro de ella donde defino el contenido de la etiqueta "Resource".

Si alguien ya paso por esa experiencia y puede colaborarme, le estaria agradecida, ya que le he dedicado mucho tiempo al asunto y no he encontrado la solución. En la info que he encontrado siempre dice lo mismo, pero igual no me funciona.

Por favor colaborenme.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar