Você está na página 1de 53

daniel@techdm.

com

O que Grails?

Grails um framework open source para a construo de aplicaes Java/JEE. Ou seja, aplicaes enterprise que executam em um Web Container ou Application Server.

Por que Grails?

Baseia-se em frameworks como Rails e Django, sendo guiado pelas mesma prticas e princpios, como CoC (convention over configuration) e DRY (don't repeat yourself);
full stack e construdo sobre tecnologias maduras como Groovy, ANT, Log4J, Sitemesh, Spring Framework e Hibernate, entre outras; extensvel via plugins;

Por que Grails?

Dispe de ampla variedade de plugins (j implementados e testados) para a realizao das mais diferentes tarefas; compatvel com a especificao JEE;
Permite a migrao incremental de outras aplicaes legado; Dispe de dynamic or static scaffolding para operaes CRUD (Create, Read, Update and Delete);

Por que Grails?

Est licenciado sob a Apache License, Version 2.0.

Criando uma aplicao


grails create-app testapp

Iniciando a aplicao
cd testapp ; grails run-app

Acessando a aplicao

Diretrios mais importantes da aplicao

grails-app - diretrio base para os artefatos Grails

conf - arquivos de configurao


controllers - web controllers (C do MVC) domain - classes de domnio services - camada de servio views - .jsp, .gsp, .ftl (V do MVC)

lib - bibliotecas de suporte (.jar) src - classes Groovy e Java de suporte para a aplicao

scripts - Gant scripts


test - testes unitrios e integrados

Criando uma classe de domnio


grails create-domain-class Trip

Modificando a classe de domnio

Modificando a classe de domnio

Gerando um controller
grails create-controller Trip

Modificando o controller para usar scaffolding dinmico

Modificando o controller para usar scaffolding dinmico

Iniciando a aplicao novamente


grails run-app

Acessando a aplicao novamente

Acessando a aplicao novamente

Adicionando mais uma propriedade classe de domnio

F5/Refresh no browser

Adicionando mais uma action ao controller

Acessando a nova action criada


http://localhost:8080/testapp/trip/myList

Navegando pela aplicao

Navegando pela aplicao

Navegando pela aplicao

Adicionando obrigatoriedade propridade name

Agora, ao tentar cadastrar Trip sem name

Agora, ao tentar cadastrar Trip sem name

Gerando o controller e as views para utilizao sem scaffolding


grails generate-all testapp.Trip

Iniciando a aplicao novamente


grails run-app

E acessando a aplicao

Entendendo o controller gerado

Se abrirmos o controller novamente, podemos entender o que acontece quando a action save invocada (boto create da tela de cadastro de Trip).

Entendendo o controller gerado

Entendendo o controller gerado

Uma nova instncia de Trip criada a partir de um mapa chamado params (esse mapa contm todos os parmetros e respectivos valores enviados na requisio);
H uma tentativa de salvar essa Trip.

Se a Trip pde ser salva, uma mensagem de sucesso exibida e o usurio redirecionado para a action show; Se a Trip no pde ser salva, o usurio encaminhado para a view create.

Entendendo o controller gerado


Ao encaminhar para a view create, o controler indica que o model conter um Map com um elemento sob a chave 'tripInstance'. Se observarmos essa view, saberemos como esse elemento acessado. No caso, a view gerada um gsp (Groovy Server Page), mas poderamos usar jsp, ftl (FreeMarker template) ou qualquer outra forma de view suportada pelo Spring MVC.

Entendendo a view gerada

Entendendo a view gerada


Na parte marcada do create.gsp, vemos que a grails tag g:hasErrors usada para verificar se h algum erro associado tripInstance. Se houver, a grails tag g:renderErrors usada para exibir a lista de erros. isso que gera a mensagem quando no preenchemos o valor para o campo name.

Entendendo o controller gerado

Entendendo a view gerada

Entendendo a classe de domnio


Voltando um pouco ao controller, vemos que ele faz uso de mtodos como Trip.save(), Trip.get() e Trip.list(). Esses so mtodos dinmicos adicionados pelo GORM (Grails' object relational mapping), cuja implementao padro feita sobre o Hibernate.

So esses mtodos que iro, eventualmente, inserir os dados no banco de dados, alter-los ou consult-los. Outro mtodo que vale destacar o DomainClass.find().

Instalando e usando um plugin


Uma vez que a recomendao que todo acesso a dados seja feito a partir de uma classe de servio (que conter a lgica de negcio de aplicao e tambm garantir a transacionalidade da ao), mas queremos manter a aplicao simples, vamos instalar um plugin que torna as actions dos controllers transacionais: o transactional-controller.

Instalando e usando um plugin


grails install-plugin transactional-controller

Instalando e usando um plugin

De acordo com a documentao do plugin, precisamos indicar as actions que sero transacionais. Vamos marcar a save e a update, ainda que, nessa aplicao de exemplo, isso no seja realmente necessrio.

Instalando e usando um plugin

Iniciando a aplicao novamente


grails run-app

Acessando a aplicao e navegando por ela

E removendo o plugin, no caso de imprevistos ;-)


grails uninstall-plugin transactional-controller

Alterando configuraes especficas de um ambiente


Agora suponha que o banco de dados de produo no seja do mesmo tipo que o de desenvolvimento (no caso do nosso exemplo, o hsqldb que acompanha o Grails) ou no seja acessado da mesma forma. Para prepararmos nossa aplicao para produo, poderamos (por exemplo), incluir o driver JDBC necessrio no diretrio lib e modificar a seo production do arquivo DataSource.groovy.

Alterando configuraes especficas de um ambiente

Gerando o pacote (.war) para a implantao

Uma vez que a aplicao j esteja testada (todos os testes automticos e manuais tenham sido executados com sucesso) e validada, podemos gerar o .war para ser implantado em produo

Gerando o pacote (.war) para a implantao


grails war

Gerando o pacote (.war) para a implantao

Fim

Obrigado.

daniel@techdm.com