Professional Documents
Culture Documents
Groovy e Grails
Hugo Sena
Groovy
Linguagem Livre Scripts o grande foco Suporte ao paradigma da Orientao a Objetos
Laboratrio Natalnet
Desenvolvida como alternativa a Linguagem Java Possui caractersticas de Python, Ruby e Smalltalk Compila dinamicamente para bytecodes Java
Groovy
Basicamente um superconjunto da Linguagem Java Pode-se simplesmente renomear um arquivo .java para .groovy e ir funcionar (isso provoca supresa em algumas pessoas ). Torna as curvas de aprendizado para usurios Java, praticamente 0, pois eles podem comear com a sintaxe Java e migrar gradualmente para Groovy. Suporte nativo para linguagens de Marcao como XML e HTML, com suporte a DOM.
Laboratrio Natalnet
Groovy Caractersticas
Tipagem esttica e dinmica Sintaxe nativa para listas, arrays associativos, vetores, expresses regulares, interaes polimrficas,
Laboratrio Natalnet
Groovy Exemplos
Acesse o groovy atravs dos comandos:
groovyconsole grails console (depois que um projeto tenha sido criado)
Laboratrio Natalnet
Exemplos:
println Hello, World!
123+45*67
x=1 println x x = new java.util.Date() println x
Groovy Exemplos
Listas e Mapas
Listas podem ser representadas como vetores Mapas podem definir os ndices Exemplos:
Laboratrio Natalnet
myList = [1776, -1, 33, 99, 0, 928734928763] println myList[0] println myList.size()
scoreMap = [ "Brett": 100, "Pete": "Did not finish", "Andrew": 86.87934 ] println scoreMap[0] println scoreMap.size() println scoreMap["Pete"] println scoreMap.Pete scoreMap["Pete"] = 3 println scoreMap.Pete
emptyMap = [:] emptyList = [] println emptyMap.size() println emptyList.size()
Hugo Sena NatalNet/UFRN 6
Laboratrio Natalnet
Cdigo Groovy
Groovy Closures
Groovy Closures:
Uma closure uma ou mais linhas de cdigo cercadas por chaves. A principal diferena entre uma closure e um mtodo que a closure no necessita de uma classe ou um nome de mtodo.
Exemplos:
square = { it * it } println square(9) z = [ 1, 2, 3, 4 ].collect(square) print z
def square = { numberToSquare -> numberToSquare * numberToSquare } print square.call(2) fullString = " orderParts = ["BUY", 200, "Hot Dogs", "1"] orderParts.each { fullString += it + " " } println fullString Hugo Sena NatalNet/UFRN 8
Laboratrio Natalnet
Grails
Groovy on Rails Framework para web baseado no Ruby on Rails, para desenvolvimento em Groovy.
Laboratrio Natalnet
Pretende ser um framework de alta produtividade seguindo o paradigma de conveno por codificao
Classes de domnio tem seus atributos mapeados como campos no BD Utiliza variveis reservadas para identificar configuraes
Grails foi desenvolvido para ser fcil de aprender, fcil de desenvolver aplicaes e ser extensvel, buscando oferecer consistncia e caractersticas poderosas.
Hugo Sena NatalNet/UFRN 9
Grails Objetivos
Ser um framework web de alta produtividade para a plataforma Java
Sem configurao XML. Ambiente de desenvolvimento pronto pra usar.
Laboratrio Natalnet
Re-uso de tecnologias Java tais como Spring e Hibernate atravs de simples interfaces. Ser um framework consistente que reduz a confuso das configuraes e fcil de aprender.
Hugo Sena NatalNet/UFRN 10
Grails Caractersticas
Oferece a documentao das partes do framework que interessam ao usurio. Criao de Templates facilitada pelo uso do GSP (Groovy Server Pages).
GSP possui sintaxe bastante parecida com o JSP
Laboratrio Natalnet
Suporta AJAX.
Suporta JSP Prov um modo de desenvolvimento completo, incluindo servidor web e carregamento dinmico de recursos. Utiliza o paradigma MVC.
11
Laboratrio Natalnet
MOS NA MASSA
Instalao do Grails
Pr-requisitos:
JAVA_HOME
Laboratrio Natalnet
Instalao:
Download Define GRAILS_HOME
13
Criando o Projeto
Para criar o projeto em Grails, basta executar o seguinte comando grails:
grails create-app library
Laboratrio Natalnet
14
Por padro todas as bases de dados so configuradas com uma base de dados HSQLDB persistindo na memria.
Ideal para testar, mas invivel para realizar o deployment
Pode ser opcional
Consiste em apenas mudar apenas alguns valores e colocar o arquivo jar do Driver na pasta lib.
Hugo Sena NatalNet/UFRN 15
Laboratrio Natalnet
16
Rodando a aplicao
Para rodar a aplicao execute o seguinte comando grails:
grails run-app
Laboratrio Natalnet
O grails traz embutido o servidor de aplicaes jetty e o banco HSQLDB que salva os dados na memria RAM.
No nosso caso estamos utilizando o mysql.
Acesse:
http://localhost:8080/library/
17
Classes de Domnio
So persistidas no banco de dados usando GORM (Grails Object Relational Mapping) Classes de domnio so salvas no diretrio de grails-app/domain Apenas isto necessrio para que a persistncia dessa classe seja gerenciada pelo Grails, o resto o GORM faz a mgica O GORM adiciona vrios mtodos estticos e instanciados para realizar a persistncia Anti-Padro: Active-Record
18
Laboratrio Natalnet
O mtodo count() retorna o nmero de registros no banco de dados para uma determinada classe.
def bookCount = Book.count()
O mtodo find(parmetro) retorna o primeiro objeto da base de dados que satisfaz o parmetro (Sintaxe HQL)
def book = Book.find("from Book b where b.title = ?", [ 'The Da Vinci Code' ])
O mtodo findBy*() retorna o primeiro objeto da base de dados que satisfaz um padro especfico.
def book = Book.findByTitle("The Da Vinci Code") def book = Book.findByTitleLike("%Da Vinci%")
Hugo Sena NatalNet/UFRN 19
20
No nosso caso:
class BookController { def scaffold = true }
21
Scaffolding
Grails suporta Scaffolding (gera automaticamente vises e controles para operaes CRUD) dinmico e esttico.
Dinmico gerado em tempo de execuo
Laboratrio Natalnet
Qualquer classe de domnio pode ser scaffolded, basta criar um controller como o mostrado no slide anterior Criando apenas este controller j possvel realizar operaes CRUD em: http://localhost:8080/library/book
Esttico
Gera os arquivos:
Templates de viso - list.gsp, create.gsp, edit.gsp e show.gsp na pasta grails-app/views/book Controller - BookController.groovy na pasta grails-app/controllers
Este arquivo deve ser salvo no seguinte diretrio: grails-app/views/book/list.gsp do projeto Grails
Este local mapeado pelo controlador BookController como a ao list.
Hugo Sena NatalNet/UFRN 23
Grails Relacionamentos
One-to-one,
class Face { Nose nose } class Nose {static belongsTo = Face }
one-to-many,
Laboratrio Natalnet
many-to-one,
class Book { ... static belongsTo = Author Author author }
Mtodo toString
Define como um objeto ser tratado quando houver um relacionamento Ex:
class Author { ... String toString() { return "$name" } }
Um scaffold da classe Book que tem relacionamento com Author ir exibir o ttulo do livro no relacionamento.
Hugo Sena NatalNet/UFRN 25
Exemplo:
class Book { ... static constraints = { title(blank:false, nullable:false, size:5..150) ISBN() synopsis(widget:'textarea') publicationDate() author() } }
26
As vezes necessrio apagar a tabela para que as alteraes sejam realizadas com sucesso.
27
defaultAction Permite definir a ao padro que ser chamada caso nenhuma ao seja especificada na URL. Ex:
class BookController { static defaultAction = "list" def list = { [books:Book.list()] } } Hugo Sena NatalNet/UFRN 28
flash
Laboratrio Natalnet
Guarda objetos de sesso para apenas a prxima requisio, destruindo depois que a requisio completada. Muito til para exibir mensagens de sucesso ou erro.
Ex:
class BookController { def index = { flash.message = "Welcome!" redirect(action:home) } def home = {} }
Hugo Sena NatalNet/UFRN 29
render
Laboratrio Natalnet
Permite criar vrias formas de resposta, desde simples texto, at vises e templates
Ex:
class BookController { def show { def book = Book.get(params.id) } def stephen = { render(view: "show", model: [book: new Book(author: 'Stephen King', name: 'Carrie')]) } }
30