Como obter HttpSession do container(JBoss, Tomcat), nao sendo atraves do request

Ola pessoal.

Preciso obter a id da httpSession corrente de minha aplicacao web, e isso nao pode ser atraves do request.getSession, pois nao estou no Servelet e sim no meio de uma classe java qualquer (nao sei se isso seria possivel, imagino eu que sim, penso que as instancias dos objetos estejam associadas ao httpSession de meu container(tomcat)).

Alguns vao questionar porque nao passo a session para dentro da classe java como parametro, aí vou responder que o sistema que ajudo a desenvolver é muito grande e seria impossivel alterar todas as jsp’s.

Preciso disso porque quero associar todas as conexoes do banco ao usuario logado ao meu sistema

Qualquer ajuda, ideia… eu serei bastante grato.

osmar85@gmail.com

Desenvolvedor Java

Olá.

Acredito que um listener pode te ajudar neste caso.
Você pode implementar o HttpSessionListener e quando a sessão for criada (método sessionCreated), você pode
colocar sua sessão em algum lugar que você possa pegar posteriormente (na sua classe não servlet).

Dependendo do que estiver sendo feito, você pode também adicionar uma instância da sua classe na sessão, e
implementar a interface SessionBindingListener na sua classe. E quando a mesma for associada na sessão ela
saberá quando foi adicionada na sessão e terá acesso ao objeto HttpSession que estará disponível no evento
SessionBindingEvent.

Apesar de não ter colocado uma solução prática, espero que estas idéias possam ajudar.

boa sorte.

Uma abordagem muito utilizada é utilizar thread local e Servlet filter.

Da uma olhada no link.

http://javaboutique.internet.com/tutorials/localdata/index-2.html

Regards Thiago Moraes

Ola adolfo_eloy
Armazenar as session nao é o problema, para isso pensei em criar uma “classe publica” com variaveis e metodos estaticos, tal classe possui um HashMap estatico que largo todas as httpSession dentro e as sessionid vao ser as chaves para retornor as session. A classe publica ficaria algo assim:

public final class ClassePublica {

    private static HashMap poolSessions;
    
    public static void setPoolSessions(HttpSession httpSession) {
        poolSessions.put(httpSession.getSessionId, httpSession);
    }

    public static HttpSession getHttpSessions(String sessionId) {
        return poolSessions.get(sessionId);
    }

} 

O problema é saber qual a minha sessionid lá no meio do codigo para eu buscar a session da classe publica

eita mundo cruel :?

Essa parte vou estudar melhor a noite:

Só para complementar, a classe publica acima é visivel para todas as sessoes do tomcat (isso é fato), se ao menos fosse transparente somente entre as sessoes!!!

Grato pela atencao!

Eu realmente não tinha pensado nisso. Pior que colocar isso num atributo do contexto da aplicação e gerenciar seria ruim em vários fatores
dentre eles a performance do servidor.

Boa sorte com as outras abordagens que sobraram.

Caso puder, depois poste qual foi a solução adotada pois pode ser legal p/ pessoas que tiverem o mesmo problema.

Valeu