| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2005 22:13:31
|
Luiz Henrique Coura
Java Ninja
![[Avatar]](/images/avatar/d9b1655c134b831076d6c45620a78c33.jpg)
Membro desde: 28/04/2004 21:03:05
Mensagens: 283
Localização: Lorena-SP
Offline
|
Galera, estou com uma dúvida cruel.
Criei essa classe para me fornecer uma funcinalidade muito util: Conexões ao Banco de Dados.
Pensei em fazer essa classe pq toda hora criamos aplicações q conectam ao BD. Assim diminuo meu trabalho!
O Problema é q não sei se estou fazendo de maneira correta.
O q vcs acham dessa forma q estou utilizando?
Como vcs costumam fazer?
Um exemplo de sua utilização:
Valeu!
|
"A única pergunta estúpida é aquela que você nunca faz"
Anônimo
Luiz Henrique Coura |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2005 22:55:01
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
1) Voce nao esta usando um connection pool
2) Voce nao esta fechando os result sets e statements
3) Voce esta duplicando varias linhas de codigo ao pegar a conexao, tratar o erro e fechar a conexao em cada metod.
Dica: utilize um template method
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2005 23:15:09
|
Luiz Henrique Coura
Java Ninja
![[Avatar]](/images/avatar/d9b1655c134b831076d6c45620a78c33.jpg)
Membro desde: 28/04/2004 21:03:05
Mensagens: 283
Localização: Lorena-SP
Offline
|
Rafael, estou utilizando o pool do Tomcat. Configuro ele no context da aplicação. Mas o q vc quiz dizer é q seria melhor trabalhar com um pool independente do container, tipo DBCP ou C3PO?
A respeito de fechar as conexões, eu passo, além do objeto connection, o statement e o resultSet para o método UtilBDConnection.closeConnection( connection, statement, resultSet ). Nesse método ele fecha tudo.
Na questão dos tratamentos de erros, realmente, preciso tratá-los direto no método.
Valeu pela dica do Template Method!
|
"A única pergunta estúpida é aquela que você nunca faz"
Anônimo
Luiz Henrique Coura |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2005 23:20:24
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Ok, mas e se vc precisa se mais statements e resultsets? vai ficar meio estranho fechar um pouco num canto e o resto em outra parte..
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2005 09:48:25
|
Luiz Henrique Coura
Java Ninja
![[Avatar]](/images/avatar/d9b1655c134b831076d6c45620a78c33.jpg)
Membro desde: 28/04/2004 21:03:05
Mensagens: 283
Localização: Lorena-SP
Offline
|
Rafael, qd vc quiz dizer: "duplicando linhas de código", é pq toda hora eu preciso chamar o método UtilBDConnection.getConnectionByDataSource( "java:comp/env/jdbc/CMMySQL" ) para conseguir uma conexão?
E o mesmo acontece com UtilBDConnection.closeConnection( connection, statement, resultSet ) ao fechar conexão?
Isso não tem nada a ver com o fato de eu estar trabalhando com métodos static, certo?
Já com TemplateMethod eu usaria um "esqueleto" de uma classe abstrata na qual eu teria um método getConnection() e closeConnection() que fariam esse papel pra mim?
E se eu implementasse esses métodos com uma chamada a minha classe? Assim:
Eu poderia até criar um outro método para fechar minhas conexões, mantendo minha conexão aberta e fechando somente o statement e o resultSet, para poder reutilizar a mesma connection.
????
|
"A única pergunta estúpida é aquela que você nunca faz"
Anônimo
Luiz Henrique Coura |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2005 10:44:51
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Quase. Pegar a conexao e tratar erros sao coisas do template. As classes filhas somente fazem o execute. Ficaria assim:
e entao, para usar, vc faz algo como
Veja que pegar a Exception no execute() e relancar uma RuntimeExeption eh para te livrar da necessidade de fazer try-catch nos lugares onde vc for usar o pattern.
Como voce ver, o seu codigo fica muito mais limpo, focando-se apenas na parte importante da tarefa.
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
|
|