Produtividade na web com Groovy e Grails



Documentos relacionados
Breve introdução. Uma breve introdução. Simplicidade e Poder. Rápido Dinâmico Robusto

Frameworks - Grails. Aécio Costa

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

Grails e as novidades

Introdução. Entendendo os Controles. Definindo um controle. Introdução MOCKDOMAIN() Testando uma classe de domínio mockdomain

WebApps em Java com uso de Frameworks

Persistência de dados com JPA. Hélder Antero Amaral Nunes

Aula 03 - Projeto Java Web

Análise comparativa de produtividade entre Groovy e Java, aplicado no desenvolvimento web

Projeto Arquitetural do IEmbedded

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate

BANCO DE DADOS E UMA APLICAÇÃO WEB

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

JavaServer Faces. Parte 2

WebWork 2. João Carlos Pinheiro.

Struts 2 : Projeto e Programação Editora: Ciência Moderna Autor: Antunes Budi Kurniawan Número de páginas: 600

Centro Universitário Metodista Benne1 Rio de Janeiro, Dezembro de Rafael Polo e Sabrina Arêas


Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração O livro

Tecnologias Web. Padrões de Projeto - Camada de Apresentação

Mini-curso de CakePHP

4 O Workflow e a Máquina de Regras

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

PROJETO PEDAGÓGICO DE CURSOS

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração

UFG - Instituto de Informática

Persistindo dados com TopLink no NetBeans

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

Sumário. Parte I Introdução Introdução O Rails é ágil Explorando o conteúdo Agradecimentos... 19

2 echo "PHP e outros.";

Documento de Projeto de Sistema

Persistência de Dados em Java com JPA e Toplink

Java para WEB com Hibernate e Struts 2. Duração 52 horas/aula. Objetvo

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC TurmaBC TurmaBC TurmaBC

HIBERNATE EM APLICAÇÃO JAVA WEB

Criando Frameworks Inteligentes com PHP. Uma abordagem prática: vantagens, aplicações e procedimentos.

ASP.NET MVC em Ação. Jeffrey Palermo Ben Scheirman Jimmy Bogard. Novatec. Prefácio de Phil Haack

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

TRBOnet MDC Console. Manual de Operação

Nos Trilhos com RAILS. Sylvestre Mergulhão

Computação II Orientação a Objetos

Luiz Arão Araújo Carvalho Bacharel em Ciência da Computação Desenvolvedor RedeSat-TO

No Fedora, instalamos os pacotes "mysql" e "mysql-server", usando o yum:

FRWTC800 - Desenvolvimento Web com Ruby on Rails

II Semana de Tecnologia da Informação. Rails Framework

Programação Web Aula 10 - Testes, Javascript, Ajax

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

Curso de Aprendizado Industrial Desenvolvedor WEB

Acessando um Banco de Dados

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

Programação Web Aula 8 - Rails (Introdução)

Universidade da Beira Interior

UFG - Instituto de Informática

Associação Carioca de Ensino Superior Centro Universitário Carioca

Sistemas para internet e software livre

2 a Lista de Exercícios

UFG - Instituto de Informática

Principais Comandos SQL Usados no MySql

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

BEM-VINDOS AO CURSO DE ORIENTADO A OBJETOS

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Programando em PHP. Conceitos Básicos

Exibindo o Catálogo (Tarefa C) Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

Padrão J2EE Data Access Object (DAO)

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Entendendo como funciona o NAT

Grails. C ada vez mais aplicações corporativas são desenvolvidas ou migradas para a plataforma web.

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Arquitetura de uma Webapp

Kassius Vargas Prestes

J550 Segurança e Controle de erros

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Google Drive. Passos. Configurando o Google Drive

Aula 4. Objetivos. Conteúdo dinâmico na internet.

Aula 2 - Revisão de JPA (Java Persistence API)

DESENVOLVIMENTO DE SOFTWARE. Introdução ao Visual Studio VB.Net. Programação Estruturada. Prof. Celso Candido ADS / REDES / ENGENHARIA

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

ADOBE FLASH PLAYER 10.3 Gerenciador de configurações locais

Front-End Uso da Linguagem Turbo Delphi para Acesso ao Banco de Dados Mysql

Java II. Sérgio Luiz Ruivace Cerqueira

TUTORIAL SPRING SECURITY PROGRAMAÇÃO COM FRAMEWORKS Responsáveis: Ana Luíza Cruvinel, Maikon Franczak e Wendel Borges

Tutorial Básico. Instalando e testando o Ruby on Rails no Windows

Banco de Dados. Aula 1 - Prof. Bruno Moreno 16/08/2011

Disciplina de Banco de Dados Parte V

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

EJB ainda tem vez no Java EE 6? Fernando Lozano Consultor 4Linux

Universidade Federal Rural de Pernambuco. Bacharelado em Sistemas de Informação. Disciplina: Análise e Projeto de Sistemas de Informação

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas) Sumário. Java 2 Enterprise Edition. J2EE (Java 2 Enterprise Edition)

Finalizando o Pedido (Tarefa G) Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

Roteiro. Arquitetura. Tipos de Arquitetura. Questionário. Centralizado Descentralizado Hibrido

Conteúdo Programático de PHP

Introdução ao Modelos de Duas Camadas Cliente Servidor

Transcrição:

Produtividade na web com Groovy e Grails

Quem somos? Lucas Aquiles / @lucas_aquiles ADS / IFPI lucasaquiles@gmail.com lucasaquiles.com.br/blog Fco Marcos / @fcomarcosrocha ADS / IFPI Colaborador LAPESI fmarcosrocha@gmail.com

O Grails Inspiração Convenção ao invés de configuração Ruby on Rails, Django, TurboGears Construído sobre gigantes Java/ JEE Spring Framework Hiberante Reduz a complexidade Produtividade

O Grails GORM Baseado no Hiberante Camada de visão GSP (Groovy Server Pages) TagLib dinâmicas e SiteMesh Camada de controle: Baseado no Spring MVC / Spring Web Flow Dependency Injection (DI) Spring Container Internacionalização (i18n)

Grails - Instalação e Configuração http://www.grails.org/downloads Descompacte o arquivo e configure o GRAILS_HOME Hello Grails grails create-app helloword grais create-controller HelloWord grails- app/controllers/helloword/hellowordcontroller.groovy def helloword = { render meu 123487 hello word! }

Comandos - Grails Comandos básicos grails create-app AppDemo grails create-domain-class br.edu.ifpi.minhaclass grails create-controller br.edu.ifpi.minhaclass grails create-service br.edu.ifpi.minhaclass grails generate-all // gera as views os controlleres grails schema-export // expora o esquema de tabelas grails console // abre o console do groovy grails clean // limpa aterações grails run-app // roda a aplicação

Grails - Estrutura Arquivos de configuração: DataSource.groovy Config.groovy Bootstrap.groovy internacionalização Libs adicionais: ex mysql-connector.jar web.xml

DataSource - Grails DataSource - Arquivo de configuração de banco de dados Configurado por padrão com o HSQLDB Um banco de dados leve, usado para testes Possui três ambientes de trabalho Test, Production e Development

DataSource - Grails

MVC - Grails Modelo Tudo que será usado como Entidade ficá aqui. grails-app/domain/ grails create-domain-class Separar a lógica de negócio do modelo Cada classe de domínio corresponde à uma tabela do banco de dados relacional

MVC - Grails Controller: Toda regra de negócio fica no controller. grails-app/controller grails create-controller action: São clousures que irão receber as requisições e fazer alguma coisa def actionquefazalgumacoisa = { render \\o/ }

MVC - Grails Controller params: é um map (hash) de parâmetros de uma requisição def actionquepegaoparamseexibe = { } render parametros: ${params} flash: map temporário que armazena objetos da seção, o hash é limpo a cada nova requisição def actionquemostraoflashmessage = { } flash.message = ${params}

MVC - Grails Controller render: renderiza uma resposta redirect: redireciona uma ação usando HTTP redirect def actionqueredireciontapraoutraaction = { } redirect(controller:meucontroller, action: outraaction )

MVC Grails Controller scaffolding cria a estrura de CRUD para aquele modelo def scaffolding = MinhaClasseDeDominio

MVC - Grails Views crails create-view grails-app/views/<domain>/ <% %> ou <%= %> Utilizam a GSP taglib Evita misturar código de programação com linguagem de marcação Semelhando ao JSP def show = { [book:book.get(params.id)]} <%= book.title %>

MVC - Grails Views Loops <g:each in= ${livros} > <p>título: ${it.titulo}</p> </g:each> <g:each in= ${livros} var= livro > <p>título: ${livro.titulo}</p> </g:each>

MVC - Grails Views Condições <g:if test= ${nome == 'tr00'} > Hello, ${tr00} </g:if> <g:else> --- faz alguma coisa </g:else> <g:elseif test= 2 % 2 == 0 > faz outra coisa </g:elseif>

Service - Grails Services grails create-service grails-app/services/ Centraliza a regra de negócio Compartilha a mesma regra com classes de domínio que possuam essa lógica Injetado automaticamente no controller pelo Spring

Service - Grails Services Transactions transactional = true Essencial para manter a integridade do banco de dados via ACID; Atomicidade A terefa foi completa ou não Consistência - o banco de dados deve permanecer consistente antes e depois de uma operação Isolação uma transação está isolada das outras operações Durabilidade desde que a transação esteja feita, isso garante que a transação não possa ser desfeita

Scaffolding - Grails Scaffolding Permite criar rapidamente interfaces de CRUD para classes de domínio que estejam definidas Ótimo para prototipação

Scaffolding - Grails Scaffolding dinâmico: def scaffolding = MyDomainClass Scaffolding estático grails genreate-views: gera as views para uma classe de domínio específica grails generate-controller: cria o controlador para uma classe de domínio específica grails generate-all: cria os controlers + views ex: grails generate-all br.edu.ifpi.beans.aluno

MVC - Grails GORM Hibernate por baixo dos panos Permite fazer o mapeamento objeto / relacional do modelo orientado a objetos com o banco de dados relacional Cada classe de domínio representa uma tabela do banco de dados Uma instância representa uma linha da tabela Cada atributo da classe representa uma coluna da tabela

MVC - Grails Enquanto isso no hibernate... Criar uma classe, anotar a classe com a implementação do JPA, mapea a classe no arquivo de configuração, cria uma fabrica de sessões, cria um Dao, e por fim instancia um objeto da classe e persiste.

TUDO ISSO?

GORM - Grails Com o GORM do grails grails create-domain-class Usuario grails console def usuario = new User(login: tr00,password: tr00 ) usuario.save() Não precisa extender de ninguém, não precisa de annotations. grande semelhança com o ActiveRecord

GORM - Grails Métodos do GORM save() list() delete() get(object o) Buscadores dinâmicos

GORM - Grails Buscadores dinâmicos FindBy* Usuario.findByUsernameAndPassword( mock, mocklogin ) FindAllBy* Usuario.findAllByGroup(Group.get(1)) FindWhere, findallwhere Usuario.findWhere([ "username": "mock", login: "mocklogin"]) HQL Hibernate Query Language User.find( from User where login = :login and senha = :senha, [ mock, mocklogin ]) Parâmetros: max, sort, order

ORM - Grails Comparadores Between User.findByDateCreatedBetween(today-10, today) Like User.findByBioLike('%tr00%') NotEqual Album.findByTitleNotEqual('titulo de teste') IsNull User.findByGroupIsNull() IsNotNull User.findByGroupIsNotNull()

GORM - Grails Usando Criteria do Hibernate Uma das mais poderosos de de busca get: retorna uma instancia da query list: retorna uma lista de instancias count: retorna um total de resultados como um inteiro da query def c = DomainClass.createCriteria() def result = c.list{ eq('nome','tr00' }

GORM - Grails Relacionamentos Permite 4 tipos de relacionamentos One-to-one, One-to-Many, Many-to-One e Many-to-Many OneToMany Player hasone club HasMany - club hasmany players Métodos dinâmicos Club.addToPlayers(new Player()) Club.removeFromPlayers(Player.get(1L)) BelongsTo Player belongsto clube

i18n - Grails Internacionalização i18n grails-app/i18n/ Permite exibir mensagens no idioma de preferência do usuário Os arquivos.properties

Testes - Grails Testes Sempre que uma um controller, service ou classe domínio é criada, é criada uma classe de teste de integração correspondente Usa o Junit e o Canoo por baixo dos panos Permite fazer: Testes unitários Testes de integração Testes funcionais A aplicação vai trabalhar como esperado A classe de testes extendem de GroovyTestCase Permite o uso de assert*, setup e teardown

Tests - Grails Testes Teste de Integração!= teste Unitário Testes unitários no grails são criados com o comando: grails create-unit-test tests/unit/ nos testes unitários os métodos dinâmicos como save, findby* não estão disponíveis O grails faz isso pra ajudar você a diferenciar testes unitários e de integração testes unitários se preucupam em testar apenas uma parte do código e não o problema como um todo

Testes - Grails mas como testar sem os métodos dinâmicos?

Testes - Grails Testes Aí entram em cena o MockFor* e o StubFor* http://groovy.codehaus.org/groovy+mocks

Aplicação de exemplo - Grails Querist Aplicação de perguntas e respostas onde um usuário envia perguntas e outros usuários enviam as respostas. Uma resposta pode receber votos, a resposta mais votada é tída como a mais confiável Regras: Um usuário tem muitas perguntas e mutias respostas Uma pergunta tem um usuário ( quem perguntou ) e várias respostas Uma resposta pertence a uma pergunta e possui vários usuários ( quem respondu )