Essa implementação pode ser perigosa?

6 respostas
andre_a_s

Esse tipo de singleton pode ser perigoso? A primeira vista não pareçe, pois todos que pedirem a conexao ela já estrará instanciada, então não precisara ir no banco pegar denovo.
Mas ai fica minha duvida... e se por acaso essa conexao ficar umas 20 horas aberta sem ninguem usar... quando alguem pedir a conexao denovo, ela pode ter caido por timeout ou algo assim.
Qual seria a melhor solução?

public class ConnectionJDBC {

	private static Connection conn = null;

	public static Connection getConnection() {
		if (conn == null) {
			try {
				Class.forName("com.mysql.jdbc.Driver");
				conn = DriverManager.getConnection("jdbc:mysql://localhost/tabela", "root", "123");
			} catch (Exception e) {
				System.out.println(e);
				e.printStackTrace();
			}
		}

		return conn;
	}

}

6 Respostas

G

Você está serializando o acesso ao banco. Desse jeito, só uma requisição pode estar pendente num dado instante.

Na falta de um banco que multiplexe requisições numa conexão só, a melhor saída é connection pooling - você impõe um limite fixo na quantidade de conexões simultaneamente abertas e, ao mesmo tempo, evita o overhead de criar conexões a cada requisição.

Pooling é uma opção do driver.

Abraços,

Grinvon

Você ta dizendo se no caso a conexão ficar parada em uso? E então os recursos do banco não conseguir dar um jeito nela?

Um sei lá, cria uma thread que a monitore, coloque o método como synchronized e então mate a conexão

G

Não. Tenho certeza de que há outros problemas além deste, mas imagine a seguinte situação:

  1. Um cliente A faz uma requisição que envolve a transmissão de um bilhão de records.
  2. Um cliente B faz uma requisição que envolve a transmissão de 5 records.

Se você usa uma conexão só, B tem que esperar A terminar. O acesso ao banco é serial.

andre_a_s

Entendi… entao o mais interessante seria um pool de conexões neh?

G

Com certeza! É uma solução legal para uma boa parte dos casos de uso.

andre_a_s

:mrgreen:

Criado 9 de maio de 2006
Ultima resposta 10 de mai. de 2006
Respostas 6
Participantes 3