Suporte ao Gerenciamento de Sessão
O WebSphere Application Server fornece recursos, agrupados abaixo do título Gerenciamento de Sessão, que suportam a interface javax.servlet.http.HttpSession descrita na especificação Servlet API.
Em concordância com a especificação da API do Servlet 2.3, o recurso de gerenciamento de sessões suporta sessões com definição de escopo por módulos da Web. Apenas servlets no mesmo módulo da Web podem acessar os dados associados a uma sessão em particular. Diversas solicitações a partir do mesmo navegador, cada uma especificando um aplicativo da Web exclusivo, resultam em diversas sessões com um ID de sessão compartilhado. É possível invalidar qualquer das sessões que compartilham um ID de sessão sem afetar as outras sessões.
É possível configurar um tempo limite da sessão para cada aplicativo da Web. Um valor de tempo limite do aplicativo da Web igual a 0 (o valor padrão) significa que o valor de tempo limite de invalidação a partir do recurso de gerenciamento de sessões é utilizado.
Quando um cliente HTTP interage com um servlet, as informações de estado associadas a uma série de pedidos de clientes são representadas como uma sessão HTTP e identificadas por um ID de sessão. O gerenciamento de sessão é responsável por gerenciar sessões HTTP, fornecendo armazenamento para dados de sessão, alocando IDs de sessão e rastreando o ID de sessão associado a cada pedido do cliente através da utilização de cookies ou técnicas de regravação de URL. O gerenciamento de sessão pode armazenar informações relacionadas à sessão de várias maneiras:
- Na memória do servidor de aplicativos (o padrão). Estas informações não podem ser compartilhadas com outros servidores de aplicativos.
- Em um banco de dados. Esta opção de armazenamento é conhecida como sessões persistentes de banco de dados.
Em uma outra instância do WebSphere Application Server. Esta opção de armazenamento é conhecida como sessões memória a memória.
As duas últimas opções são referidas como sessões distribuídas. As sessões distribuídas são essenciais para utilizar sessões HTTP para o recurso de failover. Quando um servidor de aplicativos recebe um pedido associado a um ID de sessão que não existe atualmente na memória, ele pode obter o estado de sessão requerido, acessando o armazenamento externo (banco de dados ou memória a memória). Se o suporte a sessão distribuída não estiver ativado, um servidor de aplicativos não poderá acessar informações da sessão para pedidos de HTTP que são enviados a servidores diferentes daquele onde a sessão foi criada originalmente. O gerenciamento de sessão implementa otimizações de armazenamento em cache para minimizar código extra de acesso ao armazenamento externo, especialmente quando pedidos consecutivos são roteados para o mesmo servidor de aplicativos.
O armazenamento de estados de sessão em um armazenamento externo também fornece um grau de tolerância a falhas. Se um servidor de aplicativos ficar off-line, o estado de suas sessões atuais ainda estará disponível no armazenamento externo. Essa disponibilidade permite que outros servidores de aplicativos continuem processando pedidos de clientes subsequentes associados a essa sessão.
Salvar estados de sessão em uma localização externa não garante completamente sua preservação no caso de uma falha do servidor. Por exemplo, se um servidor falhar durante a modificação do estado de uma sessão, algumas informações serão perdidas e o processamento subsequente utilizando essa sessão poderá ser afetado. No entanto, esta situação representa um período muito pequeno de tempo quando há um risco de perda de informações da sessão.
A desvantagem de salvar os estados de sessões em um armazenamento externo é que acessar o estado da sessão em uma localização externa pode utilizar recursos valiosos do sistema. O gerenciamento de sessão pode melhorar o desempenho do sistema armazenando em cache os dados de sessão no nível do servidor. Vários pedidos consecutivos que são direcionados para o mesmo servidor podem localizar os dados de estado requeridos no cache, reduzindo o número de vezes que o estado real da sessão é acessado no armazenamento externo e, consequentemente, reduzindo a sobrecarga associada com o acesso à localização externa.
