Este documento apresenta um treinamento sobre Grails, incluindo: (1) introdução ao Groovy e suas funcionalidades, (2) modelagem de domínio com classes e relacionamentos, e (3) geração automática de telas e controle de acesso com plugins.
20. Groovy???
Groovy é uma linguagem ágil dinâmica
para a plataforma java com muitas
funcionalidades inspiradas de linguagens
como Python, Ruby e Smalltalk,
disponibilizando tais funcionalidades
para os desenvolvedores Java em uma
sintaxe muito semelhante a Java.
38. One-to-One
grails create-app Editora
cd Editora
grails create-domain-class Livro
grails create-domain-class Autor
grails create-controller editora.Livro
grails create-controller editora.Autor
39. One-to-One
package editora
class Autor {
String nome
static constraints = { }
}
package editora
class Livro {
String nome
Autor autor
static constraints = { }
}
40. Altere os Controllers
package editora
class LivroController {
static scaffold = true
}
package editora
class AutorController {
static scaffold = true
}
41. O que acontece com o BD?
CREATE TABLE autor
(
id bigint NOT NULL,
version bigint NOT NULL,
nome character varying(255) NOT NULL,
CONSTRAINT autor_pkey PRIMARY KEY (id)
);
CREATE TABLE livro
(
id bigint NOT NULL,
version bigint NOT NULL,
autor_id bigint NOT NULL,
nome character varying(255) NOT NULL,
CONSTRAINT livro_pkey PRIMARY KEY (id),
CONSTRAINT fk6236e961d71d4e0 FOREIGN KEY (autor_id)
REFERENCES autor (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
42. One-to-One Bi-direcional
package editora
class Autor {
String nome
Livro livro
static constraints = { }
}
package editora
class Livro {
String nome
static belongsTo = [autor: Autor]
static constraints = { }
}
44. One-to-Many
package editora
class Livro {
String nome
Autor autor
static constraints = {}
}
package editora
class Autor {
String nome
static hasMany = [livro : Livro]
static constraints = {}
}
46. Many-to-Many
package editora
class Livro {
String nome
static hasMany = [autores : Autor]
static constraints = { }
}
package editora
class Autor {
String nome
static belongsTo = Livro
static hasMany = [livros : Livro]
static constraints = { }
}
47. Many-to-Many
• Grails cria uma tabela de junção autor_livros
• O Relacionamento será mantido pelo lado
muitos
• No caso do exemplo anterior, será mantida
através do cadastro de Livros
48. Customizando telas
Mas telas geradas para o
many-to-many não são
muito boas.
KD os arquivos de tela ?
Como faço o pra alterar as
páginas?
49. Nem tudo são flores. Alguma hora
vocês tinham que programar.
50. Então, mãos à massa
grails generate-all editora.Autor
grails generate-all editora.Livro
Isso recria as classes de controller
e gera os arquivos da camada de
visão
51. Controller
O controller é gerado com algumas ações:
– Index : redireciona para list
– List: motra uma lista paginada
– Show: mostra todas as propriedades de uma
instancia
– Delete: apaga um registro
– Edit: mostra o formulário de edição e submete
para “update”
– Update: salva as alterações em um registro
– Create: mostra o formulário para cadastrar um
registro e redireciona para “save”
– Save: salva um objeto no banco
52. View
• Dentro de “grails-app/views” são gerados os
arquivos GSP(Groovy Server Pages).
• Dentro de uma pasta com o nome da entidade
são criados:
– create.gsp
– edit.gsp
– list.gsp
– show.gsp
57. Internacionalização
Veja o arquivo
grails-app/i18n/message.properties
Mas tem também ...
grails-app/i18n/message_pt_BR .properties
grails-app/i18n/message_pt_PT.properties
...
grails-app/i18n/message_es.properties
59. Services
• Classes Service são Plain Old Groovy Object
(POGO) localizadas na pasta grails-
app/services
• E com o nome terminado com Service
• São uma forma fácil de extrair código extra
de dentro dos Controllers
• Para criar um service:
grails create-service Task
60. Services
class TaskService {
boolean transactional = true
def serviceMethod() {
…
}
}
class TekEventController {
def taskService
def index = {
taskService.serviceMethod()
redirect(action:list,params:params)
}
}
62. Plugins
• O que o Grails não tem nativamente a
solução pra tudo
• A idéia é que uma funcionalidade seja
empacotada em módulos que podem ser
carregados pelo framework e
integrados ao seu sistema
• Pesquisa em texto puro, tag clouds,
extensões de UI, login e controle de
acesso, etc…
• Acesse: http://www.grails.org/plugins
63. Mãos à obra
Instalando plugins spring-security-core
grails install-plugin spring-security-core
grails s2-quickstart editora.access SecUser Role Requestmap
70. Atividade da semana
• Trabalho em equipe(5 pessoas)
• Criar um sistema em grails com o assunto visto até
aqui
• O sistema deve ter no mínimo 20 entidades
• Deve possuir controle de acesso
• A modelagem vocês decidem
• Apresentar na próxima aula os pontos positivos e
negativos durante o uso da tecnologia
72. Bibliografia
Brown, Jeff; Rocher, Graeme (January 15, 2009), The Definitive Guide to Grails (2nd
ed.), Apress, pp. 648, ISBN 1590599950
Smith, Glen; Ledbrook, Peter (June 28, 2009), Grails in Action (1st ed.), Manning
Publications, pp. 520, ISBN 1933988932
Dickinson, Jon (May 27, 2009), Grails 1.1 Web Application Development (1st ed.),
Packt Publishing, pp. 328, ISBN 1847196683
Abdul-Jawad, Bashar (December 2, 2008), Groovy and Grails Recipes (1st ed.), Apress,
pp. 424, ISBN 143021600X
Fischer, Robert (April 20, 2009), Grails Persistence with GORM and GSQL (1st ed.),
Apress, pp. 125, ISBN 1430219262
M. Judd, Christopher; Nusairat, Joseph Faisal; Shingler, Jim (June 18, 2008), Beginning
Groovy and Grails: From Novice to Professional (1st ed.), Apress, pp. 440, ISBN
1430210451
Rudolph, Jason (February 6, 2007), Getting Started with Grails (1st ed.), Lulu.com, pp.
132, ISBN 143030782X