Ciclo de vida de um Singleton no TomCat

8 respostas
AGAraujo

Bom dia!

Estou com um problema básico e tentei algumas configurações e não consegui configurar.

O problema é o seguinte! Um classe Singleton é instanciada ao fazer o login no site. Para destruí-la estou enviando o valor nulo para o controle desta instância ao fazer Logout, mas e quando o cara não acessa o logou, qual a melhor forma de destruir esta instância? Há uma configuração no Tom Cat para resolver isto pra mim? Eu preciso trabalhar com Session?

Vlw e obg

8 Respostas

ignacio83

Porque vc quer destruir um Singleton, um singleton nunca deveria ser destruído até que a aplicação seja encerrada.

O que vc está querendo fazer realmente se parece mais com ciclo de vida de objetos, no seu caso acredito que utilizar Session seja a melhor opção.

AGAraujo

E ai blz?

A idéia é que se a aplicação ficar mais de 5 minutos sem atividade o singleton seja destruido e somente recriado numa próxima chamada. É uma regra especifica do negócio, e acredito haver outras soluções, mas por enquanto está está sendo a melhor, exceto por este contratempo.

Talvez a session resolva este problema, mas agora me coloquei na posição de entender o porque do problema, entende?!

Será que poderiam então me explicar como funciona o “ciclo de vida” deste singleton no TomCat quando não crio session? Sincronizar seria também parte da solução?

Valeu e obg.

P.S. Se souberem de artigos que tratem disto tambem eu agradeço.

fabiofalci

Vc não está usando spring?

Se sim, dá uma lida aqui
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-scopes

AGAraujo

Não estou usando spring não. Mas me ajudou sim!

Se alguém tiver mais algumas sugestões adoraria conhecê-las.

Obg

fabiofalci

Uma sugestão é colocar no google “singletons are evil” e ler os links! :wink:

AGAraujo

Já estou fazendo isto!

Outras?!

Z111

seria possível implementar um timer dentro dele?

o timer seria zerado a cada acesso?

uma solução meio lusitana, mas …

AGAraujo

Opa Z blz??

Bom resolvi da seguinte forma…

criei uma fabrica de objetos e adicionei a propriedade “Date createdin”.
E ao chamar a minha classe singleton uma nova operação é realizada, a comparação de tempo atual e de inicio, fazendo com que uma nova instância seja criada se o tempo for maior que 10 minutos.

funfou!

Se alguem tiver outra ideia gostaria de conhecer.

Criado 30 de março de 2009
Ultima resposta 30 de mar. de 2009
Respostas 8
Participantes 4