O que é Grails?
Framework para desenvolvimento de aplicações web na plataforma Java utilizando a linguagem Groovy, principais características:
ALTA produtividade;
Programação por convenção;
Completo;
Don’t Repeat Yourself (DRY);
Curiosidade: Inicialmente chamado de “Groovy onRails” até ser renomeado para Grails, após pedido do fundador do projeto “Ruby on Rails”, David HeinemeierHansson.
Alta Produtividade
Rapidamente você cria toda a estrutura de sua aplicação web;
Gera CRUD(Create, Read, Update and Delete) com apenas alguns comandos;
Programação por Convenção
Modelo de desenvolvimento de software que busca diminuir as decisões que os desenvolvedores precisam tomar;
Caso o programador não queira configurar nada, basta seguir a convenção do framework;
Aumenta a produtividade devido ao fato do programador não precisar se preocupar com as configurações e sim com a lógica de negócio;
Don’t Repeat Yourself – Não se Repita
Tarefas repetitivas são realizadas pelo
framework e não mais pelo
desenvolvedor
O que é Groovy?
Linguagem idealizada por James
Strachan (2003)
As primeiras versões de testes surgiram em
2004
A primeira versão oficial (1.0) foi lançada em
2007
A segunda versão (2.0) foi lançada em 2012
• Groovy: linguagem JVM com o objetivo inicial de
extender Java.
• Uso de metaprogramação
• Compila bytecode (assim como Java)
• Interoperabillidade (Java roda Groovy, Groovy roda
Java)
• Principais diferenças entre Groovy e Java:
• Enquanto Java tem tipos primitivos e não-primitivos,
tudo em Groovy é objeto (Object)
• Tipagem opcional (duck typing)
• Um comando numa linha não exige ponto-e-vírgula
• Return: sempre é o valor de retorno do último comando
• Conceito de verdade: qualquer valor diferente de null
• Geração dinâmica (implícita) de get() e set()
• Principais diferenças entre Groovy e Java
• Enquanto Java tem tipos primitivos e não-primitivos,
tudo em Groovy é objeto (Object)
• Um comando numa linha não exige ponto-e-vírgula
• Principais diferenças entre Groovy e Java
• Tipagem opcional (duck typing)
Duck typing: Se aje como um pato, é um pato! Quack!
• Principais diferenças entre Groovy e Java
• Geração dinâmica (implícita) de get() e set()
Java:
Groovy:
• E o que eu preciso fazer pra usá-lo?
• Uma versão do Java Development Kit(JDK) instalada
(não um JRE, hein!);
• A criação da variável de ambiente JAVA_HOME;
• Download do Grails;
• A criação da variável de ambiente GRAILS_HOME;
• O desenvolvimento pode ser através do prompt de
comando ou por diversas IDE, no nosso exemplo
utilizamos a IDE Groovy/Grails Tool Suite (GGTS)
Configuração do Banco de DadosCaso 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 DomínioComando: create-domain-class livraria.Livro
IDE:
Os domínios são gerados em grails-app/domain
Abordagem utilizada para geração de
artefatos(controladores, visões, etc) que
implementam as operações CRUD,
existem 2 abordagens:
Scaffolding Dinâmico;
Scaffolding Estático;
Scaffolding
Visões são geradas em tempo de execução, facilita o
desenvolvimento pois nenhum código relacionado aos
controladores e visões precisa ser desenvolvido.
Não útil para equipes que desejam personalizar o sistema.
Scaffolding Dinâmico
Comando: create-controller livraria.Livro
IDE:
Os controladores são gerados em grails-app/controller
Código gerado:
Scaffolding Estático Produz a partir de templates, o código dos controladores e
visões que podem ser personalizados pela equipe web.
O projeto exemplo utilizou essa abordagem pois necessitou de
algumas customizações nos controladores e visões.
Comando: generate-all livraria.Livro
IDE:
Os controladores são gerados em grails-app/controller, as visões Groovy Server Pages(GSPs) são geradas em grails-app/views/livro
Para cada método método correspondente a uma ação no controlador é criada uma visão (arquivo .gsp)
Controladores e Visões geradas:
BootStrap.groovy Essa classe é executada durante o boot da aplicação e serve, entre outros propósitos, para
inicializar a aplicação por exemplo, criando algumas instâncias de objetos.
Plugins de Autenticação de Usuário e
Bibliotecas javascriptAdicionar as seguintes linhas no arquivo BuildConfig.groovy para utilizar o plugin Grails spring-security que auxilia na autenticação dos usuários:
Adicionar em grails-app/web-app/js os seguintes .jar que serão utilizados para efetuar máscaras de CEP, CNPJ e CPF
Controle de Acesso de Usuários
Utilizaremos o plugin spring-security-core para controle de acesso de usuários, ele define uma série de comandos, entre eles o s2-quickstart que cria tanto as classes de domínio básicas tantos os controladores(e suas respectivas visões) necessários para lidar com a autenticação de usuários.
Ao executarmos o seguinte comando abaixo:
Será criada a seguinte estrutura:
• livraria.Usuario: classe de domínio que representa os usuários autenticados
• livraria.Papel: classe de domínio que representa os papéis que os usuários
podem desempenhar. Cada papel possui permissões associadas a ele.
• livraria.UsuarioPapel: classe de domínio que representa o relacionamento
muito-para-muitos entre usuário e papéis. Ou seja, um usuário pode
desempenhar vários papéis e um papel pode ser desempenhado por vários
usuários.
• LoginController e LogoutController (e suas respectivas visões) que são
responsáveis pelas operações de login e logout da aplicação.
Controle de Acesso de Usuários
Por fim adicione o seguinte trecho ao arquivo conf/Config.groovy para habilitar a chamada HTTP, POST e GET no controlador LogoutController que é responsável pela operação de logout.
Personalização dos templates
utilizados no scaffolding
Essa personalização tem como objetivo:
Gerar controladores e visões com
funcionalidades relacionadas ao controle
de acesso já incorporada;
Gerar visões create.gsp e edit.gsp com
máscaras de entrada para atributo CPF
O comando anterior copia os templates usados nas atividades de geração de código
para o diretório src/templates. Esse diretório inclui:
O diretório artifacts contém os templates utilizados pelos comandos create-*
(create-domain-class, create-controller, etc);
O diretório scaffolding contém os templates utilizados pelos comandos generate-*
(generate-all, generate-controller, generate-views, etc). No contexto da nossa
aplicação apenas serão personalizados os templates presentes nesse diretório;
O diretório testing contém os templates utilizados na geração de artefatos de teste;
O diretório war contém o template do arquivo web.xml utilizado na geração do
arquivo deployment da aplicação (arquivo.war)
Personalização dos templates
utilizados no scaffolding
Template: Controller.groovyO plugin spring-security permite a utilização da anotação @Secured para aplicar regras de controle de acesso aos controladores( e suas respectivas ações), o template Controller.groovy é utilizado na geração dos controladores, ao alterá-lo, todos os controladores gerados após essa alteração irão seguir o novo formato.
Adicionando o trecho de código em vermelho dizemos que Para acessar um controlador, o usuário deve ter o papel ‘ROLE_ADMIN’ para acessar todas as ações ou ‘ROLE_CLIENTE’ para acessar a ação ‘show’
Template create.gsp e edit.gsp
O template create.gsp e edit.gsp é utilizado na geração de visões(views) create e edit
associadas a cada um dos controladores da aplicação, modificaremos ambos para
que seja permitido construir máscaras de CPF, CNPJ e CEP utilizando o plugin jQuery
Masked Input.Para que as visões(views) create.gsp e edit.gsp tenha a seguinte máscara:
Adiciona o seguinte trecho de código em vermelho abaixo:
Template: index.gsp
O template index.gsp é utilizado na geração das visões(views) associadas c cada um dos controladores da aplicação, modificando seguinte trecho de código em vermelho abaixo, estaremos permitindo a operação de criação de entidades (ação create()) apenas para usuários autenticados e que possui o papel necessário para executar essa ação.
Template: show.gspO template show.gsp é utilizado na geração das visões(views) associadas a cada um dos controladores da aplicação, modificando seguinte trecho de código em vermelho abaixo, estaremos realizando as seguintes modificações:
Operação create() apenas será apresentada se o usuário encontra-se autenticado e possui
papel necessário para executar essa ação:
Operação edit() e delete() apenas será apresentada se o usuário encontra-se autenticado e
possui papel necessário para executar essa ação:
Após realizar as alterações nos templates, é necessário executar o comando generate-all para que as alterações sejam refletidas nos controladores e visões da aplicação da livraria, efetuaremos o comando nas seguintes classes de domínio:
Personalização dos templates
utilizados no scaffolding
Livro Autor Categoria
Mapeamento URLPor convenção, a página principal é a que lista todos os controladores da
aplicação, iremos alterar o arquivo conf/URLMapping.groovy conforme abaixo
para que aponte para um controlador que iremos criar no próximo passo.
Implemente o controlador conforme imagem abaixo:
Controlador: MainController
Observe que apenas usuários autenticados com os papéis de
‘Role_ADMIN e ‘ROLE_CLIENTE’ tem acesso ao controlador.
Crie uma visão(view) chamada index.gsp e coloque na pasta
grails-app/views/main e edite ela de tal maneira que fique
conforme abaixo:
Controlador: MainController
Abra no seu navegador a url: http://localhost:8080/livraria
Executando a aplicação
Top Related