Mário, consegui isolar o problema. Antes de iniciar o RemoteObject a minha aplicação usar HTTPService para consultar um xml e configurar o ChannelSet do RemoteObject. Por algum motivo, isso está fazendo com que ele crie uma seção para cada requisição. Vou postar aqui o código que estou testando:
1º) Cliente Flex ** Arquivo Main.mxml ** <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:ModuleLoader url="clientFlex.swf" width="100%" height="100%" id="clientFlex"/> </mx:Application> ** Arquivo clientFlex.mxml ** <?xml version="1.0" encoding="utf-8"?> <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; private var server:String; private var serverMap:String; private var serverDataPush:String; private function init():void { configUrl.send(); } public function handleConfigUrl(event:ResultEvent):void { var serverUrlXML:XML = XML(event.result.toString()); var url:String = "http://" + serverUrlXML.serverName + ":" + serverUrlXML.port + "/" + serverUrlXML.contextPath; server = url; serverMap = server + "/messagebroker/amf"; serverDataPush = server + "/messagebroker/amfpush"; myAmf.uri = serverMap; } public function getDate():void { ro.addEventListener(ResultEvent.RESULT, handleResult); ro.addEventListener(FaultEvent.FAULT, handleFault); ro.getDateTime(); } private function handleResult(event:ResultEvent):void { myLabel.text = event.result as String; } private function handleFault(event:FaultEvent): void { trace(event.message); } /** * Trata falhas ocorridas na leitura do arquivo que contém o endereço do servidor */ public function faultUrlConfig(event:FaultEvent):void { Alert.show(event.message.toString()); } ]]> </mx:Script> <mx:RemoteObject id="ro" destination="service" channelSet="{mapChannel}"/> <mx:HTTPService resultFormat="xml" id="configUrl" showBusyCursor="true" url="configUrl.xml" result="handleConfigUrl(event)" fault="faultUrlConfig(event)"/> <mx:ChannelSet id="mapChannel"> <mx:channels> <mx:AMFChannel id="myAmf" uri="{server}"/> </mx:channels> </mx:ChannelSet> <mx:Button x="107" y="220" label="Button" mouseDown="getDate()"/> <mx:Label x="360" y="222" id="myLabel" text="Label" width="110" fontSize="15"/> </mx:Module> ** configUrl.xml ** <conf> <serverName>localhost</serverName> <port>8080</port> <contextPath>/teste</contextPath> </conf> 2) Servidor ** Service.java ** package service; import java.util.Calendar; import flex.messaging.FlexContext; public class Service { private void showContext(){ System.out.println("Session Id -> " + FlexContext.getFlexSession ().getId()); System.out.println("Client Id -> " + FlexContext.getFlexClient ().getId() + "\n"); } public String getDateTime(){ showContext(); return Calendar.getInstance().getTime().toString(); } } Bem, o resto acho q vc já sabe. O destination do remoting-config.xml está configurado da seguinte forma <destination id="service"> <properties> <source>service.Service</source> <scope>application</scope> </properties> </destination> Fallow t+ On 10 fev, 19:29, Dam <[email protected]> wrote: > > 1) Remova o <scope>application</scope> e teste novamente o sessionId. > > Eu removi e ocorreu o mesmo problema =/ > > > 2) se id da sessao continuar mudando para a cada requisição, isole a situção > > em um exemplo bem simples e publique seus arquivos de configuração em algum > > lugar para que possamos ver e tentar adivinhar oq est[a acontecendo. > > Diga-nos tb qual o seu ambiente de desenvolvimento (onde essa situação está > > ocorrendo). > > Estou programando no Sistema Operacional WindowsVista, utilizando > o eclipse 3.4.0, Flexbuilder 3.0, tomcat 6.0.18, Java 1.6.0_07-b06 > > Eu fiz uma aplicação bem simples. Um cliente Flex e um servidor > que retorna um String contendo a data de hoje. E FUNCIONOU!!!! Ele > criava apenas uma sessão. > Eu passei a tarde remexendo e descobri algumas coisas. Acho que o > problema está no cliente Flex e não no servidor. Vou explicar > rapidamente como é o meu cliente Flex: > > O mxml principal (mx:Application) contém dois módulos > (mx:ModuleLoader). Um contém vários checkbox que quando o cliente > ativa ele envia uma requisição para o servidor. O outro é a janela > principal que mostra a resposta do que foi solicitado. O RemoteObject > é criado em um desses módulos. > > Eu fiz o seguinte teste: criei um RemoteObject no mx:Application e um > botão para fazer uma requisição qualquer usando esse RemoteObject e um > outro botão dentro de um mx:ModuloLoader que faz a mesma coisa usando > o RemoteObject que estava dentro desse mx:ModuloLoader. E advinha qual > foi o resultado?! Quando eu clicava várias vezes no botão do > mx:ModuloLoader ele criava uma seção para cada requisição, porém o > botão do mx:Application criou apenas uma seção não importando quantas > requisições eram feitas. > > No início eu achava que era por causa do mx:ModuleLoader, mas eu fiz > um teste criando um mx:ModuleLoader naquela aplicação de exibir a data > e ele funcionou perfeitamente. > > Bem, se não houver uma explicação razoável vou criar um RemoteObject > no mxml principal para tratar todas as requisições. > Eu ainda não testei o caso do datapush (Consumer). Isso vai ficar pra > manhã. > > Qualquer novidade eu posto aqui pra lhe manter atualizado. > > Valeu cara! > t+ > > On 9 fev, 21:07, Mário Júnior <[email protected]> wrote: > > > Hum... do Messaging tudo ok, parece q o problema está nessa criação da > > sessao. > > > Muito estranho ele criar uma nova sessão a cada requisição... isso não pode > > acontecer. > > Faça outros dois favores: > > > 1) Remova o <scope>application</scope> e teste novamente o sessionId. > > > 2) se id da sessao continuar mudando para a cada requisição, isole a situção > > em um exemplo bem simples e publique seus arquivos de configuração em algum > > lugar para que possamos ver e tentar adivinhar oq est[a acontecendo. > > Diga-nos tb qual o seu ambiente de desenvolvimento (onde essa situação está > > ocorrendo). > > > T+ > > > 2009/2/9 Dam <[email protected]> > > > > Olá Mário, > > > > Obrigado por ter respondido. > > > Então vamos lá... > > > > ##### TESTE 1 ###### > > > Eu não sei como pegar a instância da Classe FlexContext. Eu achava que > > > era um singleton, mas não encontrei nenhum método para obter a > > > instância. Eu fiz da seguinte forma: > > > > toda vez que o servidor era requisitado eu imprimia no log o > > > "clientId" e o "sessionId" através dos seguintes comandos: > > > > FlexContext.getFlexSession().getId() > > > FlexContext.getFlexClient().getId() > > > > O resultado é que todas as sessionId são diferentes e os clientId são > > > iguais (o que era esperado). > > > Quando acesso o serviço por outro browser, o clientId é diferente (até > > > aqui Ok) e os sessionId são diferentes a cada requisição (como vem > > > acontecendo). > > > > ##### TESTE 2 (Messaging) ###### > > > > O log do BlazeDS imprime a mensagem abaixo logo depois de > > > "consumer.subscribe()" . De acordo com esse log, o clientId é null =/ > > > > [BlazeDS] Channel endpoint my-datapush received request. > > > [BlazeDS] Deserializing AMF/HTTP request > > > Version: 3 > > > (Message #0 targetURI=null, responseURI=/1) > > > (Array #0) > > > [0] = (Typed Object #0 'flex.messaging.messages.CommandMessage') > > > operation = 5 > > > correlationId = "" > > > body = (Object #1) > > > headers = (Object #2) > > > DSMessagingVersion = 1 > > > DSId = "91C38785-4C18-7147-B8DE-F0A9A49B8811" > > > timeToLive = 0 > > > messageId = "61D5A64D-8D5C-2827-A49F-5CE2818B1033" > > > timestamp = 0 > > > clientId = null > > > destination = "" > > > > [BlazeDS] Serializing AMF/HTTP response > > > Version: 3 > > > (Message #0 targetURI=/1/onResult, responseURI=) > > > (Externalizable Object #0 'DSK') > > > (Object #1) > > > DSMessagingVersion = 1.0 > > > DSId = "91C38785-4C18-7147-B8DE-F0A9A49B8811" > > > 1.234213962129E12 > > > (Byte Array #2, Length 16) > > > (Byte Array #3, Length 16) > > > (Byte Array #4, Length 16) > > > > On 9 fev, 10:46, Mário Júnior <[email protected]> wrote: > > > > Muito estranho esse comportamento.. receio q haja algum problema com o > > > > container (oq é muito difícil de acontecer tb) > > > > > Com o Remote Object vamos fazer 2 testes: > > > > ##### TESTE 1 ###### > > > > 1) Faz o seguinte mano, no construtor da sua classe de serviço vc pega o > > > > contexto e guarda num atributo privado da classe. > > > > 2) na execução do seu método, vc faz um simples println do session_id. > > > > > 3) chame o método várias vezes e verifique se o id da sessão é alterado > > > > a > > > > cada chamada. > > > > > Restulado esperado: o session_id TEM q ser sempre o mesmo para essa > > > > aplicação > > > > > ##### TESTE 2 ###### > > > > Sem fechar a aplicação anterior, Abra a mesma aplicação flex em outro > > > > browser e chame o método novamente. > > > > Resultado esperado: o session_id dessa nova aplicação TEM q ser > > > > DIFERENTE > > > do > > > > sesison_id criado pela aplicação anterior > > > > > Já com relação ao Messaging: > > > > 1) dê uma olhada no log do blaze (lembrando q o logging precisa estar > > > > ativado (true) no services-config.xml) e verifique se um clientID é > > > criado > > > > no momento q o consumer é inscrito (subscribe). > > > > > Dá um retorno pra gente saber. > > > > > Um abraço e boa sorte. > > > > > 2009/2/9 Dam <[email protected]> > > > > > > Bom dia pessoal, > > > > > > estou tendo um problema grave de gerenciamento de seções. A situação é > > > > > a seguinte: > > > > > > estou trabalhando com um servidor Tomcat+Blaze DS. O canal está > > > > > definido como AMFChannel no arquivo services-config.xml: > > > > > > <channel-definition id="my-amf" > > > > > class="mx.messaging.channels.AMFChannel"> > > > > > <endpoint url=" > > >http://localhost:8080/servidor/messagebroker/amf > > > > > " > > > > > class="flex.messaging.endpoints.AMFEndpoint"/> > > > > > </channel-definition> > > > > > > No arquivo remoting-config.xml eu informo qual a classe que > > > > > representará o RemoteObject no Flex: > > > > > > <destination id="service"> > > > > > <properties> > > > > > <source>controller.Service</source> > > > > > <scope>application</scope> > > > > > </properties> > > > > > </destination> > > > > > > Depois, no cliente Flex, eu crio um RemoteObject quando o modulo mxml > > > > > é carregado. Toda vez que clico em um botão na interface Flex ele > > > > > chama uma função do meu RemoteObject. > > > > > > Ok, agora vamos ao problema =P > > > > > > Pra quem está acostumado a usar o Tomcat, as versões mais novas vem > > > > > com um contador de seções na parte de gerenciamento de aplicações. O > > > > > que eu observo é que toda vem que eu chamo o RemoteObject o cliente > > > > > Flex cria uma nova seção. No início eu achava que era pq ele estava > > > > > criando vários RemoteObject, mas agora eu constatei que apenas 1 é > > > > > criado. > > > > > > Alguém sabe como fazer para ele não criar uma nova seção toda vez que > > > > > o Flex faz alguma requisição para o servidor? > > > > > > E este é apenas um caso simples. A coisa piora quando eu uso data > > > > > push. Quando eu crio um Consumer no Flex pra ficar ouvindo um > > > > > determinado cannal, ele fica criando seções indefinidamente =/ > > > > > -- > > > > Mário de Souza Júnior > > > > Programador Java / Adobe Flexhttp://blog.mariojunior.com > > > -- > > Mário de Souza Júnior > > Programador Java / Adobe Flexhttp://blog.mariojunior.com --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para [email protected] Para sair da lista, envie um email em branco para [email protected] Mais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---
