Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da Java Magazine DIGITAL
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Artigo Java Magazine 76 - Grails: do Groovy à Web – Parte 2
Neste artigo teremos uma visão panorâmica do Grails: um framework para desenvolvimento de aplicações web que é baseado na linguagem Groovy. Grails prima por ser um framework de alta produtividade ao adotar o princípio de padrões sobre configurações aliado aos ganhos obtidos com uma linguagem dinâmica.
[fechar]
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
Java Magazine 76
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 76
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 76
Grails: do Groovy à Web – Parte 2
Alta produtividade no desenvolvimento de aplicações web
Neste artigo teremos uma visão panorâmica do funcionamento do Grails, um framework full stack para desenvolvimento de aplicações web
Agora que o básico da linguagem Groovy foi exposto, podemos finalmente começar a nos aprofundar em Grails. Iremos trabalhar em cima de um dos exemplos mais utilizados para se demonstrar frameworks como este: um gerenciador de blogs. A escolha deste exemplo se baseia nas seguintes razões: 1) É simples o suficiente para aqueles que estão iniciando sua experiência na área de desenvolvimento de sistemas; 2) É um exemplo famoso utilizado por aqueles que iniciam seu aprendizado em Ruby on Rails ; 3) Apesar de simples, nos fornece a possibilidade de expor os principais conceitos por trás do funcionamento do framework.
O gerenciador de blogs GBlog
Nossa aplicação será o gerenciador de blogs GBlog, cujas classes de domínio encontram-se representadas no diagrama de classes exibido na Figura 1. O GBlog fornecerá basicamente as mesmas funcionalidades que os motores de blogs mais avançados, como Wordpress ou Blogspot, ou seja, nossos usuários poderão cadastrar novos posts e também adicionar comentários. Além disso, todos os posts dos usuários serão organizados em tópicos, o que facilitará a navegação dos visitantes.
Figura 1. Classes de domínio de nossa aplicação.
Analisando as classes de domínio expostas na Figura 1 podemos ter uma noção de como nossa aplicação será:
• Usuario: em nossa aplicação há dois tipos de usuário, autor e leitor, que são definidos pelo atributo papel. Somente usuários com o papel autor poderão incluir novos posts no site, enquanto o papel de leitor permitirá comentar os posts presentes no blog;
• Post: todo post possui os atributos título, data, conteúdo e palavrasChave, além de estar ligado a um único autor e categoria;
• Categoria: consiste em uma unidade organizacional de nosso sistema. Sua única função será facilitar o acesso ao conteúdo do blog. As categorias serão expostas em ordem alfabética na página inicial de nosso site, facilitando o acesso ao conteúdo;
• Comentario: um comentário estará sempre relacionado a um usuário cadastrado e a um post. Se quiser, o usuário que adicionar um comentário pode fornecer seu e-mail para que outros visitantes do site (ou mesmo o autor do post) o contatem posteriormente.
Criando a aplicação
Ao trabalharmos com Grails, a interface de linha de comandos do seu sistema operacional desempenhará um papel fundamental. O comando grails é o responsável pela criação de todos os artefatos que iremos necessitar no transcorrer destes artigos.
Para criarmos nossa aplicação, precisamos, portanto, executar o comando grails create-app GBlog. A execução deste comando irá criar dentro do diretório corrente um subdiretório chamado GBlog (ou o nome que você quiser dar à sua aplicação) cuja estrutura interna será descrita a seguir.
É muito importante conhecer bem esta estrutura de diretórios (Figura 2) se quisermos trabalhar com Grails. Como veremos a seguir, trata-se de uma estrutura bastante simples, que ao ser descrita irá expor os princípios básicos do funcionamento do framework.
• grails-app: é o diretório mais importante de nossa aplicação. A maioria das classes que vamos criar em nosso projeto estará presente em um de seus subdiretórios;
"
Este é um post disponível para assinantes MVP
Alta produtividade no desenvolvimento de aplicações web
Neste artigo teremos uma visão panorâmica do funcionamento do Grails, um framework full stack para desenvolvimento de aplicações web
Agora que o básico da linguagem Groovy foi exposto, podemos finalmente começar a nos aprofundar em Grails. Iremos trabalhar em cima de um dos exemplos mais utilizados para se demonstrar frameworks como este: um gerenciador de blogs. A escolha deste exemplo se baseia nas seguintes razões: 1) É simples o suficiente para aqueles que estão iniciando sua experiência na área de desenvolvimento de sistemas; 2) É um exemplo famoso utilizado por aqueles que iniciam seu aprendizado em Ruby on Rails ; 3) Apesar de simples, nos fornece a possibilidade de expor os principais conceitos por trás do funcionamento do framework.
O gerenciador de blogs GBlog
Nossa aplicação será o gerenciador de blogs GBlog, cujas classes de domínio encontram-se representadas no diagrama de classes exibido na Figura 1. O GBlog fornecerá basicamente as mesmas funcionalidades que os motores de blogs mais avançados, como Wordpress ou Blogspot, ou seja, nossos usuários poderão cadastrar novos posts e também adicionar comentários. Além disso, todos os posts dos usuários serão organizados em tópicos, o que facilitará a navegação dos visitantes.
Figura 1. Classes de domínio de nossa aplicação.
Analisando as classes de domínio expostas na Figura 1 podemos ter uma noção de como nossa aplicação será:
• Usuario: em nossa aplicação há dois tipos de usuário, autor e leitor, que são definidos pelo atributo papel. Somente usuários com o papel autor poderão incluir novos posts no site, enquanto o papel de leitor permitirá comentar os posts presentes no blog;
• Post: todo post possui os atributos título, data, conteúdo e palavrasChave, além de estar ligado a um único autor e categoria;
• Categoria: consiste em uma unidade organizacional de nosso sistema. Sua única função será facilitar o acesso ao conteúdo do blog. As categorias serão expostas em ordem alfabética na página inicial de nosso site, facilitando o acesso ao conteúdo;
• Comentario: um comentário estará sempre relacionado a um usuário cadastrado e a um post. Se quiser, o usuário que adicionar um comentário pode fornecer seu e-mail para que outros visitantes do site (ou mesmo o autor do post) o contatem posteriormente.
Criando a aplicação
Ao trabalharmos com Grails, a interface de linha de comandos do seu sistema operacional desempenhará um papel fundamental. O comando grails é o responsável pela criação de todos os artefatos que iremos necessitar no transcorrer destes artigos.
Para criarmos nossa aplicação, precisamos, portanto, executar o comando grails create-app GBlog. A execução deste comando irá criar dentro do diretório corrente um subdiretório chamado GBlog (ou o nome que você quiser dar à sua aplicação) cuja estrutura interna será descrita a seguir.
É muito importante conhecer bem esta estrutura de diretórios (Figura 2) se quisermos trabalhar com Grails. Como veremos a seguir, trata-se de uma estrutura bastante simples, que ao ser descrita irá expor os princípios básicos do funcionamento do framework.
• grails-app: é o diretório mais importante de nossa aplicação. A maioria das classes que vamos criar em nosso projeto estará presente em um de seus subdiretórios;
"
A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da Java Magazine DIGITAL
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Henrique Lobo Weissmann
É consultor Groovy/Grails e Spring, fundador do Grails Brasil e sócio da itexto Desenvolvimento de Projetos aonde atua como consultor. É também o autor do livro "Vire o Jogo com Spring Framework" - http://www.casadocodigo.com.br/products/spring
O que você achou deste post?
17 COMENTÁRIOS
Ricardo De Paiva Silva
Olá!
O relacionamento da Listagem 3, na página 135 está correto?
Abraço!
O relacionamento da Listagem 3, na página 135 está correto?
Abraço!
[há +1 ano] -
Responder
[autor]
Henrique Lobo Weissmann
Oi Ricardo,
sim, o relacionamento está correto: no caso, talvez o nome do atributo escolhido (categoria ao invés de categorias) possa causar confusão.
Mas o relacionamento criado diz que uma categoria pode ter n subcategorias dentro de si: no caso, armazenadas dentro do atributo categoria (uma instância de java.util.Collection, por default Set), que será injetado na classe.
Grande abraço!
sim, o relacionamento está correto: no caso, talvez o nome do atributo escolhido (categoria ao invés de categorias) possa causar confusão.
Mas o relacionamento criado diz que uma categoria pode ter n subcategorias dentro de si: no caso, armazenadas dentro do atributo categoria (uma instância de java.util.Collection, por default Set), que será injetado na classe.
Grande abraço!
[há +1 ano] -
Responder
Sergio Weber
Acredito que tenha alguns relacionamentos errados na pagina 135.
Na classe categoria o correto seria:
static hasMany =
[posts:Post]
E na classe comentario nao deveria existir:
static hasMany = [posts:Post]
Na classe categoria o correto seria:
static hasMany =
[posts:Post]
E na classe comentario nao deveria existir:
static hasMany = [posts:Post]
[há +1 ano] -
Responder
[autor]
Henrique Lobo Weissmann
Oi Sérgio,
na realidade está correto. Da uma lida na resposta que dei ao Sérgio ok?
Grande abraço!
na realidade está correto. Da uma lida na resposta que dei ao Sérgio ok?
Grande abraço!
[há +1 ano] -
Responder
[autor]
Henrique Lobo Weissmann
Sérgio, na realidade eu quis dizer resposta que dei ao Ricardo.
Desculpe pelo engano. :)
Desculpe pelo engano. :)
[há +1 ano] -
Responder
Sergio Weber
Henrique,
Eu vi a resposta que você deu ao Ricardo.
Acontece que na listagem 3 citada, uma categoria deveria ter relacionamento com posts, ou seja, uma categoria tem muitos posts. E isso não está descrito na listagem. E de acordo com o diagrama ER (Figura 7) uma categoria tem muitos Posts.
Eu vi a resposta que você deu ao Ricardo.
Acontece que na listagem 3 citada, uma categoria deveria ter relacionamento com posts, ou seja, uma categoria tem muitos posts. E isso não está descrito na listagem. E de acordo com o diagrama ER (Figura 7) uma categoria tem muitos Posts.
[há +1 ano] -
Responder
[autor]
Henrique Lobo Weissmann
Sim Sérgio,
mas no caso, não foi um erro, porque não é obrigatório fazer um relacionamento de duas vias. Como o GORM não era o assunto foco deste artigo, optei por deixá-lo desta forma por ser inicialmente mais didático, entende?
Assim eu poderia me focar mais na visão global do Grails - que é o tema do artigo - do que em detalhes referentes aos relacionamentos.
mas no caso, não foi um erro, porque não é obrigatório fazer um relacionamento de duas vias. Como o GORM não era o assunto foco deste artigo, optei por deixá-lo desta forma por ser inicialmente mais didático, entende?
Assim eu poderia me focar mais na visão global do Grails - que é o tema do artigo - do que em detalhes referentes aos relacionamentos.
[há +1 ano] -
Responder
Rogerio Fonseca Goncalves
Olá!
Creio que existe mesmo um erro nos relacionamentos pois também estou tendo problemas com estes, pois o exemplo que fiz não funcionou o seguinte erro(VEJA OS LINKS ABAIXO), acontece ao clicar em qualquer um dos "domain" na pagina inicial do Grails após rodar o projeto com o comando "grails runa-app". Gostaria de saber qual o código está correto ou gostária que houvesse uma correção pois o código da revista e o código fonte oferecido para download estão divergentes e infelizmente nenhum deles funcionou corretamente.
Obrigado!
LINKS DOS ERROS
http://pastebin.com/gAe4QAiG
[há +1 ano] -
Responder
[autor]
Henrique Lobo Weissmann
Oi Rogério,
pelo que você expõe no seu link, este erro não parece estar relacionado a um relacionamento ou classes de domínio.
Infelizmente, só pelo seu stacktrace não da pra saber exatamente o que pode ser.
Será que você pode postar algum código expondo aonde o erro ocorre?
pelo que você expõe no seu link, este erro não parece estar relacionado a um relacionamento ou classes de domínio.
Infelizmente, só pelo seu stacktrace não da pra saber exatamente o que pode ser.
Será que você pode postar algum código expondo aonde o erro ocorre?
[há +1 ano] -
Responder
Rogerio Fonseca Goncalves
Eu não sabia que meu post ia ficar bagunçado assim. Mas se observar ali no cantinho eu coloquei o link pro paste do erro que é esse aqui http://pastebin.com/gAe4QAiG
[há +1 ano] -
Responder
Rogerio Fonseca Goncalves
Só uma observação acho que não me expressei bem mas eu realmente tive um problema com os relacionamentos e só consegui resolver pegando o código fonte que está disponível para download pq o que foi apresentando na revista está diferente do download disponibilizado. E agora estou tendo este problema apresentado ai. Obrigado pela atenção e por ter respondido tão rápido... hehehe
[há +1 ano] -
Responder
Rogerio Fonseca Goncalves
Henrique, o eu coloquei o erro no paste tem algum outro lugar específico que eu teria que ter postado as duvidas ou gostaria que eu postasse o código em outro lugar ou formato?
[há +1 ano] -
Responder
[autor]
Henrique Lobo Weissmann
Oi Rogério,
sugestão: poste sua dúvida no Grails Brasil http://www.grailsbrasil.com.br
Sou o responsável pela comunidade e lá, juntamente com os demais membros que a compõe (somos mais de 700 aqui no Brasil) poderemos ver com detalhes o que está acontecendo com você ok?
Lá é possível postar código de uma maneira mais fácil e, o que é mais interessante, ajudando os demais que possam ter dúvidas semelhantes à sua.
sugestão: poste sua dúvida no Grails Brasil http://www.grailsbrasil.com.br
Sou o responsável pela comunidade e lá, juntamente com os demais membros que a compõe (somos mais de 700 aqui no Brasil) poderemos ver com detalhes o que está acontecendo com você ok?
Lá é possível postar código de uma maneira mais fácil e, o que é mais interessante, ajudando os demais que possam ter dúvidas semelhantes à sua.
[há +1 ano] -
Responder
Amanda Gabriela Alves
Olá Henrique, depois que eu configurei o arquivo DataSource.groovy e adicionei o driver do MySQL,
minha aplicação não rodou mais. Estou fazendo esse mesmo exemplo do GBlog.
Erro apresentado: org.hivernate.HibernateException: Dialect class not found:
class org.hibertane.dialect.MySQL5InnoDBDialect
Poderia me ajudaR?!
Att.
[há +1 ano] -
Responder
[autor]
Henrique Lobo Weissmann
Oi Amanda. O problema é que você está com um erro de digitação.
Não é "org.hibertane.dialect.MySQL5InnoDBDialect", mas sim "org.hibernate.dialect.MySQL5InnoDBDialect"
Grande abraço!
[há +1 ano] -
Responder
Rubens Tsunemi Umeda
Não sei se houve alteração no Grails desde a época em que este artigo foi escrito, mas atualmente, na listagem da classe Usuario da pagina 139, listagem 9, ficaria assim:
No Quick Start do Grails (http://www.grails.org/Quick+Start), temos o seguinte exemplo:
class UsuarioController {
def scaffold = Usuario
}
No Quick Start do Grails (http://www.grails.org/Quick+Start), temos o seguinte exemplo:
package org.example
class BookController {
def scaffold = Book // Note the capital "B"
}
[há +1 ano] -
Responder
Cursos relacionados
Publicidade



