O documento apresenta o framework Grails para desenvolvimento web. Grails é construído em cima do Spring e foca em produtividade através de convenções, ferramentas de código e linguagem dinâmica Groovy. O documento descreve os principais componentes de Grails como modelagem de domínio, mapeamento objeto-relacional, serviços, scripts de criação e plugins.
2. OBJETIVO
Apresentar
as
principais
caracterís4cas
e
componentes
do
Grails
3. O
QUE
É
O
GRAILS?
Um
framework
web
para
a
JVM
Foco
em
produIvidade!
Linguagem
dinâmica
–
Groovy
Conven&on
over
Configura&on
Ferramentas
que
promovem
agilidade
4. FERRAMENTAS
QUE
AJUDAM…
DSLs
Geradores
de
código
Resolução
de
dependências
Configurações
mul4-‐ambientes
6. COMPONENTES
DO
GRAILS
Scripts
de
criação
Model-‐View-‐Controller
(MVC)
Grails
Object
Rela4onal
Mapping
(GORM)
Services
Resolução
de
dependências
e
configurações
Plugins
7. SCRIPTS
DE
CRIAÇÃO
Geram
várias
partes
da
aplicação
create-‐app:
cria
uma
aplicação
create-‐domain-‐class:
cria
uma
nova
classe
de
domínio
generate-‐all:
gera
o
controller
e
views
associadas
para
uma
classe
de
domínio
run-‐app:
executa
a
aplicação
no
Tomcat
9. OBJETOS
DE
DOMÍNIO
(MODELO)
Objetos
são
automaIcamente
mapeados
para
tabelas
no
banco
Configurações
adicionais
com
DSL
Relacionamentos
entre
objetos
Validações
10. EXEMPLO
class Livro{
String titulo
String autor
String descricao
Date dataRevisao
static hasMany = [comentarios: Comentario]
static constraints = {
titulo nullable: false, blank: false, size: 1..1024
autor nullable: false, blank: false, size: 2..255
descricao nullable:true, blank: true, maxSize: 1000000
dataRevisao nullable: true
}
}
11. GORM
Camada
padrão
de
persistência
Funcionalidades
para
leitura,
listagem,
ordenação,
contagem,
persistência
e
remoção
Definição
de
relacionamentos
entre
objetos
Métodos
de
busca
dinâmicos
Consultas
com
Criteria,
HQL
ou
SQL
Suporte
a
paginação
12. VALIDAÇÕES
DAS
CLASSES
DE
DOMÍNIO
Os
métodos
save()
e
validate()
da
classe
de
domínio
disparam
as
validações
Cada
objeto
contém
uma
coleção
de
erros
de
validação
17
validações
prontas
Muitas
das
restrições
influenciam
a
geração
das
tabelas
para
as
classes
de
domínio
14. RELACIONAMENTOS:
UM-‐PARA-‐UM
Declarado
com
um
atributo
do
4po
da
classe
referenciada
Bi-‐direcional:
cada
classe
possui
um
atributo
do
outro
4po
En4dade
forte
e
cascading
são
declarados
com
a
propriedade
belongsTo
16. RELACIONAMENTOS:
UM-‐PARA-‐MUITOS
Relacionamentos
um-‐para-‐muitos
usa
a
propriedade
hasMany
A
propriedade
belongsTo
também
pode
ser
usada
nesse
cenário
para
a
definição
de
relacionamento
bi-‐direcional
18. RELACIONAMENTOS:
MUITOS-‐PARA-‐MUITOS
Declarado
ao
adicionar
a
propriedade
hasMany
a
cada
classe
do
relacionamento
Uma
das
classes
deve
declarar
a
propriedade
belongsTo
para
definir
a
en4dade
forte
19. RELACIONAMENTOS:
MUITOS-‐PARA-‐MUITOS
class
Book
{
sta4c
belongsTo
=
Author
sta4c
hasMany
=
[authors:Author]
String
4tle
}
class
Author
{
sta4c
hasMany
=
[books:Book]
String
name
}
20. MÉTODOS
DE
BUSCA
DINÂMICOS
Groovy
suporta
interceptação
de
chamadas
a
métodos
Grails
injeta
vários
métodos
em
todos
os
objetos
de
domínio
em
tempo
de
execução
get(id), getAll([id, id, id, …]), list(),
listOrderBy*()
findBy*(), findAllBy*(),
count(), countBy*()
save(),
delete(), validate(), hasErrors
withTransaction, withCriteria
22. COMPOSIÇÃO
DE
MÉTODOS
Os
métodos
countBy*()
e
findBy*()
podem
ser
criados
usando
nomes
de
atributos
da
classe
de
domínio
além
dos
seguintes
comparadores:
Equal,
NotEqual,
LessThan,
LessThanEquals,
GreaterThan,
GreaterThanEquals,
Like,
like
(case
insensi:ve),
InList,
Between,
IsNull,
IsNotNull
Funciona
para
até
dois
atributos
com
comparadores
opcionais
e
operadores
lógicos
23. COMPOSIÇÃO
DE
MÉTODOS
def
livro
=
Livro.findByTitulo(“Harry
Poier”)
livro
=
Livro.findByTituloLike("Harry
Pot%")
livro
=
Livro.findByDataRevisaoBetween(
inicio,
fim)
livro
=
Livro.findByDataLancamentoGreaterThan(
algumaData
)
livro
=
Livro.findByTituloLikeOrDataRevisaoLessThan(
"%Java%",
algumaData
)
24. BUSCAS
COM
CRITERIA
DSL
para
uso
de
Hibernate
Criteria:
def
c
=
Conta.createCriteria()
def
results
=
c
{
like(”cliente",
"Fred%")
and
{
between(”saldo",
500,
1000)
eq(”filial",
"London")
}
maxResults(10)
order(”nome",
"desc")
}
25. BUSCAS
COM
HQL
Definidas
com
os
métodos
find,
findAll
def
results
=
Livro.findAll(
"from
Livro
as
l
where
l.4tulo
like
’Harry%'")
26. CONTROLLERS
Gerencia
os
requests
da
aplicação
web
e
criam
ou
preparam
os
responses
Classes
com
o
nome
terminando
em
Controller
Script
de
geração:
grails
create-‐controller
livro
27. ESTRUTURA
BÁSICA
class
LivroController
{
def
list()
{
//
definir
lógica
do
controller
//
criar
modelo
de
dados
de
resposta
return
model
}
}
28. CONTROLLERS
GERADOS
COM
SCAFFOLDING
Métodos
gerados
automa4camente:
index
–
displays
list
of
all
domain
objects
list
–
displays
list
of
all
domain
objects
show
–
shows
details
of
the
domain
object
delete
–
deletes
the
domain
object
edit
–
opens
page
for
edi4ng
of
domain
object
update
–
updates
changes
made
to
domain
object
create
–
opens
page
for
domain
object
crea4on
save
–
saves
the
domain
object
29. RETORNO
DOS
CONTROLLERS
1.
Retorna
um
mapa
de
dados
ou
nada.
Em
seguida
redireciona
o
fluxo
para
uma
view
com
o
mesmo
nome
da
ac4on
(método)
2.
Redireciona
para
outra
ação
ou
URL
3.
Renderiza
o
resultado
diretamente,
podendo
ser
uma
view,
template,
JSON,
XML
ou
binário
Possui
conversores
JSON
and
XML
na4vos
30. URLMAPPINGS.GROOVY
DSL
para
customização
dos
mapeamentos
de
URIs
para
views
ou
ações
de
Controllers
Pode
ser
usada
para
a
definição
de
URIs
de
webservices
REST
Status
code
de
erros
também
podem
ser
mapeados
404,
500,
etc.
31. VIEWS
Cada
controller
possuirá
uma
pasta
correspondente
dentro
de
grails-‐app/views
Ex.:
grails-‐app/views/paciente
As
views
são
definidas
em
GSPs
Convenção:
‘redirecione
para
a
GSP
com
o
mesmo
nome
da
ação
do
controller
(customizável)’
32. GROOVY
SERVER
PAGES
(GSPS)
Renderizam
as
views
Grails
provê
cerca
de
50
tags
para
uso
em
GSPs
Lógicas,
loops,
criação
de
links,
forms,
campos
de
form
Tags
para
gerenciamento
de
Javascript
e
outros
recursos
TagLibraries
podem
ser
criadas
facilmente
34. SERVICES
Suporte
automáIco
a
transações
sta4c
transac4onal
=
true
|
false
AutomaIcamente
gerenciados
pelo
Spring
Services
podem
ser
injetados
em
controllers,
outros
services
e
classes
de
domínio
35. EXTENDENDO
O
GRAILS
COM
PLUGINS
A
maioria
das
principais
partes
do
Grails
são
na
verdade
implementadas
como
plugins
Busque
em
h^p://grails.org/plugins
36. TESTES
Grails
cria
esqueletos
para
testes
unitários
Várias
subclasses
de
GroovyTestCase
para
testar
componentes
do
Grails
Suporte
a
mocks
mockDomain,
mockForConstraintsTest,
mockController,
mockTagLib,
mockLogging
Testes
de
integação
suportados
com
configuração
de
ambiente
de
testes
separada
para
o
banco