É provável que haja concorrencia para requisições simultaneas? Se duas requisões chamrem o getDados() simultaneamente, é possivel que o metodo retorne os mesmos valores para ambas requisições???
Tem problema em trabalhar sempre com a mesma instancia???
Valeu.
Depende de como vc implementou os seus metodos, se eles usam variáveis de instância vai dar problema sim.
LN2EE
e ae ?
vc pode ter seus metodos save(Cliente cliente), delete(Cliente cliente),
getPK(int cogidoPK), sincronizados, isso acaba com seu problema.
porem vc vai perder performance.
assim vc pode ter varias instancias dessa classe e estar rodando save e delete ao mesmo tempo, por exemplo em instancias diferentes.
Abraços
cv1
Hmmmm… pq vc esta usando singleton, Thiago? Nao faz mto sentido pra mim
thiagorani
Para não ter muitas instancias no servidor.
Se eu fizer assim, insert(int cod, String desc), nao terei problema de concorrencia, certo?
ozielneto
Ola Thiago…
Os DAOs são uma importante ferramenta dentro do desenvolvimento Web… Realmente não faz sentido tentar evitar suas instancias, pois cada requisicao deve usar uma Connection isolada… OU seja… Dentro do Modelo Web…
Para uma requisicao, de um usuario, o Servlet Controller, chama um objeto de Facade que instancia um DAO fazendo todas as transacoes necessarias, usando uma unica conexao… Assim se essa transacao comitar ou der rollback, nao interferira em outras…
Por isso cada instancia do DAO esta ligada a uma conexao durante uma requisicao…
Por isso nao faz sentido um DAO ser Singleton… O que faz sentido e uma FactoryDAO ser Singleton…
[]'s
Oziel.
LN2EE
Se vc tiver usando o pool de conexões do app. server(JDNI–> tomcat, jboss, etc), não precisa se preocupar em sincronizar os metodos, pois o pool já é sincronizado.
thiagorani
A estrutura do projeto aqui é jsp/bean/Classe(insert,delete,update).
cv1
cara, eu ate agora nao tou convencido de que vc precisa de um singleton.
thiagorani
Qual o problema em usar um singleton???
Rafael_Steil
Eh que a tua classe nao parece ter um estado… o insert/update/delete sao independentes uns dos outros, o que te levaria a declarar eles como static ao inves de usar o getInstance()
Rafael
Z
ZehOliveira
Em quais casos é vantajoso declarar um método getInstance()?
cv1
Nenhum, por mais estranho que isso possa parecer… Singletons são anti-patterns
louds
“cv”:
Nenhum, por mais estranho que isso possa parecer… Singletons são anti-patterns ;)
Depende cv. Se a resposta da pergunta “ter uma segunda instancia é problema?” for sim e usar uma factory está fora de questão, singleton é um pattern muito bom.
Mas como todo mundo usa singleton como fast-lookup, ele acaba sendo sempre sinal de má práticas de desenvolvimento.
Z
ZehOliveira
O que seria um fast-lookup?? HEheheHeH
louds
É uma forma facil de obter uma instancia de um objeto.
Imagine que um objeto precise de um setup não trivial, é natural voce não querer ter que repetir isso sempre, a solução é usar um objeto já ‘pronto’, para isso existem varios patterns que resolvem isso, como Factory e Object Pool. Singleton também oferece isso, uma forma prática de obter uma instancia do objeto.
cancao
Um DAO ser um singleton é um negocio meio sem sentido mesmo. Mas, vc só vai ter problemas se usar atributos desse DAO dentro dos metodos, por exemplo, a mesma connection. Se todas as variaveis forem locais ao metodo, creio que não há problema.
Pode até ser, mas não é mais logico que a FactoryDAO seja uma AbstractFactory?! Eu nem acho que as classes concretas filhas da AbstractFactory precisem ser um singleton.
Até.
Daniel_Quirino_Olive
Singleton em projetos J2EE é, em 90% dos casos, como dar um tiro de rifle calibre 12 no seu próprio pé (não achei exemplo mais sutil). Você vai ou ter problemas com consistência de estado do seu sistema ou então, se você resolver sincronizar todas as operações, criar um gargalo monstruoso no seu sistema. Quer fazer acesso a banco de dados? Então melhor não inventar: usa o pool de conexões do seu servidor.
richardpeder
é isso ae Daniel…pelo o que estavamos conversando, usar singleton em projetos WEB em que haverá multi acesso pode tornar, em determinado momento, a aplicação terrivelmente perigosa…onde, as vezes,por exemplo, do nada pode haver queda na conexao com o BD, e o usuario nem saber o que ta rolando…inserçã de dados errado, entre outras coisas…tipo, pelo que vc me disse, acho que é mais ou menos por ae…
ate mais…
thiagorani
Galera,
No exemplo de Struts da JM6, o autor usou singleton em suas facades, isso está errado?
Em uma aplicacao de cadastro, consulta, etc não vejo problema usar um singleton que tenha seus atributos locais nos metodos.
Legal que o POST gerou vários outros POST.
Vamos continuar apresentando ideias.
Valeu.
cv1
Nao tem o menor sentido economizar uma instancia de um objeto como um facade, Thiago - a menos que o seu facade esteja tao gordo a ponto de ser um problema, e neste caso nao eh transformando o bicho num singleton que vai resolver.
Eu disse que singletons sao um antipattern no caso de aplicacoes J2EE pq vc, em 99% dos casos, esta querendo resolver o problema certo da forma errada. O problema eh o de se conseguir uma referencia para um servico (nesse caso, uma instancia do seu TDG), e vc resolve ele fazendo com que so exista uma instancia do servico, e por consequencia uma unica referencia pra ele… meio extremista, nao?
richardpeder
eh cv…
acredito que somente em extremo que seria fieto somente uma instancia…acho que se isso nao gera problemas extremos para a aplicação, não existe o pq do singleton…
tava falando com o Daniel sabado de madruga e ele me disse isso…que somente em casos especificos (utilização nao multi thread de objetos, mais ou menos isso… ), podemos utilizar o singleton.
ate mais…
thiagorani
“cv”:
Nao tem o menor sentido economizar uma instancia de um objeto como um facade, Thiago - a menos que o seu facade esteja tao gordo a ponto de ser um problema, e neste caso nao eh transformando o bicho num singleton que vai resolver.
Eu disse que singletons sao um antipattern no caso de aplicacoes J2EE pq vc, em 99% dos casos, esta querendo resolver o problema certo da forma errada. O problema eh o de se conseguir uma referencia para um servico (nesse caso, uma instancia do seu TDG), e vc resolve ele fazendo com que so exista uma instancia do servico, e por consequencia uma unica referencia pra ele… meio extremista, nao? ;)
O que voce faria nessa situação?
Como eu disse a estrutura aqui é jsp/bean/Facade. Os jsp submetem a si mesmo, setando os parametros para o bean, que veridica a acao efetuada no formulario e chama a facade para executar a acao(insert(),update(),delete(),getLista()).
É preferivel sempre executar um Facade facade = new Facade() no bean? É isso que voce faria cv? E deixar o GC fazer seu papel?
Luca
Olá
Thiago, o que é JM6?
No google mostrou: Pesquisa de jm6 na Web. Resultados 1 - 10 de 8,270. A pesquisa demorou 0.16 segundos
Pessoal valeu pelos POST.
Cheguei a uma conclusão:
Com singleton ocorreu uma queda na performace da aplicação! Fiz vários testes aqui e isso foi detectado!
É mais performático utilizar MinhaClasse classe = new MinhaClasse().