Foros del Web » Programación para mayores de 30 ;) » Java »

Error Pool de Conexiones - java.lang.NullPointerException

Estas en el tema de Error Pool de Conexiones - java.lang.NullPointerException en el foro de Java en Foros del Web. Estoy intentando hacer un pool de conexiones y me sale el siguiente error: Código: Estado HTTP 500 - -------------------------------------------------------------------------------- type Informe de Excepción mensaje descripción ...
  #1 (permalink)  
Antiguo 17/06/2011, 09:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Error Pool de Conexiones - java.lang.NullPointerException

Estoy intentando hacer un pool de conexiones y me sale el siguiente error:

Código:
Estado HTTP 500 - 

--------------------------------------------------------------------------------

type Informe de Excepción

mensaje 

descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.

excepción 

java.lang.NullPointerException
	AccesoBD.doGet(AccesoBD.java:53)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Dejo el código a ver si alguien sabe dónde puede estar el error...

Context.xml

Código:
<?xml version="1.0" encoding="utf-8"?>

<Context path="/CasaRural" docBase="CasaRural" debug="5" reloadable="true" crossContext="true">

	<Resource name="jdbc/AccesoBD" auth="Container"
	type="javax.sql.DataSource" maxActive="100"
	maxIdle="30" maxWait="10000" username="admin" password="1234" driverClassName="com.mysql.jdbc.Driver" 
	url="jdbc:mysql://localhost:3306/CasaRural"/>

</Context>
Web.xml

Código:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/dtd/web-app_2_3.dtd">


<servlet>
	<servlet-name>AccesoBD</servlet-name>
	<servlet-class>AccesoBD</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>AccesoBD</servlet-name>
	<url-pattern>/AccesoBD</url-pattern>
</servlet-mapping>

<resource-ref>
	<res-ref-name> jdbc/AccesoBD </res-ref-name>
	<res-type> javax.sql.DataSource </res-type>
	<res-auth> Container </res-auth>
</resource-ref>

</web-app>
AccesoBD.java

Código:
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

public class AccesoBD extends HttpServlet {
    private DataSource fuenteDatos = null;

    public void init(ServletConfig conf) throws ServletException
    {
		super.init(conf);

        try
        {
            // recuperamos el contexto inicial y la referencia a la fuente de datos
            Context ctx = new InitialContext();
            fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/AccesoBD");
			
		}
        catch (NamingException e)
        {
            e.printStackTrace();
        }
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {

        response.setContentType("text/html");   // retornamos el tipo de respuesta
		Connection con = null; // conexion parcial
		synchronized (fuenteDatos)
		{
        	try {

                con = fuenteDatos.getConnection(); // cogemos la conexion
            } catch (SQLException e){
				
           		e.printStackTrace();
            }
		}

        PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<h1> Conexión realizada </h1>");
		out.println("</body>");
		out.println("</html>");
		
        try
            {
                con.close();
            }
            catch (SQLException e)
            {
                out.println("Error en proceso " + e.getMessage());
				e.printStackTrace();
            }
        }
       public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
		doGet(request, response);
    }
}
Por favor, agradecería mucho una ayuda ya que me urge. Gracias
  #2 (permalink)  
Antiguo 18/06/2011, 06:55
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Pero que pasa en este foro?

A mí nunca me ayuda nadie!

Por favor, que alguien me eche una mano...

Sé que no consigue conectar pero no entiendo por qué....
  #3 (permalink)  
Antiguo 18/06/2011, 07:17
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 2 meses
Puntos: 12
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Parece que el problema está aquí:

con.close();

Por el tipo de excepción parece que no hay conexión que cerrar.

Comenta esa línea a ver si lo demás funciona.
  #4 (permalink)  
Antiguo 18/06/2011, 07:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Lo primero, muchiiiiiiiiiiiiiiiiiisimas gracias por contestar. Aleluya, jeje.
Lo segundo:
He hecho otro .java basado en el otro pero con comentarios, aquí dejo el código

Código:
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

public class AccesoBD extends HttpServlet {
private DataSource fuenteDatos = null;

    public void init(ServletConfig config) throws ServletException
    {
        try
        {
            // recuperamos el contexto inicial y la referencia a la fuente de datos
            Context ctx = new InitialContext();
            fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/AccesoBD");
        }
        catch (Exception e)
        {
            throw new ServletException("Imposible recuperar java:comp/env/jdbc/AccesoBD",e);
        }
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        Connection con = null; // conexion parcial

        response.setContentType("text/html");   // retornamos el tipo de respuesta
        PrintWriter out = response.getWriter();

        out.println("Prueba del Pool de Objetos");
        out.println("Buscamos tutorial con sentencias preparadas");

        try {

           out.println("Probamos a recuperar conexión");

            synchronized (fuenteDatos)
            {
                con = fuenteDatos.getConnection(); // cogemos la conexion
            }

            if(con == null)
            {
                out.println("Error al recuperar la conexion, es nula");
                throw new ServletException("Problemas con la conexion");
            }

            out.println("Preparamos la consulta");

            PreparedStatement pstmt = con.prepareStatement("SELECT * FROM casarural");
            pstmt.setInt(1,10); // establecemos el entero
            ResultSet results = pstmt.executeQuery();

            while (results.next())
            {
                String id = results.getString(1);
                String nombre = results.getString(2);
                out.println("El nombre es " + nombre + " para id " + id + "");
            }
        }
        catch (Exception e)
        {
            out.println("Error al procesar consulta " + e.getMessage());
        }
        finally  // pase lo que pase retornamos la conexion
        {
            try
            {
                con.close();
            }
            catch (Exception e)
            {
                out.println("Error en proceso " + e.getMessage());
            }
        }
        out.println("-Fin-");  // cerramos la respuesta
         out.close();  // Cerramos buffer
    }
}
Y me sale:

Código:
Prueba del Pool de Objetos 
Buscamos tutorial con sentencias preparadas 
Probamos a recuperar conexión 
Error al procesar consulta Cannot create JDBC driver of class '' for connect URL 'null' Error en proceso null -Fin-
  #5 (permalink)  
Antiguo 18/06/2011, 07:38
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 1 mes
Puntos: 15
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

1. Prueba hacer un test del pool de conexiones.
2. Si utilizas glassfish, prueba adicionar la libreria al servidor...
luego nuevamente hacer un test de ping en el servidor.
  #6 (permalink)  
Antiguo 18/06/2011, 07:55
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Gracias por contestar tan rápido.

Estoy empezando un poco con esto del java y no sé como se hace el test de pool de conexiones...

Utilizo Tomcat 7
  #7 (permalink)  
Antiguo 18/06/2011, 10:59
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Hola,

Tomcat no muestra los errores completos en la ventana del navegador, lleva un log con todos los errores que se presentan en la aplicación, porque si se presentara un error en tu aplicación no queremos que el usuario final se entere de muchos detalles que posiblemente estás loggeando.

Busca la carpeta:
C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs
O la ubicación donde esté instalado Tomcat.

Después abre el archivo:
stdout_20110617.log
Reemplazando la fecha en año, mes y día del archivo que contenga el error.

Busca los errores que te muestra detalladamente Tomcat, si aparece algo así:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
Es que no has agregado la librería MySQL al proyecto.

Saludos,

ps:

Glassfish también lleva un log de errores, por lo que lo más aconsejable es observar detenidamente dicho log para ubicar el error fácilmente; aunque está en otra ubicación y es más fácil observarlo con el administrador de Glassfish.
  #8 (permalink)  
Antiguo 18/06/2011, 11:10
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

He abierto el archivo que me has comentado y pone:

Código:
Cannot create JDBC driver of class '' for connect URL 'null'
java.lang.NullPointerException
	at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
	at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
	at java.sql.DriverManager.getDriver(Unknown Source)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
	at AccesoBD.doGet(AccesoBD.java:37)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
  #9 (permalink)  
Antiguo 18/06/2011, 11:12
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Qué es lo que me falta?

En la carpeta "lib" de Tomcat 7 tengo "tomcat-dbcp.jar" y "mysql-connector-java-5.1.16-bin.jar" así que no sé porque es...

Muchísimas Gracias
  #10 (permalink)  
Antiguo 18/06/2011, 11:57
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Hola,

¿Como has realizado el deploy? ... el error significa que no encontró el Resource por ningún lado aunque lo hayas definido. Posiblemente, prueba a desinstalar la aplicación completamente (undeploy), vuelve a crear el archivo war y haz el deploy nuevamente.

Saludos,

ps:

Yo realice una prueba exactamente con el mismo código que pusiste pero en Tomcat 6.0, y funciona correctamente, (aunque no encuentre la base de datos), el único problema es si borro la etiqueta Resource del context.xml, en donde obtengo exactamente el mismo error que mostraste de último. Osea si Tomcat no encuentra la etiqueta Resouce genera el error de URL 'null'. Pero no tomé en cuenta que estas usando el 7.0.

Última edición por HackmanC; 18/06/2011 a las 12:08 Razón: ps
  #11 (permalink)  
Antiguo 18/06/2011, 12:12
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

hola!

Ya volví a instalar el tomcat y a colocar las carpetas (no sé si te refieres a eso) pero no me funcionó...
  #12 (permalink)  
Antiguo 18/06/2011, 14:50
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Hola,

Entonces no tengo ni idea, así como escribiste el código me funciona bien en Tomcat 6, y no me genera ningún error en una instalación típica del mismo.

Saludos,
  #13 (permalink)  
Antiguo 23/06/2011, 13:41
Avatar de jomaruro
Colaborador
 
Fecha de Ingreso: junio-2002
Ubicación: Naboo
Mensajes: 5.442
Antigüedad: 21 años, 10 meses
Puntos: 361
Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Hola:

Cita:
Iniciado por una_xikilla Ver Mensaje
En la carpeta "lib" de Tomcat 7 tengo "tomcat-dbcp.jar" y "mysql-connector-java-5.1.16-bin.jar" así que no sé porque es...
Cita:
Iniciado por HackmanC Ver Mensaje
Entonces no tengo ni idea, así como escribiste el código me funciona bien en Tomcat 6, y no me genera ningún error en una instalación típica del mismo.
¿Y algún tipo de incompatibilidad entre las libs de la versión 7 de tomcat?

Saludos.

  #14 (permalink)  
Antiguo 23/06/2011, 21:14
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Error Pool de Conexiones - java.lang.NullPointerException

Hola,

Cita:
Iniciado por jomaruro Ver Mensaje
¿Y algún tipo de incompatibilidad entre las libs de la versión 7 de tomcat?
Normalmente eso es muy difícil que suceda en Java, las excepciones son bien explicitas, una incompatibilidad la marca con errores de clase, como podría ser ClassNotFoundException y cosas por el estilo.

El problema en este caso creo que es un mal deploy de la aplicación o no se hace un clean a la aplicación, o en el peor de los casos no está bien creado el .war; acabo de probar nuevamente con Tomcat 7.0.16 y las librerías mencionadas y sucede lo mismo, es decir, funciona todo correctamente.

El único caso donde se genera el error:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

Es cuando cambio el nombre del Resource en el context.xml, como por ejemplo AccesoBDS123, donde evidentemente no lo va a encontrar. Pero el context.xml seguramente existe puesto que sino no podría hacer deploy a la aplicación.

Así que el error no está en el código que mostró ni en una instalación típica de Tomcat 6, ni 7. Seguramente hay algo que una_xikilla no nos ha dicho.

Saludos,

Etiquetas: conexiones, pool
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:09.