Duvida DataSource

estou implementando uma classe q pega uma conexao atraves de um DataSource.

classe

package app.conexao;

import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.SQLException;

/**
 * @author cu_ringa
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public final class DBUtil {
	
	private DataSource ds;
	
	public DBUtil(){
		
		try{
			Context ctxt = new InitialContext();
			Context ct = (Context)ctxt.lookup("java:comp/env");
			ds = (DataSource)ct.lookup("jdbc/pechinchadb");
		}
		catch(Exception ex){
			System.err.print("Erro3 ao obter conexao: " + ex.getMessage());
		}		
		
	}
	
	public Connection getConnection(){
		
		Connection con = null;
		
		try{
			
			con = ds.getConnection();
			System.out.println(con);
		}
		catch(SQLException sqlex){
			System.err.print("Erro ao obter conexao: " + sqlex.getMessage());
		}
		catch(Exception ex){
			System.err.print("Erro2 ao obter conexao: " + ex.getMessage());
		}		
		
		return con;		
	}
	
}

o problema q ta dando eh

Erro3 ao obter conexao: Name pechinchadb is not bound in this ContextErro2 ao obter conexao: nullsingleton
09/06/2005 04:32:34 org.apache.struts.action.RequestProcessor processException
WARNING: Unhandled Exception thrown: class java.lang.NullPointerException

O erro q ta dando eh como se eu tivesse implementando o padrao singleton. alguem pode me ajudar??? qnd implementei o DataSource no metodo init de um servlet ele funcionou blz. agora qnd coloquei-o numa classe normal, ai deu pau. pq???

classe de onde chamo o DataSource

public class ClienteDAO {
	
	private Properties props;
	private Connection con;
	
	public ClienteDAO(){
		DBUtil db = new DBUtil();
		con = db.getConnection();
		SQLProperties p = SQLProperties.getInstance();
		props = p.getSQLProperties();
	}
	
	public void salvar(ClienteForm cliente){
		
		PreparedStatement pstmt = null;
		
		try{
							
			pstmt = con.prepareStatement(props.getProperty("insert.users"));
			pstmt.clearParameters();
			pstmt.setString(1, cliente.getUser_name());
			pstmt.setString(2, cliente.getUser_pass());
			pstmt.executeUpdate();
			
			pstmt = con.prepareStatement(props.getProperty("insert.user_roles"));
			pstmt.clearParameters();
			pstmt.setString(1, cliente.getUser_name());
			pstmt.setString(2, "cliente");
			pstmt.executeUpdate();
			
		}
		catch(SQLException sqle){
			System.out.println("marujo8");
			sqle.printStackTrace();
			//erro de conexao
		}
					
	}
}

Antes de mais nada, uma perguntinha:

Onde voce ta fechando a conexao?

eu tirei o fechamento pq tava dando erro pq eu num teva conseguindo a conexao. Mas assim q conseguir fz a conexao coloco novamente

Bom, eu tenho duas dicas:

1 - leia e exercite mais sobre tratamentos de excecao
2 - ver dica 1

:slight_smile:

consegui já.