Pool de conexões

6 respostas
amoreiraedu

Boa tarde, tenho a seguinte classe para fazer conexão com os banco de dados.
Queria saber se isto pode ser considerado um pool de conexao:

package br.com.semente.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class FactoryConnection {
	
	public static Connection getMysqlConnection() throws SQLException{
		try{
			Class.forName("com.mysql.jdbc.Driver");			
                        System.out.println("Conectado ao MsSQL - Schema XXXX");
			return DriverManager.getConnection("jdbc:mysql://192.168.0.12/database","xxx","xxx");					
		}catch (ClassNotFoundException e) {
			// TODO: handle exception
			throw new SQLException(e.getMessage());
		}		
	}
	
	public static Connection getPostGreSQLConnection() throws SQLException{			
		try{
			Class.forName("org.postgres.Driver");			
                        System.out.println("Conectado ao MsSQL - Schema XXXX");
			return DriverManager.getConnection("jdbc:postgresql://192.168.0.12/database","xxx","xxx");			
		}catch (ClassNotFoundException e) {
			throw new SQLException(e.getMessage());
		}

	}
	public static Connection getMsSQLConnection() throws SQLException{			
		try{
			Class.forName("net.sourceforge.jtds.jdbc.Driver");			
                        System.out.println("Conectado ao MsSQL - Schema XXXX");
	                return DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.0.12/database","xxx","xxxx");			
		}catch (ClassNotFoundException e) {
			throw new SQLException(e.getMessage());
		}
	}
}

Para instanciar, faço o seguinte, diretamento no construtor do DAO:

public class EntidadeJuridicaDAO implements DAO {
	 PreparedStatement ps;
	 Connection connEntidade;

	public EntidadeJuridicaDAO() throws SQLException {
		this.connEntidade = FactoryConnection.getMsSQLConnection();
	}

Tenho um main que insere em duas tables, ou seja, chama dois métodos insere de 2 DAO diferentes.
Como em cada DAO há um construtor com conexão, como no modelo acima. Aparece 2 mensagens na console, resultado do syso.
Agora minha dúvida é:

Isso que estou usando é um pool de conexão (singleton), ou cada chamada de um método DAO é uma conexão nova com o banco de dados?
[i]

6 Respostas

D

Bem… de um modo geral, um pool de conexões trabalha com uma quantidade X de conexões abertas e a medida que a aplicação vai requisitando ele vai disponibilizando essas conexões.

No seu caso, ele está abrindo conexões novas com o banco. Portanto, não classificaria essa classe como um Pool de Conexões. Ela é só um Facade para abrir conexões com seu banco.

Pelo que eu entendi, você citou “Singleton” como uma referência a “Pool de Conexões”. Singleton é um patern utilizado para controlar a quantidade de instâncias de uma determinada classe em um sistema. Não tem nenhuma ligação direta com o Pool de Conexões.

Pra finalizar, não se esqueça de fechar suas conexões abertas!

Espero ter ajudado. Até.

Rafael_Carneiro

Cada chamada aos métodos será uma nova conexão.

Para saber mais sobre pool de conexão:

http://www.devmedia.com.br/articles/viewcomp.asp?comp=4113&hl=
http://www.macoratti.net/net_cpoo.htm
http://www.antoniopassos.pro.br/blog/?p=88

tnaires

Isso nem é singleton nem pool. É uma fábrica de conexões.

amoreiraedu

Ok, mas existe uma forma de melhorar minha fábrica de conexões, de modo que a cada chamada de método não seja criada uma nova conexão?
Acredito que isso melhoria a questão do desempenho.

g4j

amoreiraedu:
Ok, mas existe uma forma de melhorar minha fábrica de conexões, de modo que a cada chamada de método não seja criada uma nova conexão?
Acredito que isso melhoria a questão do desempenho.

sim, leia os links que o Rafael Carneiro postou cara…

tnaires

Exatamente, pool de conexões já é um assunto batido há anos. Não é saudável você implementar o seu próprio quando existem TANTOS disponíveis por aí.

Criado 3 de fevereiro de 2009
Ultima resposta 3 de fev. de 2009
Respostas 6
Participantes 5