Erros "Caça Fantasmas"

1 resposta
T
Pessoal estou com um problema fantasma ele só aparece quando coloco o Deploy da aplicações no meu servidor de aplicação ele me da o seguinte erro. isso na execução da Pagina Web.
br.com.acc.util.AccException: Closed Statement.
com.evermind.io.ThreadsPrintStream@8f6c52.

local ela não da erro.

minha classe de conexao

package br.com.acc.db;

import br.com.acc.util.ExProperties;
import br.com.acc.util.AccException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * Objeto responsável pela conexão do usuário ao  Banco de Dados.<br>
 * Realizando toda a parte de pesquisa de informações contidas no banco, 
 * inserções e exclusões de informações no banco.
 *  @author    Teófilo Beloti Rosa Netto
 *  @version   1.4   22/10/2004 
 */
public class ConnectionDB implements HttpSessionBindingListener {
  /**
   * Objeto responsável por buscar as configurações do banco de dados no arquivo de  properties. 
   */
  ExProperties properties = new ExProperties();
       
  private static Connection connection; 
  private static ConnectionDB instance ;
  private static Statement statement;
  
  private static String user;
  private static String pws; 
  private String msg ="";
  
  public ConnectionDB()  { 
    getConnection();
  }
  /**
   * Método responsavel por realizar a conexao do usuario ao banco de dados.
   * @param usuario Nickname do usuario
   * @param senha   Senha do usuario
   * @return Retorna uma String informando se a conexão foi concluída com sucesso ou não.
   */
  public String conexao(String usuario, String senha )  {
  
    user = usuario;
    pws = senha;
       
    try {
      Class.forName(properties.propertiesConexaoDriver());
      connection=DriverManager.getConnection(properties.propertiesConexaoDriverJDBC(), user, pws);      
      statement = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
      
      msg = "";
    } catch (ClassNotFoundException e){
      msg = e.toString();
      connection = null;
    } catch (SQLException e ){
      connection=null;
      
      
      if (e.getErrorCode() == 1017){
          /*Usuairio ou Senha recusado pelo servidor. */
          msg = "Usuario ou senha invalido";
      }
       else if(e.getErrorCode() == 28001){
          /*Senha Expirada */
          msg = "0";      
      }else{
          msg = e.getMessage();
      }
    } 
    return msg; 
  }
  /**
   * Método que retorna a conexão para usuário já conectado. 
   * @return Retorna a Conexao
   */
  public static Connection getConnection(){
    return connection;
  }
  
  /**
   * Método que commita a ações de inserção e exclusão.
   * @throws java.sql.SQLException exceções de SQL
   */
  public void commit() throws SQLException{
    connection.commit();
  }
  /**
   * Método que desfaz a ações de inserção e exclusão.
   * @throws java.sql.SQLException exceções de SQL
   */
  public void rollback() throws SQLException{
    connection.rollback();
  }
  
  /**
   * Metodo que ativa e desativa o autocommit que para false.
   * @param autoCommit valor para o autocommit
   * @throws java.sql.SQLException exceções de SQL
   */
  public void setAutoCommit(boolean autoCommit)throws SQLException{
    connection.setAutoCommit(autoCommit);
  }
  /**
   * Método que executa as Query tipo (Select) das camadas de negocio.
   * @param sql  comando sql enviada das classes de negocio 
   * @return Retornando ResultSet
   * @throws java.sql.SQLException exceções de SQL
   */
  public ResultSet  executeQuery(String sql) throws SQLException{
    return statement.executeQuery(sql);
  }
  /**
    * Método que executa as Query tipo (Update, Delete e Insert ) das camadas de negocio.
   * @param sql  comando sql enviada das classes de negocio 
   * @return retorna o sucesso ou erro
   * @throws java.sql.SQLException exceções de SQL
   */
  public int executeUpdate(String sql) throws SQLException{
    return statement.executeUpdate(sql);
  }
  
  /**
   * Método que segura conexão do usuário no servido, para que não espire.
   * @param event evento da conexão
   */
  public void valueBound(HttpSessionBindingEvent event){
    
    try {
       if (connection.isClosed()){
          conexao(user,pws);
          //connection = DriverManager.getConnection(properties.propertiesConexaoDriverJDBC(),user,pws);

       }
    } catch (SQLException e ){
       connection= null;
    }
  }
  
  /**
   * Método que desconecta o usuário do banco.
   * @param event  evento da conexão
   */
  public void valueUnbound(HttpSessionBindingEvent event){

    try {
       connection.close();
    } catch(SQLException e ){
    }finally{
        connection = null;
    }
  }
  
  /**
   * Metodo que finaliza a conexão do usuário.
   */
  protected void finalizer()throws AccException {
    try{
      setUser(null);
      setPws(null);
      statement.close();
      connection.close();
    } catch (SQLException e){
    throw new UnespException(e.getMessage());       
    }
  }

  /**
   * Método que retorna a ConnectionDB instaciada.
   * @return retorna a conexao
   */
 public static ConnectionDB getInstance(){
   if (instance == null){
   instance = new   ConnectionDB();
   }
   return instance;
 }

  /**
   * Método que recebe o usuario.
   * @param user nickname do usuario
   */
  public void setUser(String user) {
    this.user = user;
  }
 
  /**
   * Método que recebe a senha do usuario.
   * @param pws senha do usuário
   */
  public void setPws(String pws) {
    this.pws = pws;
  }

  

  public void fechar()throws Exception  {

     finalizer();
  }
  
}

alguém tem uma ideia do que seja?

1 Resposta

D

Erros “fantasmas” são bem comuns, daí depois a gente descobre que são bem reais como nos desenhos do Scooby-Doo !!!

Tu descobriu pelo menos em que método que o erro é gerado ?

O app server local e remoto são os mesmos e com as mesmas configurações ??

Manda imprimir a pilha de erros e.printStackTrace() para poder entender melhor.

[]s

Criado 22 de fevereiro de 2005
Ultima resposta 23 de fev. de 2005
Respostas 1
Participantes 2