Variável Global Java Web Servlet

Tenho uma aplicação Java Web Servlet e gostaria de saber se há a possibilidade de declarar variáveis globais ou Singletons que possam ser acessadas somente dentro da própria sessão?

Para exemplificar, a aplicação é acessada por vários usuários ao mesmo tempo e para cada acesso é criada uma sessão, que dá exclusividade para cada usuário. Porém, seu eu implementar uma variável global, dentro de uma classe controller que extende de um HttlServlet, e que esta variável esteja fora dos métodos doGet ou doPost, elas ficam expostas e qualquer sessão acaba acessando estas variáveis.

Gostaria de saber se há alguma forma de implementar estas variáveis globalmente, porém que estejam vinculadas somente a sessão aberta e que possam ser acessadas em qualquer classe da sessão.

Antigamente eu fazia isso através de um multiton.
Um multiton é praticamente um singleton onde tu obtém a instância única a partir de uma chave.
No caso eu usava o id da sessão como chave pra obter a instância.

1 curtida

Por favor, poderias me dar um exemplo simples de um multiton? Muito obrigado

import java.util.HashMap;
import java.util.Map;

public final class MinhaClasse {

    private static final Map<Chave, MinhaClasse> instancias = new HashMap<>();

    public static MinhaClasse getInstance(Chave chave) {
        MinhaClasse objeto = instancias.get(chave);
        if (objeto == null) {
            synchronized (instancias) {
                objeto = instancias.get(chave);
                if (objeto == null) {
                    objeto = new MinhaClasse();
                    instancias.put(chave, objeto);
                }
            }
        }
        return objeto;
    }

    private MinhaClasse() {}
}
1 curtida

Pelo que entendi, as sessões ficam gravadas no Map instancias, ou seja, à cada sessão nova criada, esta fica gravada no Map instancias.
Isto com o tempo não ficará com muitos registros?
Como posso fazer para limpar as instancias e liberar as sessões que não estão mais sendo utilizados?

Removendo-as do mapa.