Primeiro, a imagem:
Agora, o texto:
Desde que troquei as minhas funções diárias de arquiteto de soluções por gerente de projetos, meu tempo disponível para projetar e implementar de aplicações e frameworks praticamente desapareceu.
Houve épocas que fiquei mais de mes sem abrir o meu (inchado de plugins) Eclipse. Uma dor.
Mas ei que a vontade de programar é grande, e neste fim de semana voltei a um tópico que há muito eu queria explorar: a versão Web do Merlin.
Abaixo as taglibs, viva o GWT!
Detesto XML. E o mesmo vale para frameworks UI que usam conceitos relacionados, baseados em taglibs e coisas afim. Logo, pensar em usar JSF para implementar o Merlin é meio que ir contra os meus princípios (bom, pelo menos da forma nativa; posso falar nisso outra hora...).
Desde que vi os primeiros esboços do GWT, eu adorei. Usar código Java puro para desenvolver telas é, simplesmente, coisiboa!
Porém, o GWT tem limitações (várias, para dizer a verdade) e, delas, a ausência de reflection é um empencilho grande para o Merlin.
Felizmente, boas almas acabam criando meios para os outros poderem avançar, e nisso, projetos como o Gwt-ent, Gwittir, SmartGwt são uma mão na roda para o Merlin.
Não vou entrar (ainda) no mérito de todos eles, mas o Gwt-ent é o foco aqui.
Gwt-ent
Vou fazer uma analogia: Sabem a API Mirror do JDK, aquela que faz parte do Annotation Processing Tool (APT)? Bem, considero o GWT-Ent e outros semelhantes a mesma coisa.
Em outras palavras, pelo que entendi, o GWT-Ent e coisas afimm processam as classes Java que precisam sofrer reflexão (que precisam implementar uma interface em específico - vide abaixo), e a partir disso, geram meta-informações que são acopladas aos bytecodes finais.
Assim, esses frameworks conseguem simular acesso reflexivo no lado cliente em tempo de execução, quando o código está, na verdade, sendo executado em Javascript no browser.
Na prática, a idéia é simples, mas ao olhar o SVN dos caras realmente tiro o chapéu, visto que é um monte de código burocrático e repetivito.
As Possibilidades
Agora, com meu primeiro exemplo funcionando, desperto a fagulha de implementar a versão Web do Merlin com GWT.
É claro, que a imagem acima mostra apenas o uso da "pseudo reflexão" para acesso simples a propriedades e métodos acessores.
Para chegar a coisas complexas, como Injeção de Dependências, inserção de Agentes e Configuração Realimentada (que é a base do Merlin) o caminho é longo.
Mas eis que demos o primeiro passso.
O Futuro
E o que vem agora?
Bem, primeiro achar uma forma para injetar a interface Reflection ou a anotação @Reflectable automaticamente nas classes que precisam sofrer a reflexão, ou seja, no mínimo, todas as que foram o Modelo de Domínio do sistema.
Imagino fazer isso via uma biblioteca CGLib ou então usar o (adoro ele) Javassist, pensando já (como meu amigo J.) em alguma Task do Ant ou então um plugin para o Maven.
O mundo é grande e a caminhada é longa. Espero que me sobrem muitos finais de semana para trabalhar ainda.
At+