Grails: do Groovy à Web – Parte 1
Grails: do Groovy à Web – Parte 2
Grails: do Groovy à Web – Parte 3
Grails: do Groovy à Web – Parte 5
Veremos com detalhes o funcionamento do GORM, a camada de persistência adotada pelo Grails. Abordaremos temas que vão desde o básico – pesquisa, inserção, edição e exclusão de registros – até o uso avançado do framework listando questões relativas à performance e consumo de recursos.
Para que serve:
Em uma aplicação Grails é quase que inevitável a existência de classes de domínio cuja persistência é gerenciada pelo GORM. Sendo assim, nada mais natural que a necessidade de conhecermos bem este componente central do framework.
Em que situação o tema é útil:
GORM torna a persistência uma tarefa trivial: buscar e incluir informações em uma base de dados acaba por aparentar-se fácil demais. No entanto, é importante conhecer os detalhes deste componente para evitar possíveis armadilhas que surgem conforme nossos projetos vão se tornando mais complexos.
Grails do Groovy à Web – Parte 4:
Neste artigo conheceremos desde o básico sobre o funcionamento do GORM – pesquisa e alteração de dados em uma base de dados – até detalhes mais complexos do seu funcionamento, como gerência de isolamento, eventos e configurações finas do mapeamento objeto-relacional. Ao final de sua leitura o leitor estará apto a trabalhar com o GORM, além de possuir o background necessário para lidar com situações mais complexas.
Grails é um framework full stack, ou seja, o desenvolvedor não precisa inicialmente se preocupar com os componentes básicos de infraestrutura, como persistência, logs, etc. em sua aplicação por já virem pré-configurados com o próprio framework.
Em nosso caso, o componente responsável pela persistência dos dados no SGBD é o GORM – Grails Object Relational Mapping – que, como o próprio nome já diz, trata-se de uma ferramenta ORM. Arquiteturalmente, ele consiste em uma fina camada escrita em Groovy posicionada sobre o Hibernate 3, como pode ser visto na Figura 1.
Esta abordagem de implementação tem suas vantagens:
• Desenvolvedores acostumados a trabalhar com Hibernate terão uma curva de aprendizado menor;
• Ao usar como base um componente maduro e de eficácia comprovada como o Hibernate, os desenvolvedores do Grails não precisaram reinventar a roda, apenas torná-la mais próxima dos programadores Groovy.
Figura 1. GORM dentro da arquitetura de persistência de uma aplicação Grails.
Configurando o acesso ao SGBD
Por default, o Grails vem pré-configurado para trabalhar com o HSQLDB. Nesta pré-configuração o SGBD armazena os dados apenas em memória. Obviamente, esta não é a solução ideal, visto que a cada reinicio da aplicação os dados são perdidos. Para alterar o SGBD default, é preciso executar duas operações:
1. Copiar os arquivos JAR do driver JDBC do SGBD escolhido para o diretório lib da aplicação;
2. Editar o arquivo grails-app/conf/DataSource.groovy.
Neste artigo iremos trabalhar com o MySQL, porém o procedimento é o mesmo para qualquer SGBD.
Na Listagem 1 podemos ver como é o arquivo DataSource.groovy em seu estado original, isto é, logo após criarmos uma nova aplicação com o comando grails create-app. Nele, podemos verificar três blocos de código: dataSource, hibernate e environment.
Listagem 1. O arquivo grails-app/conf/DataSource.groovy original.
dataSource {
pooled = true
driverClassName = "org.hsqldb.jdbcDriver"
username = "sa"
password = ""
}
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
environments {
development {
dataSource {
dbCreate = "create-drop"
url = "jdbc:hsqldb:mem:devDB"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:mem:testDb"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
}
}
Bloco environments
Vamos iniciar a nossa análise de baixo para cima. O bloco environments contém os três ambientes de execução padrão adotados pelo Grails: development, que é usado enquanto estamos desenvolvendo nossa aplicação; test, usado na execução dos testes unitários e de integração; e production, adotado quando fazemos o deploy do nosso projeto em um servidor Java EE compatível.
Se for necessário, é possível adicionar novos ambientes de execução. Para isso, basta incluir um novo bloco de código dentro da seção environment, tal como pode ser visto na Listagem 2. Para executar os comandos do Grails na linha de comando em um ambiente específico, basta usar a sintaxe abaixo:
grails [nome do ambiente] comando
exemplo: grails opcional run-app
Listagem 2. Incluindo ambientes de banco de dados adicionais.
environments {
development {
dataSource {
dbCreate = "create-drop"
url = "jdbc:hsqldb:mem:devDB"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:mem:testDb"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
}
opcional {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
}
}
Em cada ambiente há por default duas chaves de configuração: url e dbCreate. A primeira é a URL de conexão com o SGBD, enquanto a segunda especifica qual o comportamento a ser adotado na base de dados com relação à criação/edição do esquema de dados. Os valores possíveis para esta chave encontram-se listados na Tabela 1.
Valor |
Descrição |
create-drop |
Exclui e em seguida recria a estrutura da base de dados quando o Grails é iniciado. |
create |
Cria toda a estrutura da base de dados caso a mesma não exista, mas não a modifica em caso contrário. Atenção: há possibilidade de exclusão de registros nesta configuração. |
update |
Cria a base de dados caso a mesma não exista. Caso contrário, apenas a modifica se alterações forem realizadas na aplicação. Não exclui registros. |
Tabela 1. Valores possíveis para a propriedade dbCreate.
Bloco dataSource
Neste bloco encontram-se as configurações básicas de acesso ao banco de dados que são compartilhadas por todos os ambientes de execução. Suas chaves de configuração estão descritas na Tabela 2.
Chave de configuração |
Descrição |
pooled |
Indica se um pool de conexões deve ser usado (default true). |
driverClassName |
Nome da classe do seu driver JDBC. |
username |
Nome do usuário utilizado para estabelecer uma conexão JDBC. |
password |
Senha do usuário utilizada para estabelecer uma conexão JDBC. |
url |
URL de conexão com a base de dados. |
dbCreate |
A mesma propriedade dbCreate descrita no bloco Environments. ... |
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.