Apesar de raramente ser necessário ou mesmo recomendado, já passei por situações onde a persistência de sessão(HttpSession) do usuário tivesse como requisito de arquitetura a necessidade de ser persistida em base de dados quando normalmente o recomendado é fazer em memória por motivos de performance. Quando for necessário fazer isso com utilização de weblogic é
bem simples.
Primeiro precisamos da base de dados, neste exemplo vou usar o postgresql, que é free e fácil de usar e instalar. Fiz, a algum tempo, um
quickstart em um outro post que sempre me é útil.
Bem, uma vez instalado o postgres basta criar uma base de dados, que nesse exmplo tem as configurações:
-
Nome da Base: wl_session
-
Usuário: weblogic
-
Senha: weblogic
Feito isso deve-se criar a base de dados para persistência de sessão conforme
script disponibilizado, perceba que existem scripts específicos para diversos banco de dados como Oracle, DB2, etc.
Bem, neste caso utilizo o script que adaptei para o Postgres:
create table wl_servlet_sessions
( wl_id VARCHAR(100) NOT NULL,
wl_context_path VARCHAR(100) NOT NULL,
wl_is_new CHAR(1),
wl_create_time BIGINT,
wl_is_valid CHAR(1),
wl_session_values bytea,
wl_access_time BIGINT,
wl_max_inactive_interval INTEGER,
PRIMARY KEY (wl_id, wl_context_path) );
Após a criação da tabela na base baixar o driver e criar um pool de conexões no weblogic apontando para esta base. Neste exemplo utilizei os atributos de pool:
-
Nome do Pool: PostgresDS
-
jndi name do pool: jdbc/Postgres
Com o pool feito, é só configurar no weblogic.xml da sua aplicação web para utilizar o pool configurado, conforme no exemplo abaixo:
10.3.2
sessaodb
JDBC
PostgresDS
jdbc/Postgres
Pronto, agora ao acessar uma página da aplicação uma nova sessão será criada na base de dados e o weblogic irá persistir as sessões de usuário nesta tabela, enquanto as mesmas estiverem ativas, conforme a imagem abaixo ilustra.
Lembre-se que esta não é uma opção que melhor se adeque se sua aplicação precisar de foco em performance e escalabilidade e normalmente deve ser utilizada somente se for uma necessidade específica do projeto.
[]s