Paradigma: Programao por conveno O que Grails? Framework para desenvolvimento de aplicaes web na plataforma Java utilizando a linguagem Groovy, principais caractersticas: ALTA produtividade; Programao por conveno; Completo; Dont Repeat Yourself (DRY);
Curiosidade: Inicialmente chamado de Groovy on Rails at ser renomeado para Grails, aps pedido do fundador do projeto Ruby on Rails, David Heinemeier Hansson. Alta Produtividade Rapidamente voc cria toda a estrutura de sua aplicao web;
Gera CRUD(Create, Read, Update and Delete) com apenas alguns comandos; Programao por Conveno Modelo de desenvolvimento de software que busca diminuir as decises que os desenvolvedores precisam tomar;
Caso o programador no queira configurar nada, basta seguir a conveno do framework;
Aumenta a produtividade devido ao fato do programador no precisar se preocupar com as configuraes e sim com a lgica de negcio; Completo Possui todos os componentes necessrios para iniciar o trabalho:
Dont Repeat Yourself No se Repita Tarefas repetitivas so realizadas pelo framework e no mais pelo desenvolvedor O que Groovy? Linguagem idealizada por James Strachan (2003) As primeiras verses de testes surgiram em 2004 A primeira verso oficial (1.0) foi lanada em 2007 A segunda verso (2.0) foi lanada em 2012
Groovy: linguagem JVM com o objetivo inicial de extender Java.
Uso de metaprogramao Compila bytecode (assim como Java) Interoperabillidade (Java roda Groovy, Groovy roda Java) Principais diferenas entre Groovy e Java:
Enquanto Java tem tipos primitivos e no-primitivos, tudo em Groovy objeto (Object) Tipagem opcional (duck typing) Um comando numa linha no exige ponto-e-vrgula Return: sempre o valor de retorno do ltimo comando Conceito de verdade: qualquer valor diferente de null Gerao dinmica (implcita) de get() e set() Principais diferenas entre Groovy e Java
Enquanto Java tem tipos primitivos e no-primitivos, tudo em Groovy objeto (Object) Um comando numa linha no exige ponto-e-vrgula Principais diferenas entre Groovy e Java
Tipagem opcional (duck typing) Duck typing: Se aje como um pato, um pato! Quack! Principais diferenas entre Groovy e Java
Return: sempre o valor de retorno do ltimo comando Principais diferenas entre Groovy e Java
Conceito de verdade: qualquer valor diferente de null Principais diferenas entre Groovy e Java
Gerao dinmica (implcita) de get() e set() Java: Groovy: E o que eu preciso fazer pra us-lo?
Uma verso do Java Development Kit(JDK) instalada (no um JRE, hein!); A criao da varivel de ambiente JAVA_HOME; Download do Grails; A criao da varivel de ambiente GRAILS_HOME; O desenvolvimento pode ser atravs do prompt de comando ou por diversas IDE, no nosso exemplo utilizamos a IDE Groovy/Grails Tool Suite (GGTS)
Projeto Livraria Tabelas no banco Tabelas no banco Criando uma aplicao IDE: Comando: create-app livraria Estrutura Criada Plugins e Dependncias Plugin responsvel por efetuar validao de campos CPF, CNPJ e CEP Configurao do Banco de Dados Caso precise de um banco mais robusto, alterar as linhas em vermelho no arquivo grails-app/conf/DataSource.groovy Adicionar o driver JDBC na pasta grails-app/lib Criando as classes de Domnio Comando: create-domain-class livraria.Livro IDE: Os domnios so gerados em grails-app/domain Estrutura de um domnio Campos de Validao: Estrutura de um domnio Abordagem utilizada para gerao de artefatos(controladores, vises, etc) que implementam as operaes CRUD, existem 2 abordagens: Scaffolding Dinmico; Scaffolding Esttico; Scaffolding Vises so geradas em tempo de execuo, facilita o desenvolvimento pois nenhum cdigo relacionado aos controladores e vises precisa ser desenvolvido. No til para equipes que desejam personalizar o sistema. Scaffolding Dinmico Comando: create-controller livraria.Livro IDE: Os controladores so gerados em grails-app/controller Cdigo gerado: Scaffolding Esttico Produz a partir de templates, o cdigo dos controladores e vises que podem ser personalizados pela equipe web. O projeto exemplo utilizou essa abordagem pois necessitou de algumas customizaes nos controladores e vises. Comando: generate-all livraria.Livro IDE: Os controladores so gerados em grails-app/controller, as vises Groovy Server Pages(GSPs) so geradas em grails- app/views/livro
Para cada mtodo mtodo correspondente a uma ao no controlador criada uma viso (arquivo .gsp)
Controladores e Vises geradas: BootStrap.groovy Essa classe executada durante o boot da aplicao e serve, entre outros propsitos, para inicializar a aplicao por exemplo, criando algumas instncias de objetos. Plugins de Autenticao de Usurio e Bibliotecas javascript Adicionar as seguintes linhas no arquivo BuildConfig.groovy para utilizar o plugin Grails spring-security que auxilia na autenticao dos usurios: Adicionar em grails-app/web-app/js os seguintes .jar que sero utilizados para efetuar mscaras de CEP, CNPJ e CPF Controle de Acesso de Usurios Utilizaremos o plugin spring-security-core para controle de acesso de usurios, ele define uma srie de comandos, entre eles o s2-quickstart que cria tanto as classes de domnio bsicas tantos os controladores(e suas respectivas vises) necessrios para lidar com a autenticao de usurios. Ao executarmos o seguinte comando abaixo: Ser criada a seguinte estrutura: livraria.Usuario: classe de domnio que representa os usurios autenticados
livraria.Papel: classe de domnio que representa os papis que os usurios podem desempenhar. Cada papel possui permisses associadas a ele.
livraria.UsuarioPapel: classe de domnio que representa o relacionamento muito-para-muitos entre usurio e papis. Ou seja, um usurio pode desempenhar vrios papis e um papel pode ser desempenhado por vrios usurios.
LoginController e LogoutController (e suas respectivas vises) que so responsveis pelas operaes de login e logout da aplicao. Viso da pgina principal para diferentes papis de usurio Viso Administrador Viso Cliente Controle de Acesso de Usurios Por fim adicione o seguinte trecho ao arquivo conf/Config.groovy para habilitar a chamada HTTP, POST e GET no controlador LogoutController que responsvel pela operao de logout. Personalizao dos templates utilizados no scaffolding Essa personalizao tem como objetivo: Gerar controladores e vises com funcionalidades relacionadas ao controle de acesso j incorporada; Gerar vises create.gsp e edit.gsp com mscaras de entrada para atributo CPF Personalizao dos templates utilizados no scaffolding Comando: install-templates IDE: O comando anterior copia os templates usados nas atividades de gerao de cdigo para o diretrio src/templates. Esse diretrio inclui:
O diretrio artifacts contm os templates utilizados pelos comandos create-* (create-domain-class, create-controller, etc); O diretrio scaffolding contm os templates utilizados pelos comandos generate-* (generate-all, generate-controller, generate-views, etc). No contexto da nossa aplicao apenas sero personalizados os templates presentes nesse diretrio; O diretrio testing contm os templates utilizados na gerao de artefatos de teste; O diretrio war contm o template do arquivo web.xml utilizado na gerao do arquivo deployment da aplicao (arquivo.war) Personalizao dos templates utilizados no scaffolding Template: Controller.groovy O plugin spring-security permite a utilizao da anotao @Secured para aplicar regras de controle de acesso aos controladores( e suas respectivas aes), o template Controller.groovy utilizado na gerao dos controladores, ao alter-lo, todos os controladores gerados aps essa alterao iro seguir o novo formato. Adicionando o trecho de cdigo em vermelho dizemos que Para acessar um controlador, o usurio deve ter o papel ROLE_ADMIN para acessar todas as aes ou ROLE_CLIENTE para acessar a ao show Template create.gsp e edit.gsp O template create.gsp e edit.gsp utilizado na gerao de vises(views) create e edit associadas a cada um dos controladores da aplicao, modificaremos ambos para que seja permitido construir mscaras de CPF, CNPJ e CEP utilizando o plugin jQuery Masked Input. Para que as vises(views) create.gsp e edit.gsp tenha a seguinte mscara: Adiciona o seguinte trecho de cdigo em vermelho abaixo: Template: index.gsp O template index.gsp utilizado na gerao das vises(views) associadas c cada um dos controladores da aplicao, modificando seguinte trecho de cdigo em vermelho abaixo, estaremos permitindo a operao de criao de entidades (ao create()) apenas para usurios autenticados e que possui o papel necessrio para executar essa ao. Template: show.gsp O template show.gsp utilizado na gerao das vises(views) associadas a cada um dos controladores da aplicao, modificando seguinte trecho de cdigo em vermelho abaixo, estaremos realizando as seguintes modificaes: Operao create() apenas ser apresentada se o usurio encontra-se autenticado e possui papel necessrio para executar essa ao: Operao edit() e delete() apenas ser apresentada se o usurio encontra-se autenticado e possui papel necessrio para executar essa ao: Aps realizar as alteraes nos templates, necessrio executar o comando generate-all para que as alteraes sejam refletidas nos controladores e vises da aplicao da livraria, efetuaremos o comando nas seguintes classes de domnio: Personalizao dos templates utilizados no scaffolding Livro Autor Categoria Mapeamento URL Por conveno, a pgina principal a que lista todos os controladores da aplicao, iremos alterar o arquivo conf/URLMapping.groovy conforme abaixo para que aponte para um controlador que iremos criar no prximo passo. Controlador: MainController Comando: create-controller livraria.Main IDE: Implemente o controlador conforme imagem abaixo: Controlador: MainController Observe que apenas usurios autenticados com os papis de Role_ADMIN e ROLE_CLIENTE tem acesso ao controlador. Crie uma viso(view) chamada index.gsp e coloque na pasta grails-app/views/main e edite ela de tal maneira que fique conforme abaixo: Controlador: MainController Criando usurios e papis no BootStrap.groovy Executando a aplicao Abra no seu navegador a url: http://localhost:8080/livraria Executando a aplicao Perguntas?