Pular para o conteúdo principal

GWT DevMode com EJB

Este ano estamos iniciando nossa convivência com sistemas interativos via web e escolhemos o Google Web Toolkit para nos apoiar, convictos em jamais usar pré-processamento de HTML no servidor.

Enquanto este toolkit (na versão 2.4) nos pareceu desde o início uma coisa totalmente excelente, uma preocupação se manteve firme: o ciclo de desenvolvimento ótimo do GWT exige o uso do DevMode.

O DevMode do GWT é um truque excelente que permite ao desenvolvedor usar um depurador Java para rastrar a execução do programa que roda no user agent. Como GWT é fundamentalmente um compilador de Java para Javascript, depurar o código-fonte de produção seria no mínimo desagradável.

A configuração padrão do DevMode (na versão 2.4) inclui o web container Jetty para servir o HTML, JS, CSS, Servlets e tudo o mais que compõe o programa. O Jetty é um container simples e não inclui, entre outras coisas, uma implementação de JPA ou EJB.

Ora, como este projeto pode permanecer confortável? Eventualmente a "camada de negócio" deverá ser movida de Servlets GWT para componentes EJB. Será preciso embutir um ejb container no projeto e fazer as ligações manualmente?

Não! É perfeitamente possível usar o GWT DevMode com seu servidor de aplicações favorito!

O fato é que o DevMode não exige o Jetty e na realidade é totalmente independente do seu web container. O DevMode é um serviço que oferece algum tipo de interface RPC usada pelo próprio programa GWT.

É possível usar o DevMode com o programa implantado em qualquer web container. É possível, por exemplo, implantar o programa no JBoss AS 7 e então usar um user agent qualquer para acessar o endereço publicado pelo JBoss AS 7 com o DevMode.

Para fazer isso é necessário:
  1. acrescentar o parâmetro -noserver aos argumentos do DevMode
  2. modificar o parâmetro -startupUrl , nos argumentos do DevMode, para o local de publicação do seu programa
 Estas coisas são facilmente realizadas na Debug Configuration do Eclipse.

Para depurar completamente o seu programa, você deve:
  1. iniciar o servidor de aplicação no modo Debug
  2. publicar seu programa no servidor de aplicação
  3. iniciar o GWT DevMode configurado adequadamente
Desse modo, para um programa publicado em http://localhost:8080/sandbox, o GWT DevMode instruirá você a acessar o endereço http://localhost:8080/sandbox?gwt.codesvr=127.0.0.1:9997 ou algo parecido.

Observe que o endereço do GWT DevMode é um argumento para o programa Javascript; a ligação entre uma coisa e a outra é indireta o suficiente para permitir o programa ser hospedado em um servidor de aplicação completo, sem prejudicar o ciclo de desenvolvimento.

Comentários

Postagens mais visitadas deste blog

Análise vs. Projeto

Eu diria que a ruptura entre Análise e o Projeto acontece quando acabam as considerações sobre o problema e começam as considerações sobre a solução. Em outras palavras, o papel do Analista é considerar o problema, enquanto o papel do Projetista é o de considerar a solução. Assim, o Analista aparece quando um problema aparece, e dá lugar ao Projetista quando o problema foi devidamente analisado, restando produzir para ele uma solução. E diria que a ruptura entre a Especificação e a Implementação acontece quando acabam os artefatos para consumo por humanos e começam os artefatos para consumo por máquinas. Em outras palavras, o papel do Especificador é produzir artefatos para consumo por humanos, enquanto o papel do Implementador é produzir artefatos para consumo por máquinas. Assim, o Especificador aparece quando a atividade é produzir efeitos sobre humanos, e dá lugar ao Implementador quando os humanos estão devidamente satisfeitos e a atividade prossegue para produzir efeito...

JNDI e Plan 9

Acabei de realizar quão similar é o J2EE e o Plan 9 quando observados pela lente da arquitetura de componentes: no Plan 9, o sistema de arquivos é tão capaz quanto o JNDI no J2EE. Um componente no qual eu estou trabalhando agora depende de um componente de banco de dados e de um componente de correio eletrônico. O modo de ligação entre esses componentes se dá através de JNDI: meu componente faz referência aos nomes "dataSource" e "mailSession" no seu contexto local de nomes. Na configuração do componente em uma instalação, esses nomes locais são ligados aos nomes globais que o administrador preparou para oferecer as dependências. É claro que tanto o meu componente quanto suas dependências mantém um contrato entre si, na forma das interfaces java EntityManager e Session. No Plan 9, meu componente seria um programa que faz referência a dois arquivos no seu file system -- um arquivo que repr...

O Problema de Gestão de I/O

A palestra que dei no Sétimo Encontro do Grupo de Usuários de C e C++ do Brasil apresentou meu resultado atual na pesquisa de um framework baseado em uma forma de orientação a aspectos em C++ descrita no "Modern C++ Design" do Alexandrescu. Minha palestra não apresentou, porém, o que é exatamente o problema a resolver, assumindo que fosse razoavelmente conhecido. Seu foco foi apresentar todos os mecanismos disponíveis para se resolver o problema no Linux 2.6, suas peculiaridades e seus aspectos comuns. Uma certa razão me motivou, após esta apresentação, a rebobinar meu raciocínio e considerar o problema original. [1] O que há exatamente de tão problemático na gestão de I/O em um programa? A imagem inicial é a de um programa cujo objetivo é interagir com um dos dispositivos ligados ao computador. A forma básica dessa interação é a cópia de dados do dispositivo para a memória e da memória para o dispositivo, sendo que trabalho útil por parte do programa ocorre enquanto os...