Flex + BlazeDS : como o BlazeDS sabe o que executar?

sexta-feira, 17/07/2009 3:35 pm  

Um tópico um pouco avançado, sobre como funciona o BlazeDS, esta semana tive a necessidade no trabalho de efetuar o monitoramento de uma aplicação em produção que usa o BlazeDS, porém os parâmetros de monitoramento são definidos através de URLs, então como saber como definir o monitoramento para uma aplicação que usa o BlazeDS, por isto a necessidade de compreender como funciona internamento o BlazeDS.

Acredito que por curiosidade ou precisou por algum motivo compreender o funcionamento segue as minhas considerações.


Visão geral da comunicação:

Comunicacao FlexBlazeDS 1

Perspectiva 1

Comunicacao FlexBlazeDS 2

Perspectva 2


Então temos o seguinte fluxo, executado pelo BlazeDS até que ele chegue a minha respectiva classe e método a ser executado:

processamentoBlazeDS


Descrição:

1  – flex.messaging.MessageBrokerServlet.service(HttpServletRequest,HttpServletResponse)

2  – flex.messaging.endpoints.BaseHTTPEndpoint.service(HttpServletRequest,HttpServletResponse)

3  – flex.messaging.endpoints.amf.SerializationFilter.invoke(ActionContext)
é nesse filtro que é recuperado do InputStream do objeto Request, o objeto AMF para deserializar
o qual carrega um objeto ActionMessage

4  – flex.messaging.endpoints.amf.BatchProcessFilter.invoke(ActionContext)

5  – flex.messaging.endpoints.amf.SessionFilter.invoke(ActionContext)

6  – flex.messaging.endpoints.amf.LegacyFilter.invoke(ActionContext)

7  – flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(ActionContext)

8  – flex.messaging.endpoints.AbstractEndpoint.serviceMessage(Message)

9  – flex.messaging.MessageBroker.routeMessageToService(Message,Endpoint)

10 - flex.messaging.services.RemotingService.serviceMessage(Message)

11 – flex.messaging.services.remoting.adapters.JavaAdapter.invoke(Message)

chama a respectiva classe e método solicitadas pelo RemoteObject no Flex

12 – com.cwbfx.locadora.dao.FilmeDAO.list()

finalmente executa a classe do serviço e respectivo método solicitado lá do Flex, através do RemoteObject


Nota: A aplicação Adobe Flex que utiliza Remote Object efetua uma request para o servidor, e anexa o objeto da requisitação no Post da request, sendo esta com cabeçalho content-type:application/x-amf, o objeto recebido pelo BlazeDS inicialmente deserializado é um flex.messaging.messages.RemotingMessage, o qual possui os atributos:

- destination :: indica qual classe de serviço o BlazeDS deve usar

- operation :: indica qual método da classe de serviço que o BlazeDS deve chamar

- body :: caso a requisição tenha enviado algum objeto para o método a ser executado


espero que esta informação seja útil para mais alguém =]

, , , ,

Veja também:

Este post foi escrito por:

Erko Bridee - que escreveu 394 post(s).


Entre em contato

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

7 Comentários para este post

  1. Maicon Pinto:

    Cara ótimo post….

    Não consegui entender ainda o que está acontecendo na minha aplicação pois em alguns momentos ele não está enviando meu Cliente, pelo menos é isso que eu consigo ver no log:
    Quando não dá erro é enviado assim:

    [0] = (Typed Object #2 'br.com.empresa.bean.Cliente')

    Quando dá erro ( qndo fecha e abre o módulo novamente ) é enviado assim:

    [0] = (Object #2)

    Bom de qualquer forma parabéns e de repente quando alguém chegar aqui e tiver alguma idéia ou alguma experiencia com o BlazeDS e puder ajudar agradeço….

    Abraço aí Erko e + sucesso…

  2. erko:

    por algum motivo que não sei te explicar o seu objeto não está mapeado com o RemoteClass com isso ele envia um objeto AS3 padrão…

    a pergunta é a sua classe está dentro do módulo, ou na app que carrega o módulo? [apenas por curiosidade]

  3. Maicon Pinto:

    Opa,

    Erko a classe Cliente está dentro do pacote, dentro do meu projeto.

    Ela é carregada quando chamo o modulo na aplicação.

    Está declada como Bindable….
    [Bindable]
    private var cliente:Cliente = new Cliente;

    e depois eu envio o 'cliente' com as informações necessárias….

    meu Cliente tem o [RemoteClass(alias="br.com.empresa.bean.Cliente")]

    Uma coisa que eu não entendo é que sempre quando eu inicio a aplicação chamo um modulo ( ex Cliente ) para inserir dados ele funciona de boa, porém se eu fechar o modulo e abrir e tentar de novo dá este tipo de erro. E aí não funciona mais, mesmo que feche e abra o modulo.

    *isso acontece com todos os outros, então não deve ser algo estranho, é alguma coisa que eu tô deixando passar… mas oq?
    :|

    vlw pela ajuda… :D

  4. @eduarmstrong:

    Você está "descarregando" o módulo quando fecha a janela? Já tive problema com módulos usando o ModuleLoader. Faça algo como idDoComponente.unloadModule()

  5. Maicon Pinto:

    Opa Eudardo…

    Não tentei isso não… a princípio não acredito que seja isso, por que existe outra aplicação que esta rodando com o mesmo "padrão", hierarquia e aparentemente com a mesma configuração e não acontece isso…

    no entando agradeço a dica, e vou testar assim que der eu digo como resolvi…

    vlw abraços…

  6. Maicon Pinto:

    Erko consegui encontrar o erro da minha aplicação que estava dando aquele erro:

    Para carregar o módulo eu usava:

    private function loadModule($module:String):void {
    _assetModule = ModuleManager.getModule($module);
    _assetModule.addEventListener(ModuleEvent.PROGRESS, onProgress);
    _assetModule.addEventListener(ModuleEvent.ERROR, moduleError, false, 0, true);
    _assetModule.addEventListener(ModuleEvent.READY, moduleReady);
    _assetModule.addEventListener(ModuleEvent.UNLOAD, onUnload);
    _assetModule.load();
    }

    faltou no load "_assetModule.load(ApplicationDomain.currentDomain);"

    Espero que ajude alguém se outra pessoa esqueça deste detalhe!

  7. erko:

    opa legal, vlw por compartilhar o/

1 Trackbacks para este post.

  1. Flex + BlazeDS : como o BlazeDS sabe o que executar?:

    [...] Meu amigo Erko Bridee publicou recentemente em seu blog um artigo interessantissimo para quem não conhece a forma que o BlazeDS sabe o que executar. Para ler o artigo, clique aqui. [...]