| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/04/2009 13:00:49
|
OliveirakunJava
Java Ninja
![[Avatar]](/images/avatar/d4cb74874cebc08e5b8001772876a9ae.jpg)
Membro desde: 29/05/2008 20:50:47
Mensagens: 279
Localização: Diadema - SP
Offline
|
Olá Pessoal do GUJ,
Estava estudando alguns design patterns e após observar um exemplo de DAO(Data Access Object)utilizando JDBC, que peguei da apostila da Caelum, me surgiu uma dúvida.
Este é um exemplo de DAO:
Como vcs podem observar, ao criar uma instância desta classe, automaticamente é aberta uma conexão com o banco de dados pois a variável connection recebe um objeto connection da fábrica de conexões(ConnectionFactory). E ao chamar o método adiciona, os valores das variáveis do objeto passado como parâmetro são adicionados ao banco utilizando a conexão aberta anteriormente. Até ai tudo bem, mas neste código a conexão não é fechada e dai vem a pergunta: É normal não fechar a conexão em uma classe DAO? Não seria melhor abrir e fechar a conexão no inicio de cada método DAO(adiciona,remove,consulta,etc..) para evitar problemas de vazamento de memória?
Eu sei que vou ter um melhor desempenho pois posso fazer várias consultas e alterações no banco utilizando a mesma conexão e quando o objeto da classeDAO for recolhido pelo garbage collector a conexão será fechada, por favor me corrijam se eu estiver errado mas mesmo assim não há problemas criar um DAO de acordo com o código acima?
Desde já agradeço a atenção e as respostas de vcs.
|
Francis Borges Oliveira
SCJP 6
SCWCD 5
Java no Renkinjutsushi!! |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/04/2009 13:40:54
|
AndreAlves
JavaBaby
![[Avatar]](/images/avatar/35296a4054db6816185054cbdc02e041.jpg)
Membro desde: 23/06/2007 14:32:00
Mensagens: 78
Localização: Santos/SP
Offline
|
Boa tarde.
No meu entender, a responsabilidade de abrir e fechar a conexão com o banco de dados não deve estar no DAO.
No seu caso, o ConnectionFactory (ou alguma outra classe) deve ter a missão de abrir e encerrar a conexão, e todos os DAOs da sua aplicação deverão compartilhar estas conexões. Isto é feito para economizar recursos (pois boa parte dos bancos de dados cobram por conexão e/ou tem limitação na quantidade de conexões abertas) e para ganhar performance.
|
www.beginning-java.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/04/2009 18:27:15
|
OliveirakunJava
Java Ninja
![[Avatar]](/images/avatar/d4cb74874cebc08e5b8001772876a9ae.jpg)
Membro desde: 29/05/2008 20:50:47
Mensagens: 279
Localização: Diadema - SP
Offline
|
AndreAlves wrote:Boa tarde.
No meu entender, a responsabilidade de abrir e fechar a conexão com o banco de dados não deve estar no DAO.
No seu caso, o ConnectionFactory (ou alguma outra classe) deve ter a missão de abrir e encerrar a conexão, e todos os DAOs da sua aplicação deverão compartilhar estas conexões. Isto é feito para economizar recursos (pois boa parte dos bancos de dados cobram por conexão e/ou tem limitação na quantidade de conexões abertas) e para ganhar performance.
Então vc acha que seria melhor se eu criasse um método para fechar a conexão após fazer as chamadas ao banco? Na verdade eu ja havia pensado nisso, só estava em dúvida se era a melhor prática.
|
Francis Borges Oliveira
SCJP 6
SCWCD 5
Java no Renkinjutsushi!! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/04/2009 19:10:03
|
AndreAlves
JavaBaby
![[Avatar]](/images/avatar/35296a4054db6816185054cbdc02e041.jpg)
Membro desde: 23/06/2007 14:32:00
Mensagens: 78
Localização: Santos/SP
Offline
|
no meu trampo a gente usa um ConnectionManager, que abre e fecha as conexões.
|
www.beginning-java.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/04/2009 21:03:09
|
OliveirakunJava
Java Ninja
![[Avatar]](/images/avatar/d4cb74874cebc08e5b8001772876a9ae.jpg)
Membro desde: 29/05/2008 20:50:47
Mensagens: 279
Localização: Diadema - SP
Offline
|
AndreAlves wrote:no meu trampo a gente usa um ConnectionManager, que abre e fecha as conexões.
Blz, Obrigado!
|
Francis Borges Oliveira
SCJP 6
SCWCD 5
Java no Renkinjutsushi!! |
|
|
 |
|
|