Trabalhando com FlexSession
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.
