Connection Pool em Java (pool de conexões)

Já há algum tempo vinha pesquisando como poderia criar um pool de conexões com JDBC visto que ficar abrindo e fechando conexões como banco de dados é uma operação custosa.

Pesquisei pelo Jakarta DBCP e tive muita dificuldade de entender como funciona, pois achei o projeto mal documentado e com poucos exemplos práticos de uso, então resolvi perder um certo tempo e desenvolver a minha própria implementação de Connection Pool.

Com este projeto você irá aprender:

Decorator Pattern: Utilizado na classe PooledConnection, pois ela recebe em seu construtor a referência para um objeto que implementa a interface java.sql.Connection e também a referência para o pool de conexões (objeto do tipo ConnectionPool). A principal finalidade deste ‘wrapper’ (PooledConnection) para a real conexão será que ao chamar o método close da conexão a mesma não será fechada, e sim devolvida para o pool.

Builder Pattern: Como a classe ConnectionPool possui muitos parâmetros em sua inicialização, utilizei do padrão de projetos Builder (construtor) para criar a mesma sem ter que ficar passando diversos parâmetros no construtor. (Referencio o Livro Effective Java 2nd Edition, pag 11 – Item 2 – Consider Builder when faced with many constructor parameters )

Descrição das classes:

São simplesmente duas classes: (1) a classe PooledConnection que funciona como um ‘wrapper’ para o objeto original java.sql.Connection e (2) a classe ConnectionPool que gerencia o pool de conexões.

As classes iniciadas com Test… são as classes que usei para testar com o JUnit !

Faça o download do código fonte:

ConnectionPool.zip

Veja também:

Outros projetos

Posts de desenvolvimento em Java

Design patterns

Esta entrada foi publicada em Java, Projetos. ligação permanente.

9 respostas a Connection Pool em Java (pool de conexões)

  1. Muito legal sua implementação. Parabéns!

    Gostar

  2. Kinrpg diz:

    Realmente achei muito impressionante. Amigo ve se tu consegue em tirar essa duvida… No caso de usar um servidor como o glassfish onde para eu criar o JNDI eu crio antes um Pool de Conexão. Esse não é o mesmo Pool? Eu precisaria fazer um procedimento desse mesmo que meu Datasource use a conexão do servidor de aplicação?

    To caçando essa informação mas achoq ue to é confundindo as coisas rs.

    Gostar

    • pedroabs diz:

      Caro colega, eu não entendi ao certo sua dúvida mesmo porque não tenho muita experiência com JDNI. Sugiro que você poste sua dúvida no forum do GUJ (www.guj.com.br). Lá tem muita gente que ai poder te ajudar.

      Desculpe não ter te ajudado de maneira objetiva a sua pergunta.

      Gostar

  3. Bom dia pessoal, estou fazendo testes com este exemplo de pool de conexões e estou com um problema. Fiz um teste inicializando o pool com 1 conexão e no máximo 1 para serem executadas com duas threads, a primeira thread consegue obter a conexão porém a segunda thread é bloqueada ao chamar o método checkOut por causa do método wait(); que é chamado se não houver mais conexões disponíveis, mas o que eu percebi é que ele bloqueia objeto pool ai a primeira thread que já tem uma conexão disponível não consegue fazer o checkin e devolver a sua conexão ao pool. Gostaria de saber porque o fluxo de execução da aplicação fica parado já que pra mim ele deveria dar um wait apenas na segunda thread e a primeira deveria continuar executando normalmente.

    Gostar

  4. Muito bacana esta implementação de pool de conexões. Encaixou direitinho no que estou desenvolvendo. Valeu! (Seus créditos permanecem no código, ok?)

    Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s