Singleton em aplicação web tem algum problema?

8 respostas
T

Caros, tem esse trecho de código de uma classe Dao.

A minha dúvida é tem algum problema usar a mesma instância com vários clientes acessando?

public static ClienteDao getInstance() {
		if (singleton == null) {
			singleton = new ClienteDao();
		}
		return singleton;
	}

Nas servlets de controle sempre faço assim:

ClienteDao clDao = ClienteDao.getInstance();

8 Respostas

fbmanhani

Olha só…problema acho q não tem não …mas é melhor que você implemente os seus métodos de persistência como synchronized para que não haja conflitos na hora em que vários usuários acessarem o mesmo método. Isso pode comprometer a performance do sistema também. Pense bem se há necessidade dessa forma de implementação.

Abrax.

bruxel

bem, eu utilizo singleton tb em minhas aplicações WEB, e tento sempre re-utiliza-las para aplicações desktop, ex: toda a minha regra de negócios eu a re-utilizo em ambos os ambientes, teria algum problema, ou algo de deveria observar ?

tnaires

Você terá problemas a partir do momento em que você distribuir a parte server-side da aplicação entre várias máquinas. Você terá um singleton por JVM.
No mais, trate os problemas de concorrência, conforme os colegas indicaram. Acho que o mais seguro é inicializar seu singleton num bloco static.

T

Não coloquei o tipo:

private static ClienteDao singleton;

Também utilizo em desktop, mas a grande duvida foi quando fiz para web.

Mas blz, valeu pela ajuda, de todos. :smiley:

http://www.guj.com.br/posts/list/60108.java

L

Singleton não é recomendado em ambiente Java EE, pois os application servers possuem vários [google]classloaders[/google]. E cada classloader terá sua instância de singleton, que deixa de ser única.

Se você realmente precisar de um Singleton coloque uma instância em escopo de application.

Uma alternativa bem nojenta, é criar um ServletContextListener para interceptar a inicialização do Servlet. Lá, jogue uma instância do seu singleton no ServletContext.

Michel_Sancovich

Cara, de boa, nao utilize singleton para Java EE…
pq se utilizar vai perder mto tempo com buracos para tapar…

bruxel

leandro

e quais seriam os problemas ocorridos de se utilizar singleton em web ?

bruxel

michel,

esses problemas seriam a curto ou longo prazo ?

Criado 7 de outubro de 2008
Ultima resposta 7 de out. de 2008
Respostas 8
Participantes 6