Salve pessoal,
Após ter recebidos alguns e-mails e ter visto a mesma dúvida nas listas de discuções resolvi criar um post sobre Gerenciamento de Sessão em aplicações Flex.
Apenas resaltando este é um assunto muito complexo este post não irá sanar todas as suas duvidas, mais irá lhe dar um Norte nos seus estudos. Em caso de duvidas leia a documentação do BlazeDS ou mande um e-mail.
Então vamos lá.
Gereciamento de sessão usando BlazeDS
O blazeDS nos fornece três classes para sincronização entre a aplicação Flex e Servidor, são estas: FlexClient, MessageClient e FlexSession.
Segue um breve resumo de cada ojbeto.
# FlexClient
Toda aplicação Flex escrita em MXML ou em ActionScript, ambas são compiladas e incluidas dentro de um SWF. Quando o SWF se conecta com o servidor BlazeDS, o objeto flex.messaging.client.FlexClient é criado para representar o SWF no servidor.
O arquivo SWF e o objeto FlexClient tem um relacionamento um-para-um (one-to-one), deste modo todo
FlexClient tem um identificador unico em sua propriedade ID, no qual o servidor BlazeDS gera.
# MessageClient
Se uma aplicação Flex contém um componente flex.messaging.Consumer, o servidor irá criar uma correspondente instância do objeto flex.messaging.MessageClient para representar a subscrição do estado do componente Consumidor (Consumer).
Todo objeto MessageClient tem um identificador único chamado clienteId.
BlazeDS pode gerar automaticamente um valor para o clientId, mas a aplicação Flex também pode definir um valor para a propriedade Consumer.clientId antes de chamar o metodo Consumer.subscribe().
# FlexSession
Um objeto FlexSession representa a conexão entre a aplicação Flex e o Servidor. Este ciclo de vida depende diretamente do protocolo subjacente, no qual é determinado pelos canais e parâmetros utilizados no Cliente e Servidor, respectivamente.
Se uma base de canal HTTP, tais como AMFChannel ou HTTPChannel, é utilizada na aplicação Flex, um objeto FlexSession é embutido numa sessao HTTP.
Se um canal HTTP se conecta a um servlet, o subjacente a sessão HTTP é um objeto J2EE HttpSession.
Todo este pequeno resumo acima pode parecer um bixo de 1000 cabeça mais conforme você for usando em
aplicações tudo isso ficará claro e simples.
# Relacionamento entre FlexClient, MessageClient e FlexSession
Um objeto FlexClient pode ter um ou mais intancias de FlexSession a ela associados, em função dos canais que Flex a aplicação utiliza.
Por exemplo, se a aplicação Flex usa um HTTPChannel e um FlexSession isso representa apenas um HTTP session criado pelo HTTPChannel no servidor.
Um FlexSession também pode ter um ou mais objeto FlexClient associadas a ele. Por exmeplo, quando o usuario abre a aplicação Flex em duas tabs no navegador dois objetos FlexClient são criados, porém o servidor considera dois separadores partilhando a mesma subjacente HTTP sessão.
Em termos de hierarquia, FlexClient e FlexSession são pares que existe uma relação entre pais e filhos FlexClient / FlexSession e MessageClient.
Resaltando Novamente: Sei que os explicações acima são bem complexas por isso é interessante que vocês parem um tempo e
leiam a documentação do BlazeDS para um maior entendimento do assunto, este post tem o intuito apenas de abrir a mente e dar um Norte.
## Exemplo Rápido e Fácil.
# Usando FlexContext com FlexSession and FlexClient.
A classe utilitária flex.messaging.FlexContext expõe o contexto atual sobre a execução do servidor, a mesma fornece acesso ao FlexSession e ao FlexClient.
Ela também fornece contexto global através do acesso MessageBroker, ServletContext, e ServletConfig instâncias.
O seguinte exmplo mostra uma classe Java que chama o metodo FlexContext.getHttpRequest() e pega do mesmo o objeto HTTPServletRequest e também chama o metodo FlexContext.getFlexSession() para obter o objeto de sessao atual.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| package br.com.fabielprestes
import flex.messaging.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionCorrente {
public HttpServletRequest request;
public FlexSession session;
public SessionCorrente() {
request = FlexContext.getHttpRequest();
session = FlexContext.getFlexSession();
}
public String getSessionId() throws Exception {
String s = new String();
s = (String) session.getId();
return s;
}
public String getHeader(String h) throws Exception {
String s = new String();
s = (String) request.getHeader(h);
return h + "=" + s;
}
} |
Então é isso pessoal na proxima parte irei demonstrar como utilizar o objeto ExternalInterface para trabalhar com as sessões, fiquem atento.
Dúvidas ou Sugestões deixem seu comentário.