Armazenamento de informações em memória

3 respostas
E

Bom dia a todos.

Algumas dúvidas surgira na equipe de desenvolvimento daqui.
Vou tentar explicá-la da melhor forma possível, caso hajam novas dúvidas, estarei de prontidão para respondê-las.

Quando subimos uma determinada servlet para a memória, esta cria uma nova instância a partir do “zero” ou é feita uma cópia de uma matriz que está disponível na JVM, quando inicializamos o servidor?

O questionamento surgiu quando foi solicitado que uma classe estática, evocada na primeira servlet instânciada, alimenta algumas informações em suas variáveis e objetos públicos, como senhas e afins.
Como a classe está como novos valores e em memória, a idéia seria que, qualquer instância de objeto ou thread de servlet que fosse montada consiga acessar esses valores disponíveis na memória.

Quando executamos alguns processos de uma servlet “Portal” em seu método init, estes ficam em memória para todas as servlets ou para cada instânciação o init é executado novamente?

Grato pela atenção.
Ederson.

3 Respostas

_fs

Cara, se você está tentando armazenar algo como todos os logins no sistema, pode fazer algo assim

private static StringBuffer pessoasLogadas;

if( pessoasLogadas == null )
    pessoasLogadas = new StringBuffer();
else
    pessoasLogadas.append( minhaPessoaBatuta );

Logo não importa quantas referencias a esta classe sejam feitas, o StringBuffer ‘pessoasLogadas’ vai manter os valores anteriormente adicionados.

E

Boa tarde.

Muito obrigado pela resposta, mas estava procurando algo um pouco mais específico, como:

  • Comportamento da classe no JVM;
  • Formas de acesso;
  • Manipulaçao de seus dados.

Depois de dar uma pesquisada na net, acabei chegando ao site da Vanessa Sabino (Bani), que respondeu as minhas dúvidas.
As informações que coletei estão no seguinte link:
http://www.linux.ime.usp.br/~bani/java/scjp-modificadores.htm

Novamente agradeço sua ajuda, pois me deu novas idéias para implementá-la.

[]s.
Ederson

Bani

Bom, o tópico aqui já tem alguns dias então você já deve ter encontrado alguma forma de fazer o que você queria.
Mas como você acha que encontrou as informações que precisava no meu site, para ficar com a consciência tranquila preciso avisar que no link que você mencionou apenas explica o comportamento bem por cima do static, o que deve ter solucionado sua dúvida sobre guardar as informações de classe static
Porém na sua primeira mensagem você fala em instâncias de servlet, método init e por aí vai. É preciso tomar muito cuidado com isso, pois o comportamento das classes servlet dependem muito de onde elas estão rodando e da forma como foram criadas! Por exemplo, o conteiner pode criar umas instância para cada requisição ou ficar reaproveitando a mesma.
Além disso, essa solução de usar uma classe estática para armazenar valores não é muito escalável, já que para ela ser acessada deve estar na mesma JVM. E se realmente é apenas para armazenar valores, o melhor então é usar o objeto ServletContext, que serve justamente para isso e é melhor controlado pelo conteiner.

Criado 20 de abril de 2004
Ultima resposta 16 de mai. de 2004
Respostas 3
Participantes 3