Saturday, July 11, 2009

Como funciona o GWT

Agora que temos o nosso primeiro projeto com GWT vale a pena falar sobre como ele está estruturado e como ele funciona.

O GWT funciona através de módulos, que podem ser adicionados a qualquer página HTML, basta incluir a referencia para o javascript do módulo.

O módulo é composto por um arquivo XML (que fica na pasta raiz do módulo) e que contém registros sobre quais classes devem ser importadas para o módulo.

Uma dica importante aqui é que o gwt cria toda a estrutura do javascript do módulo utilizando o caminho do pacote do módulo, o que pode levar a arquivos com nomes muito grandes. Uma boa prática neste caso é utilizar o atributo rename-to da tag module como no exemplo:
assim as pastas/arquivos vão ter um nome menor e mais fácil de identificar.

Dentro de cada módulo são criados 2 pacotes principais: o pacote client e o pacote server. Eu vou abordar o pacote server em outro post.
Vamos falar principalmente sobre o pacote client agora:

Todas as classes que estiverem dentro desse pacote (e sub-pacotes também) serão compiladas para javascript. Um erro muito comum é não se atentar para as classes que ficam dentro desse pacote, que (por serem transformadas em javascript) são restritas a uma lista de classes permitidas. Isso me causou uma certa dor de cabeça no início, porque eu não tinha me atentado para esta lista.

Dentro do pacote client ficam os EntryPoints que são pontos de entrada do módulo. Para uma classe ser considera uma EntryPoint ela deve implementar a interface com.google.gwt.core.client.EntryPoint, que define o método onModuleLoad() que é executado quando o módulo é carregado na página. Além disso ele também deve estar especificado no arquivo XML do modúlo através da tag <entry-point class="path.to.the.class" />.

Bom, com essas informações acho que já estamos começando a entender como funciona o GWT. No próximo post eu vou falar um pouco sobre o App Engine, que pode ser utilizado como servidor para o gwt (e que já vem configurado com o plugin do eclipse).


Para tirar quaisquer dúvidas comentem este post, ou então vocês podem me encontrar no twitter: @bgondim
Até lá pessoal!


No comments:

Post a Comment