sexta-feira, 2 de julho de 2010

Google App Engine + Adobe Flex - Parte 2

Seguindo a série GAE + Flex, vou falar um pouco dos problemas que encontrei ligados ao Flex, mais especificamente à comunicação remota.
Inicialmente eu decidi utilizar o BlazeDS por ser a versão fornecida pela própria Adobe, mesmo ele constando na documentação do GAE como não suportado. Como tinha acabado de sair a versão do Spring Flex (ver referência a ele no post anterior) junto com a então nova versão do Spring (3.0.2) fui tentar utilizar para ver se a nova versão já corrigia o problema de compatibilidade.
 Localmente tudo funcionou direitinho, mas aí aprendi uma grande lição, que vale para vários outros casos, quando se usa o GAE: só porque a aplicação roda localmente, não quer dizer que ela funcione no servidor.
Na própria documentação havia um workaround para o problema, mas ela envolvia alterar o fonte do Blaze e recompilar o jar. Por questão pessoal não gosto de soluções que eu tenha que alterar o fonte de um framework, afinal, e quando a versão mudar, quem garante que a alteração será compatível? Vou ter que ficar dando manutenção em framework para fazer as coisas funcionarem? Vou depender de alguma pessoa para consertar o problema?
Uma vez que não fiquei feliz com a alternativa, fui pesquisar para saber se por acaso a Adobe pretendia resolver o problema e encontrei a questão já levantada no Jira deles. Ou seja, simplesmente eles fecharam a issue, o que pra mim indica que não pretendem consertar tão cedo. Apenas deixei meu comentário no Jira deles e foi pesquisar outras alternativas.
A solução veio da própria documentação supracitada do GAE: o GraniteDS. Ele é compatível com o GAE e  para minha surpresa, a documentação dele é bem simples, até mais que a do Blaze, incluindo ainda documentação sobre como integrar o mesmo com Spring e com EJB. Fiz o teste para chamadas remotas e funcionou direitinho. Estava escolhida então minha tecnologia para comunicação Java - Flex.
 Outra grata surpresa do Granite é que ele diz que resolve (não testei para ver) o problema de LazyInitializationException lançada pelo Hibernate, que ocorre quando se serializa objetos de domínio diretamente utilizando o BlazeDS. Quanto a esse problema de Lazy Loading, prentendo abordar em um post futuro.
Então o resumo da ópera é que se você pretende usar FLEX + GAE, GraniteDS é uma solução simples e direta.

 Espero que a dica ajude e aqueles que se interessem por Flex, GAE ou GraniteDS e entrem em contato para que possamos trocar experiências.

 Até o próximo post...
Postar um comentário