Design Pattern: Singleton

Pessoal, existe um Design Patter chamado “Singleton” cujo objetivo é assegurar que uma classe tenha uma única instância e prover um ponto de acesso global a esta instância …

Este padrão seria o ideal para uso com a classe que controla o acesso/conexao com banco de dados certo ??? Ou nao ???

Bem … como usar o Singleton em uma classe para conexao a banco ?

Valeu … Alguém tem um exemplo em Java :?:

:shock: Julio :shock:

Se quiser vez um exemplo pratico, o codigo fonte do Conneciton Pool do GUJ esta neste endereco:

http://cvs.arca.ime.usp.br/cgi-bin/viewcvs.cgi/guj/src/br/com/guj/model/DatabaseBroker.java?rev=1.11&content-type=text/vnd.viewcvs-markup

Rafael

Rafael,

tentei ver…
mais 404
tem como vc mandar o fonte ou novo link?
Obrigado

ta ai o link correto :slight_smile:
http://cvs.arca.ime.usp.br/guj/src/br/com/guj/model/DatabaseBroker.java?rev=1.12&content-type=text/vnd.viewcvs-markup

Cara, eu uso essa classe que eu criei (para conexão com pool). Ela não é singleton mas acho que é mais interessante de ser usada. Eu costumo não instanciar as classes que retornam conexão, acho mais legal usar métodos estáticos.

import java.sql.*;
import java.util.*;

import org.postgresql.jdbc3.*;

abstract public class AcessoBD {

    // As configurações são feitas com os atributos estáticos

    // host, ou ip, do servidor
    private static final String SERVER = "255.255.255.255"; 
   
    // nome da base de dados
    private static final String DATA_BASE = "bd1";
 
    // número máximo de conexões
    private static final int MAX_CONNECTIONS = 100;

    // número inicial de conxões
    private static final int INITIAL_CONNECTIONS = 15;

    // O pool em si
    private static Jdbc3PoolingDataSource pool = null;

    // nome do usuário
    private static final String USER = "postgres"; 

    // senha do usuário
    private static final String SENHA = "senha"; 


    //  Função que retorna a conexão
    public static final Connection getConexao() 
        throws SQLException {        
            
        // Se o pool não foi instanciado então a função de instanciar   
        // é chamada

        if (pool == null) {
            iniciarPool();
        }
        
        Connection conexao = pool.getConnection();
        
        conexao.setAutoCommit(true);
        
        return conexao;
    }

    // Função que instancia o pool
    
    private static final void iniciarPool () 
        throws SQLException {

        pool = new Jdbc3PoolingDataSource();
        
        pool.setServerName(SERVER);
        pool.setDatabaseName(DATA_BASE);
        pool.setUser(USER);
        pool.setPassword(SENHA);
        pool.setMaxConnections(MAX_CONNECTIONS);
        pool.setInitialConnections(INITIAL_CONNECTIONS);
    }    
}

Espero ter ajudado…
:slight_smile: