Qual a melhor maneira de pegar uma conexão?  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Luiz Henrique Coura
Java Ninja
[Avatar]

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
[MSN]
Rafael Steil
Administrador
[Avatar]

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
[Email] [WWW]
Luiz Henrique Coura
Java Ninja
[Avatar]

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
[MSN]
Rafael Steil
Administrador
[Avatar]

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
[Email] [WWW]
Luiz Henrique Coura
Java Ninja
[Avatar]

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
[MSN]
Rafael Steil
Administrador
[Avatar]

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
[Email] [WWW]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team