#Este é um post fechado Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como abrir este post!
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.
Java Magazine 76
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 76
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 76
BRK##: 0 - 0
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;
ATENÇÃO! A exibição deste artigo foi interrompida.
#Este é um post fechado
Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como abrir este post!
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;
ATENÇÃO! A exibição deste artigo foi interrompida.
#Este é um post fechado Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como abrir este post!


Ricardo De Paiva Silva
em 10/3/2010 12:48 - Responder
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!
em 10/3/2010 12:48 - Responder

[Comentário do autor]
Henrique Lobo Weissmann
em 10/3/2010 12:54 - Responder
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!
em 10/3/2010 12:54 - 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]
em 30/3/2010 16:09 - Responder

[Comentário do autor]
Henrique Lobo Weissmann
em 30/3/2010 16:21 - Responder
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!
em 30/3/2010 16:21 - Responder

[Comentário do autor]
Henrique Lobo Weissmann
em 30/3/2010 16:22 - Responder
Henrique Lobo Weissmann
Sérgio, na realidade eu quis dizer resposta que dei ao Ricardo.
Desculpe pelo engano. :)
Desculpe pelo engano. :)
em 30/3/2010 16:22 - 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.
em 30/3/2010 16:53 - Responder

[Comentário do autor]
Henrique Lobo Weissmann
em 30/3/2010 16:57 - Responder
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.
em 30/3/2010 16:57 - Responder


Rogerio Fonseca Goncalves
em 27/7/2010 16:41 - Responder
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
em 27/7/2010 16:41 - Responder

[Comentário do autor]
Henrique Lobo Weissmann
em 27/7/2010 16:45 - Responder
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?
em 27/7/2010 16:45 - 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
em 27/7/2010 17:53 - 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
em 27/7/2010 18:12 - 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?
em 7/8/2010 00:49 - Responder

[Comentário do autor]
Henrique Lobo Weissmann
em 9/8/2010 08:18 - Responder
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.
em 9/8/2010 08:18 - Responder


Amanda Gabriela Alves
em 29/9/2010 11:09 - Responder
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.
em 29/9/2010 11:09 - Responder

[Comentário do autor]
Henrique Lobo Weissmann
em 29/9/2010 11:14 - Responder
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!
em 29/9/2010 11:14 - Responder


Rubens Tsunemi Umeda
em 29/12/2010 23:09 - Responder
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"
}
em 29/12/2010 23:09 - Responder
Você está em:
canal Java
Henrique Lobo Weissmann
Space do autor
É consultor Groovy/Grails, fundador do Grails Brasil e sócio da itexto Desenvolvimento de Projetos, que atua na criação de projetos adotando software livre e muito Grails.
Space do autor


Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL

0
0
Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!