Melhores Práticas de desenvolvimento - Pool de Conexões  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
bland
JavaEvangelist

Membro desde: 10/12/2004 09:36:35
Mensagens: 330
Offline

Olá pessoal!

Estou engajado em um projeto e preciso ter essa ideia muito bem definida e queria a ajuda de vocês.
Tenho, antes de tudo, que elaborar um seminário juntamente com os desenvolvedores e explicar quais são as melhores práticas de desenvolvimento e mostrá-los como devem proceder, bem como o ganho que terão com isso.
Por outro lado, irei estar incorporando ao projeto um Pool de Conexões para facilitar a programação e evitar a utilização desnecessária de conexões.

Aí vem a dúvida, como eu poderia estar criando um Pool de conexões de maneira "elegante" e que funcione. Ou seja, como posso elaborar ou utilizar de algum framework, abstração, container, ou seja lá o que for, a ideia de um pool de conexões e que este seja de fácil utilização e de configuração?

O maior medo é que os desenvolvedores fiquem com a responsabilidade de criar e fechar as conexões por conta própria, deixando arriscado a possibilidade de se deixar as conexões abertas e isso vir a ser um grande problema posteriormente.

De antemão, pensei em criar um filtro e fazer com que este faça uma conexão sempre que for necessário, claro, e executar o commit e / ou fechar a conexão sempre que estão não for mais necessária.

Enfim, essas são algumas dúvidas que espero que me ajudem para melhor definir o processo de desenvolvimento na elaboração deste projeto.

P.S.: Não sabia onde criar este post. Então criei aqui mesmo. Se estiver errado, por favor moderadores, mova-o para o local apropriado.

Abraços.

http://www.twitter.com/almeidafabiano

Fabiano Almeida.
[MSN]
GraveDigger
JavaEvangelist
[Avatar]

Membro desde: 07/07/2005 13:47:12
Mensagens: 354
Localização: Aracajú
Offline

Olá,

Se você estiver usando algum mecanismo de persistência do banco de dados, como o Hibernate, você pode facilmente integrá-lo ao C3P0 que é um mecanismo de pool de conexões. Ficaria fácil como adicionar alguns parâmetros a seu hibernate.cfg.xml

Caso você não utilize um mecanismo assim, sugiro que você dê uma lida mais aprofundada no C3P0, mas continuo recomendando-o como pool de conexões.

Aqui encontrei algumas infos interessantes a respeito http://www.mchange.com/projects/c3p0/index.html

Dê uma lida, acredito que isso vá ajudar.

Abs,


SCWCD
SCJP

Pedro Henrique Lobato Sena

renanreismartins
GUJ Ranger
[Avatar]

Membro desde: 19/09/2007 15:19:38
Mensagens: 807
Localização: São Paulo - SP
Offline

Fábio, vou postar aqui alguma experiencia que tive com pool de conexoes e abertura e fechamento de conexao e transacao, espero que te ajude.


em um projeto, estava desenvolvendo utilizando o tomcat como container e utilizei o hibernate como orm, então aproveitei para criar o pool de conexoes com o c3p0 e implementei um filtro que abria e fechava a conexao a cada request, caso acontecesse uma exceçao ele fazia um rollback. Muita gente nao gosta desta abordagem por pegar uma conexao do pool e abrir uma transacao desnecessaria caso o request seja apenas um request de navegaçao, onde nao necessite nenhum recurso do db. Porem no meu caso isso nao criaria um gargalo no sistema, entao optei pela simplicidade.

em um outro projeto utilizando o glassfish, criamos o pool e o datasource no proprio servidor de aplicação, neste caso utilizamos o toplink como orm e EJBs, nao tenho muita experiencia em EJBs mas fui orientado que utilizando tal tecnologia nao seria necessario a abertura e fechamento de transacoes, entao neste caso ficamos livres de tal controle.

abrasssss

http://renanreismartins.blogspot.com/ - Para apaixonados por desenvolvimento de software
[WWW] [MSN]
rollei
JavaEvangelist
[Avatar]

Membro desde: 21/02/2008 11:27:15
Mensagens: 397
Offline

renanreismartins wrote:Fábio, vou postar aqui alguma experiencia que tive com pool de conexoes e abertura e fechamento de conexao e transacao, espero que te ajude.


em um projeto, estava desenvolvendo utilizando o tomcat como container e utilizei o hibernate como orm, então aproveitei para criar o pool de conexoes com o c3p0 e implementei um filtro que abria e fechava a conexao a cada request, caso acontecesse uma exceçao ele fazia um rollback. Muita gente nao gosta desta abordagem por pegar uma conexao do pool e abrir uma transacao desnecessaria caso o request seja apenas um request de navegaçao, onde nao necessite nenhum recurso do db. Porem no meu caso isso nao criaria um gargalo no sistema, entao optei pela simplicidade.

em um outro projeto utilizando o glassfish, criamos o pool e o datasource no proprio servidor de aplicação, neste caso utilizamos o toplink como orm e EJBs, nao tenho muita experiencia em EJBs mas fui orientado que utilizando tal tecnologia nao seria necessario a abertura e fechamento de transacoes, entao neste caso ficamos livres de tal controle.

abrasssss


eu nao entendi o porque de voce fazer um filtro para ficar fechando as conexoes. o pool jah se encarrega disso para voce. Na configuracao do pool voce define quantas conexoes voce quer manter ativas (maximo, minimo, etc), nao eh muito bom voce deixar o pool sempre vazio (tem como fazer isso tambem somente configurando o pool), mas ae voce vai ter um overhead, para abrir uma conexao nova a cada nova consulta, mantendo algumas conexoes abertas quando uma nova consulta eh executada o pool se encarrege de utilizar aquela conexao para executar sua query e depois libera a conexao sem precisar fecha-la
renanreismartins
GUJ Ranger
[Avatar]

Membro desde: 19/09/2007 15:19:38
Mensagens: 807
Localização: São Paulo - SP
Offline

opa rollei, acho que me expressei mal, nao é exatamente para fechar, mas para devolver ao pool. como vc mesmo citou sempre deixo um numero min de conexoes ativas no pool. "retiro para uso, mas depois libero"

abrasss

http://renanreismartins.blogspot.com/ - Para apaixonados por desenvolvimento de software
[WWW] [MSN]
rollei
JavaEvangelist
[Avatar]

Membro desde: 21/02/2008 11:27:15
Mensagens: 397
Offline

Se voce estiver utilizando o padrao JPA(com hibernate) voce vai precisar apenas adicionar essa propiedade no persistence.xml (caso voce esteja usando hibernate sem JPA o arquivo eh o hibernate.cfg.xml)




e depois adicionar um arquivo c3p0.properties na raiz do seu source (estando na raiz o c3p0 jah encontra o arquivo automaticamente)



*** EDIT ***
Soh lembrando que voce tem alterar esses valores de configuracao para melhor se adequar a sua aplicacao

This message was edited 2 times. Last update was at 19/06/2009 09:41:30

rollei
JavaEvangelist
[Avatar]

Membro desde: 21/02/2008 11:27:15
Mensagens: 397
Offline

Eu recomendo voce usar Hibernate seguindo o JPA, eu particularmente acho um saco ficar alterando os xml dos pojos, pelo menos para mim parece bem mais natural manter as informacoes de mapeamento junto com a classe e nao em um arquivo externo.
renanreismartins
GUJ Ranger
[Avatar]

Membro desde: 19/09/2007 15:19:38
Mensagens: 807
Localização: São Paulo - SP
Offline

n eh necessario utilizar jpa para colocar o mapeamento junto da classe

abrasss

http://renanreismartins.blogspot.com/ - Para apaixonados por desenvolvimento de software
[WWW] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team