Erro no pooling of connections

Pessoal, muito boa noite a todos…

Estou tentando implementar aqui um webapp com pooling of connections (tomcat + mysql), só que estou tendo uns erros, já revirei todas possibilidades e não consegui solucionar.

Agradeceria muito se alguém mais experiente pudesse dar uma olhada no que estou fazendo para ver se encontra algum erro aparente.

Bom, vamos lá com os códigos…

Esta classe abaixo é um Bean que chama o DAO para fazer a inserção no BD…

[code]<%–
Document : registerBean
Created on : 20/04/2010, 01:17:36
Author : fabio
–%>

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>

<jsp:useBean id=“dataBaseRegister” class=“dataBase.dataBase” />

<jsp:setProperty name=“dataBaseRegister” property="*" />

Student Branch h1 { color: black }
<body>
    <h1>Cadastro de usuarios novos</h1>


    Parabens <jsp:getProperty name="dataBaseRegister" property="nome" /><br><br>
    Agora voce pode acessar a area de usuarios<br><br><br>

    <i>Obs: Em breve entraremos em contato com voce...</i><br>
    <i>Qualquer duvida entre em contato: ieee.ufabc@gmail.com</i>

    <%
    try{
    dataBase.usersDAO users = new dataBase.usersDAO();
    users.getConnection();
    users.createUser("36195993867");
    }
    catch(Exception e){
        out.println(e);
    }
    %>

</body>
[/code]

Aqui eu tenho a classe DAO

[code]package dataBase;

import java.sql.;
import javax.naming.
;
import javax.sql.*;
import javax.swing.JOptionPane;

public class usersDAO {

private Connection connection = null;
private Statement statement = null;
private PreparedStatement prepStatement = null;
private ResultSet results = null;
private static final String DATASOURCE_NAME = "java:comp/env/jdbc/studentbranch";
private static final String INSERT_STATEMENT = "INSERT INTO users (cpf) VALUES (?)";

public void getConnection() {
    if (connection == null) {
        try {
            Context initialContext = new InitialContext();
            DataSource ds = (DataSource) initialContext.lookup(DATASOURCE_NAME);
            connection = ds.getConnection();
        } catch (NamingException e) {
            JOptionPane.showMessageDialog(null, e);
            e.printStackTrace();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.toString(), DATASOURCE_NAME, 1);
            e.printStackTrace();
        }
    }
}


public void createUser(String cpf) {
    try {
        getConnection();
        prepStatement = connection.prepareStatement(INSERT_STATEMENT);
        prepStatement.setString(1, cpf);
        //prepStatement.setString(1, usuario.getCpf());
        prepStatement.executeUpdate();
        prepStatement.close();
        prepStatement = null;
        connection.close();
        connection = null;
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null, e.toString(), DATASOURCE_NAME, 1);
        e.printStackTrace();
    } finally {
        cleanUp();
    }
}

private void cleanUp() {
    // always make sure result sets, statements and connections are closed,
    if (results != null) {
        try {
            results.close();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.toString(), DATASOURCE_NAME, 1);
            e.printStackTrace();
        }
        results = null;
    }
    if (statement != null) {
        try {
            statement.close();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.toString(), DATASOURCE_NAME, 1);
            e.printStackTrace();
        }
        statement = null;
    }
    if (prepStatement != null) {
        try {
            prepStatement.close();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.toString(), DATASOURCE_NAME, 1);
            e.printStackTrace();
        }
        prepStatement = null;
    }
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e.toString(), DATASOURCE_NAME, 1);
            e.printStackTrace();
        }
        connection = null;
    }
}

}
[/code]

Aqui eu tenho meu context.xml

[code]<?xml version="1.0" encoding="UTF-8"?>


[/code]

Aqui eu tenho meu web.xml

[code]<?xml version="1.0" encoding="UTF-8"?>



30



index.jsp

<resource-ref>
	<description>BD Connection></description>
	<res-ref-name>jdbc/studentbranch></res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
</resource-ref>
[/code]

Estou rodando no tomcat5.5, no debian5.

O erro abaixo

[code]org.apache.jasper.JasperException: Exception in JSP: /registerBean.jsp:84

81: <%
82: try{
83: dataBase.usersDAO users = new dataBase.usersDAO();
84: users.getConnection();
85: users.createUser(“36195993867”);
86: }
87: catch(Exception e){

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
root cause

javax.servlet.ServletException: Could not initialize class javax.swing.JOptionPane
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
org.apache.jasper.runtime.PageContextImpl.access$11(PageContextImpl.java:779)
org.apache.jasper.runtime.PageContextImpl$12.run(PageContextImpl.java:761)
java.security.AccessController.doPrivileged(Native Method)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:759)
org.apache.jsp.registerBean_jsp._jspService(registerBean_jsp.java:208)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
root cause

java.lang.NoClassDefFoundError: Could not initialize class javax.swing.JOptionPane
dataBase.usersDAO.getConnection(usersDAO.java:27)
org.apache.jsp.registerBean_jsp._jspService(registerBean_jsp.java:187)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
[/code]

MUITO OBRIGADO!

JOptionPane no código do DAO?
Pelo amor!
JOptionPane é para aplicações em Swing!
Quer obter os dados de erro ou o que está acontecendo em determinada parte da execução? Use um logger ou mesmo dê um System.out.println().

Mas o erro é esse, ou você fez um comentário apenas?

vlw

[quote=davidbuzatto]JOptionPane no código do DAO?
Pelo amor!
JOptionPane é para aplicações em Swing!
Quer obter os dados de erro ou o que está acontecendo em determinada parte da execução? Use um logger ou mesmo dê um System.out.println().[/quote]

o out.println(e) do bean que chama a classe DAO para criar user no banco de dados esta me retornando o seguinte erro agora…

java.lang.NullPointerException

e agora?

preciso muito arrumar isso…

[quote=fabiolanza]o out.println(e) do bean que chama a classe DAO para criar user no banco de dados esta me retornando o seguinte erro agora…

java.lang.NullPointerException

e agora?

preciso muito arrumar isso…[/quote]

Em qual linha ta dando uma NullPointerException? Vc está tentando chamar algum método de alguma referência null.
Na minha última mensagem eu falei do JOptionPane por duas razões. A primeira era pq o que você fez estava conceitualmente errado. A segunda é pq era a primeira pista que as exceções estavam mostrando. Leia as exceções!

[]´s

Pessoal muito obrigado pela ajuda e atenção de todos aqueles que leram… o meu problema, além da sugestão do JOptionPane do amigo acima, era má configuração das coisas…

Agora está funcionando…

Abraços…

Fabiola, fico contente em ter resolvido o problema. Pelo erro, acredito que vc observou que faltava a API (jars) em seu classpath.

Agora, aproveitando a oportunidade, gostaria de dar algumas dicas.

  • O que o David disse com relacao ao acoplamento com Swing na camada DAO, de fato eh meio “feio”. Como sugestao, faca lancar um excecao para as camadas acima, e apenas a View (tela) recupere a mensagem do erro e exiba para o usuario da forma como vc fez no DAO.
  • Outra coisa: Muito cuidado em declarar como atributo de classe, Connection, Statement, ResultSet. Recomendo que os mesmos sejam obtidos sobre demanda em cada metodo que voce invocar em seu DAO. No caso do Connection, eu diria ainda em passar da camada de servico para o DAO atravez de um Service Locator para permitir ter mais flexibilidade em se tratando de transacao. Se no servico deu tudo ok COMMIT senao, Rollback. Apenas uma dica.
  • Por fim, evite de colocar essas chamadas nos JSPs. Tenta fazer uso ao maximo do MVC.

Abracos