DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login

Construindo uma aplicação CRUD com o Grails - Parte I

Neste artigo vamos construir uma aplicação CRUD para duas tabelas: Pessoa e Carro, sendo que uma Pessoa pode possuir vários carros. Uma busca de carros com AJAX também será implementada. Para demonstrar a integração com uma outra API, um exemplo de geração de PDF será implementado com o framework iText.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo

                                                                  

O Grails é um framework web open-source que utiliza a linguagem Groovy, e outros frameworks consagrados como Hibernate, Spring e Sitemesh. O grails foi projetado para desenvolver aplicações CRUD (Create Read Update Delete) de forma simples e ágil, utilizando o modelo de “escrever código por convenção” introduzido pelo Ruby on Rails. O Grails está se propondo a trazer a produtividade do Ruby on Rails para a plataforma Java, porém ele possui uma grande vantagem, sendo que a linguagem Groovy roda sobre uma JVM, e pode utilizar classes Java e as diversas APIs que existem normalmente.

 

Neste artigo vamos construir uma aplicação CRUD para duas tabelas: Pessoa e Carro, sendo que uma Pessoa pode possuir vários carros. Uma busca de carros com AJAX também será implementada. Para demonstrar a integração com uma outra API, um exemplo de geração de PDF será implementado com o framework iText.


A linguagem Groovy

Groovy (padronizado pela JSR-241) é uma linguagem dinâmica e ágil para a plataforma Java, que possui muitas características de linguagens de script como Ruby, Python e Smalltalk, e ainda pode utilizar classes Java facilmente.

 

A sintaxe da linguagem também é similar ao Java, permitindo que os desenvolvedores Java se sintam em “casa” ao desenvolver aplicações ou ao começar a estudar o Groovy.

 

Linguagens de script estão ganhando cada vez mais popularidade, devido a quantidade reduzida de código fonte necessário para implementar determinadas funcionalidades, se comparado com uma implementação em Java.  Veremos neste artigo como o Groovy realiza a integração com o Hibernate, e como é possível utilizar “métodos dinâmicos” sem implementar o código, tudo devido a flexibilidade da linguagem Groovy.

 

Para saber mais sobre Groovy é recomendável a leitura da edição 32 da revista Java Magazine.

 

Instalando o Grails

 

Faça o download:

 

http://dist.codehaus.org/grails/grails-bin-0.2.zip

 

Para instalar o Grails basta descompactar o arquivo em alguma pasta, por exemplo “c:\grails” no Windows. A variável GRAILS_HOME deve ser configurada para este diretório. A variável PATH deve apontar para “%GRAILS_HOME%\bin”.

 

Pronto! Após isto já é possível abrir um prompt e digitar “grails”.

 

Criando o Projeto

Abra um prompt, entre na pasta onde o projeto deverá ser criado e digite o comando “grails create-app” e informe o nome do projeto. Digite “exemplo” para este artigo.

> grails create-app  create-app:
    [input] Enter application name:
exemplo 

    > cd exemplo

 

Uma pasta com o nome do projeto, neste caso “exemplo”, será criada no diretório atual. Ainda no prompt, entre neste diretório para digitar os próximos comandos.

 

A estrutura de diretórios é bastante simples, na pasta “grails-app” é onde ficam a maioria dos arquivos necessários para a aplicação:

%PROJECT_HOME%
    + grails-app
       + conf          >> arquivos de configuração como DataSource
       + controllers   >> Pasta onde ficam os controllers
       + domain        >> Domain Model
       + i18n          >> arquivo properties para internacionalização
       + services      >> Classes que atuam como Serviços
       + taglib        >> tag libraries
       + views         >> Páginas em GSP ou JSP
           + layouts   >> Templates para as páginas
   + lib               >> Diretórios para inserir os jar’s
   + spring            >> Para configurar os beans do Spring (opcional)
   + hibernate         >> Para configurar o mapeamento do Hibernate manualmente (opcional)
   + war               > A pasta war é onde fica o projeto Web.
       + WEB-INF       > O commando “grails war” cria um “.war” pronto para ser instalado em
um Servlet Container

Configurando o banco de dados

Para configurar o banco de dados utilizado pela aplicação, pode-se editar o arquivo “/exemplo/grails-app/conf/ApplicationDataSource.groovy”, o qual define a data source de conexão com o banco de dados, que por default é utilizado o HSQL em memória.

 

Para este artigo, não é necessário alterar nada neste arquivo, mas caso seja necessário utilizar outro banco de dados, basta alterar os parâmetros e copiar o driver JDBC para o diretório “lib” do projeto criado.

 

class ApplicationDataSource {

   boolean pooling = true

   String dbCreate = "create-drop" // 'create', 'create-drop','update'

   String url = "jdbc:hsqldb:mem:testDB"

   String driverClassName = "org.hsqldb.jdbcDriver"

   String username = "sa"

   String password = ""
}

 

O parâmetro “dbCreate” pode ser configurado para criar o banco de dados toda vez que reinciar a aplicação, ou somente para atualizar o banco caso novas tabelas ou colunas sejam encontradas. Caso as tabelas já existam e não devem ser alteradas, que é o caso de banco de dados legados, basta comentar esta linha.

 

Criando uma aplicação CRUD

Para criar aplicações CRUD com o Grails, é necessário criar as classes que serão persistidas. Vamos criar as classes Pessoa e Carro, onde uma Pessoa pode ter vários Carros.

 

Antes de continuar, certifique-se que você está no diretório do projeto criado anteriormente.

 

Abra o prompt e digite “grails create-domain-class” para criar uma classe, e informe o nome. Faça este procedimento para a classe Pessoa e Carro, conforme abaixo:

 

> grails create-domain-class  create-domain-class:
    [input] Enter domain class name:
Pessoa 

     ….. 

> grails create-domain-class  create-domain-class:
    [input] Enter domain class name:
Carro

Os arquivos Pessoa.groovy e Carro.groovy serão criados no diretório
“exemplo/grails-app/domain”. Edite os arquivos conforme abaixo:

 

class Pessoa {

         Long id

         Long version

 

         String nome

         String email

 

         def relatesToMany = [ carros : Carro ]

         Set carros = new HashSet()

 

    String toString() { "${this.class.name} :  $id" }

}

 

class Carro {

         Long id

         Long version

 

         String nome

         int ano

         Date dataVenda

 

         Pessoa pessoa

 

         String toString() { "${this.class.name} :  $id" }

}

 

O próximo passo é gerar a camada de controller e view para as classes acima, que pode ser
facilmente feito pelo comando “grails generate-all”, conforme abaixo:

 

> grails generate-all  input-domain-class:    [input] Enter domain class name: Pessoa

> grails generate-all  input-domain-class:    [input] Enter domain class name:

Carro

 

As classes de controle para a Pessoa e Carro foram criadas na pasta
“exemplo/grails-app/controllers” e as views foram geradas na pasta “exemplo/grails-app/views”.

 

Pronto! Uma aplicação CRUD para cadastrar Pessoas e Carros acabou de ser construída.
Agora podemos iniciar a aplicação através do comando ”grails run-app”. Como a data source
explicada anteriormente está configurada com o parâmetro “dbCreate = create-drop", o banco
de dados será automaticamente criado ao iniciar a aplicação.

 

A porta default do servidor é 8080, para alterar basta passar o argumento “server.port”,
conforme abaixo.

  > grails run-app -Dserver.port=80 Run-app:watch-context:

 

Acesse a aplicação em http://localhost/exemplo/, e os controles cadastrados poderão ser visualizados conforme a seguinte imagem:

 

fig01grails.JPG 

 

Cadastre uma nova pessoa conforme visualizado abaixo, e depois crie um Carro para esta Pessoa.

 

fig02grails.JPG fig03grails.JPG 

Como você pode perceber, o Grails gerou uma aplicação CRUD completa para as classes desejadas, e também controlou o relacionamento de 1 para muitos que existe entre as tabelas Pessoa e Carro. Internamente o Grails utiliza o Hibernate para realizar a persistência.

 

Entendendo o código fonte gerado

Os “Controles” ficam na pasta “exemplo/grails-app/controllers” e as views em “exemplo/grails-app/views”. Abra a classe PessoaController.groovy e note que existe uma “action” para cada funcionalidade da aplicação, como listar todas as pessoas, criar uma nova, deletar, etc. A sintaxe é bastante simples, vamos verificar alguns pontos do código:

 

    def show = {

        [ pessoa : Pessoa.get( params.id ) ]

   }

 

A Action “show” mostra um pouco do poder do Grails, note que em apenas 1 linha, foi feito uma busca pelo ID da Pessoa, e criado uma variável “pessoa”, que é automaticamente inserida na request e pode ser acessada na página (show.gsp). Note que nenhum arquivo XML precisa ser configurado, e o arquivo “show.gsp” é utilizado por convenção, sendo que ele possui o mesmo nome da action.

 

O exemplo acima também mostra como a linguagem é dinâmica, note que o “params.id” retorna o parâmetro “id” passado como parâmetro, mas não foi necessário fazer um cast para chamar a função “get”. Também observe que a função “get” não foi implementada em lugar nenhum. Isto faz parte do pattern “Active Record” proposto pelo Marin Fowler, e utilizado extensivamente no Ruby on Rails. Neste pattern os objetos de modelo já possuem métodos de lógica de negócios e persistência.

 

http://www.martinfowler.com/eaaCatalog/activeRecord.html

 

Outros métodos podem ser utilzados, como “save”, “delete”, “count”, “find”, etc. Verifique no código fonte das classes de Controller como alguns destes métodos são utilizados.

 

Ainda métodos totalmente dinâmicos pode ser utilizados para consultar os objetos, conforme documentado nesta página: http://grails.codehaus.org/DomainClass+Dynamic+Methods#DomainClassDynamicMethods-findAll

 

Na próxima seção, um exemplo de método dinâmico será implementado para realizar a busca de um Carro cadastrado.

 

 

Para ler a segunda parte deste artigo, acesse:

http://www.devmedia.com.br/construindo-uma-aplicacao-crud-com-o-grails-parte-ii/2513


Ricardo Rodrigues Lecheta (ricardolecheta@terra.com.br), é autor do livro “Google Android” - Aprenda a criar aplicações para dispositivos móveis utilizando o Android SDK e possui as certificações SCJP, SCWCD, SCBCD, SCMAD, SCEA.

O que você achou deste post?
Conhece a assinatura MVP?
Serviços

Mais posts