Duvida com DAO  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
OliveirakunJava
Java Ninja
[Avatar]

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!!
AndreAlves
JavaBaby
[Avatar]

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
OliveirakunJava
Java Ninja
[Avatar]

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!!
AndreAlves
JavaBaby
[Avatar]

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
OliveirakunJava
Java Ninja
[Avatar]

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!!
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team