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
-~----------~----~----~----~------~----~------~--~---

Responder a