Conexão?

Um Bean é um classe que possui uma certa padronização, entre elas o seu construtor não deve receber parametros … Para instanciar uma conexão utilizando um javaBean, imagino que teria que criar métodos para isso, certo? Porém isso não estaria fugindo as regras do javaBean? Ou melhor, qual a melhor forma de se criar uma conexão à um Bd através de uma aplicação JSP?







Grato

Volnei Granado Munhoz :wink:

Volnei, recentemente tive que fazer um trabalho para a universidade que era mais ou menos parecido com o que vc está falando. O que fiz foi o seguinte. Criei uma hierarquia de classes(dados->repositorio->cadastro->fachada) e, na fachada usei o padrão singleton(conhece?). Era nos repositorios que eu me preocupava com o conexao. Nas, jsp, eu tinha os beans, mas quando queria executar uma busca no banco usava a fachada. Acho que assim as coisas ficam melhor organizadas.



valeuz…

Olá Jack,



Pra falar a verdade estou meio perdido vamos as principais dúvidas:



Não conheço o padrão singleton :-[



Oque faz realmente a sua classe fachada?



Grato

Volnei Granado Munhoz :wink:

Bem, o trabalho que eu devia fazer era um biblioteca digital onde os usuarios se cadastravam e submetiam obras. Depois as obras poderiam ser buscadas por qualquer outro usuario. Isso é só pra vc ter uma ideia do que era o projeto.



Dito isso, eu tinha os seguintes Repositorios:

RepositorioObra

RepositorioUsuario

RepositorioAutor



Cada repositorio tinha metodos para realizar operações com banco. Depois, na camada superior eu criava os cadastros e na Fachada eu tinha os seguintes objetos:



CadastroObra

CadastroUsuario

CadastroAutor



Dessa maneira, a Fachada tinha todos os metodo desses cadastros. Ou seja, a minha fachada realizava todas as operações necessarias com o banco. Desde inserir e remover a fazer uma busca. Quando, nas jsp eu quiser fazer alguma operação chamo a fachada.



Agora o singleton:

Para evitar de ficar criando varias fachadas, uma para cada pessoa que acessasse o site, faz o seguinte na fachada:

1. Cria uma variavel de classe do tipo Fachada



public class Fachada {



private static Fachada singleton;



}



2. Cria um construtor que inicia todos os cadastros da Fachada mas que não modifica a variavel singleton:



public Fachada() {

cadObra = new CadastroObra();



}



3. Agora, o mais importante. Como o tomcat(e, acho, todos os containers) tratam cada acesso como um thread eu criava um metodo synchronized assim:

Code:


public static synchronized Fachada getFachada() {

if(singleton == null) {

singleton = new Fachada();

}

return singleton;

}






De maneira que, sempre que eu quiser acessar a fachada, eu uso esse metodo. Ou seja:



Fachada f = Fachada.getFachada();



ao inves de



Fachada f = new Fachada();



Isso garante que eu crie a fachada apenas uma vez e depois fique usando o singleton. A vantagem é ganho de tempo, já que criar uma fachada leva tempo. Imagine num projeto maior ficar instanciando 10, 20 cadastros. O metodo marcado como synchronized impede que dois threds tentem alterar o singleton ao mesmo tempo.



valeuz… :-]



ah…vc participa do forum da info tambem, certo?! :wink:



valeuz…

Pois é participo a algum tempo do fórum da Info, porém após conhecer esse fórum (portaljava) achei que é melhor pois aqui existem moderadores e o pessoal daqui parece mais disposto a ajudar!



Obrigado pela explicação acima!



Valeu



Volnei Granado Munhoz :wink: