produtividade em java com grails
DESCRIPTION
INFORUSO / INOVATEC 2009TRANSCRIPT
![Page 1: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/1.jpg)
Produtividade em Java
Com Grails
![Page 2: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/2.jpg)
Objetivo
“Apresentar a framework Grails, como uma evolução dentro da plataforma Java, que
eleva a produtividade com o menor risco, e está pronta para a computação nas nuvens”
![Page 3: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/3.jpg)
Introdução
� Plataformas?� Java, .NET, PHP, Ruby, Python...
� Frameworks?� Hibernate/JPA, Spring, “EJB”...
� Frameworks Web?� Java: Tapestry 5, Wicket, JSF, Struts...� Rails, Django, WebForms/MVC...
![Page 4: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/4.jpg)
Apresentação
� Eteg Tecnologia Ltda .� Sistemas Java e .Net� Capacitação / treinamento� MPS.BR Nível F
� Wanderson Santos� Arquiteto de Sistemas e Instrutor @ Eteg� Ampla experiência com plataformas Java, .NET e PHP� Entusiasta das práticas ágeis para desenvolvimento
![Page 5: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/5.jpg)
Plataforma Java
� Plataforma = Fundação� Programamos com linguagem Java na plataforma
Java
� Linguagem Java (class, for, if, get/set...)� A linguagem exige muita repetição (ex. get/set)
� Plataforma Java (JVM, JAR/libs, WAR..)� A plataforma exige muita configuração
![Page 6: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/6.jpg)
Software sempre
� “Revoluções por minuto”
� A todo momento surgem...� Novas linguagens, mais avançadas que as
anteriores� Novas plataformas, mais avançadas que as
anteriores
![Page 7: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/7.jpg)
Como lidar com este fato?
� Ignorar : não mudar nada� “Vamos manter nossos sistemas em VB 6”� “Eu ainda não tive problemas com JSP/JDBC”
� Resultado� Perda de produtividade para o mercado� Escassez de talentos� Qualidade x Produtividade
![Page 8: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/8.jpg)
Como lidar com este fato?
� Revolução : mudar tudo� “Migrar nossos sistemas em Delphi para .NET”� “Abandonar o Java para trilhar no Ruby On Rails”
� Resultado� Perda de ativos de reuso� Reescrita de todas as bibliotecas (arrg!)� Grandes arquiteturas de integração
![Page 9: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/9.jpg)
Como lidar com este fato?
� Evolução : mudar o que não está bom� “Vamos manter a plataforma Java e migrar para
linguagem Groovy”
� Resultado� Mantém ativos de reuso (mesma plataforma)� Migração iterativa
� Novo módulo ou sistemas será mais produtivo
![Page 10: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/10.jpg)
Veredito
� O problema não é aprender....� Desenvolvedores querem sempre melhorar sua
produtividade, aprender coisas novas� Tendência: programador poliglota
� Uma linguagem para cada objetivo (DSLs). Ex.: SQL
� O problema é perder o que foi feito!� “Todas as bibliotecas em Delphi tiveram que ser
convertidas para Java.”
![Page 11: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/11.jpg)
O que é Groovy?
� “Linguagem Java 2.0”� Sintaxe reduzida e poder funcional� Linguagem padrão Java (JSR-241)
� Inclui recursos encontrados no Python, Ruby e Smalltalk, mantendo sintaxe Java� Inferência de tipos (def), closures, etc.
� JDK padrão turbinada (Groovy JDK)
![Page 12: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/12.jpg)
Classe Java
public class Usuario {
private String nome;private Date dataNascimento;
public String getNome() {
return nome;
}
(...não cabe no slide! ☺)
![Page 13: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/13.jpg)
Classe Groovy ☺
class Usuario {
String nomeDate dataNascimento
}
Obs.: Aceita todas a sintaxe da linguagem Java!
![Page 14: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/14.jpg)
Coleção em Java
List frutas = new ArrayList();
frutas.add(‘pera’);frutas.add(‘uva’);
frutas.add(‘maca’);
for (String fruta : frutas) {
System.out.println(fruta);
}
![Page 15: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/15.jpg)
Coleção em Groovy ☺
def frutas = [‘pera’,’uva’,’maca’]frutas.each {
println it
}
//Fui embora mais cedo!
![Page 16: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/16.jpg)
I Love Groovy ☺
� println "${usuario.nome}, ${usuario.idade}”> João Ribeiro, 35
� def hoje = new Date()println hoje.format (‘MMM/yy’)> Set/2009
Tem muito, mas muito mais!
![Page 17: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/17.jpg)
Arquitetura Java
� Configurar e manter uma boa arquitetura demanda tempo e muito conhecimento� Muitas bibliotecas e frameworks � Muitas camadas
� Escravos de Jó
� Muita configuração� XML, XML, XML...
![Page 18: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/18.jpg)
Grails – O cálice sagrado
� Full-Stack Framework� Groovy + Spring + Hibernate
� “Groovy On Rails”� A disruptividade do Rails dentro da conhecida
Plataforma Java
� Guiada por princípios� Convenção sob Configuração � “Não se repita” (DRY)
![Page 19: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/19.jpg)
Arquitetura Grails
� Utiliza camadas convencionais� View� Controller� Service*� Domain
� Cada camada tem uma pasta específica� Só utiliza camada Service para controlar
transação de persistência.
![Page 20: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/20.jpg)
Disruptividades
� Utiliza a sintaxe concisa e clara do Groovy
� No XML “hell”� Configuração por convenção� Mesmo a configuração necessária não usa XML
� No DAO� Métodos para persistência são injetados nas
entidades (ActiveRecord Pattern)
![Page 21: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/21.jpg)
Exemplo: Configuração
environments {development {
dataSource {username = "sa"password = ""dbCreate = "create-drop" url = "jdbc:mysql://dbserver"
...
![Page 22: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/22.jpg)
Exemplo: Persistência
def wans = new Usuario()
wans.nome = ‘Wanderson Santos’wans.dataNascimento =
Date.parse(‘dd/MM/yyyy’,’01/11/1981’)
wans.dataCadastro = new Date()
wans.save() //fui!
![Page 23: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/23.jpg)
Disruptividades
� Abstrai as frameworks padrão de mercado� Meta-plataforma
� Contato “zero” com Hibernate e Spring
� Se precisar, pode contar com eles!
� Curva de aprendizado branda� Consideravelmente menor do que outras
soluções na plataforma Java
� Qualidade com produtividade!
![Page 24: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/24.jpg)
Exemplo: Consultas
def silvas = Usuario.withCriteria {
def hoje = new Date()between (‘dataCadastro’, hoje-7, hoje)
like (‘nome’, ‘%Silva%')
maxResults (5)
order (‘dataAniversario’, ‘desc’)
}
![Page 25: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/25.jpg)
Exemplo: Visão
<body>
Olá ${params.mundo} !<g:each in="${[1,2,3]}" var=“ numero">
<p>Número ${numero}</p>
</g:each></body>
![Page 26: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/26.jpg)
Grails no mercado
� Mantida pela Spring Source
� Ávida comunidade (www.grails.org)� Documentação excepcional
� Guia do Usuário (passo-a-passo)� Guia de Referência
� http://www.grailsbrasil.com/
![Page 27: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/27.jpg)
Ferramentas para Grails
� Baseado em linha de comando (rails-like)� Muitos programam sem IDE
� Estrutura de projeto com 1 comando� grails create-app infocon
� Excelente suporte no IntelliJ IDEA 8
� Suporte completo na Spring IDE (Eclipse) em Outubro/09
![Page 28: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/28.jpg)
Grails Plugins
� Extensibilidade da framework� Similar ao conceito de JARs, porém orientadas as
convenções do Grails� grails install-plugin auditable
� Tem plugin pra tudo! ☺� Autenticação, Busca Avançada, Componentes
Visuais, Auditoria e vários outros...
![Page 29: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/29.jpg)
Por que Grails?
� Mantem investimento na plataforma Java� Bibliotecas JARs, Tomcat, JBoss, JVM, etc.
� Traz uma nova forma de pensar uma aplicação (herança do Rails)� Remove gorduras extras da linguagem Java e
suas respectivas configurações
� Muito prático e produtivo � Thanks Groovy! ☺
![Page 30: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/30.jpg)
Grails é verde!
� Roda nativamente na Cloud Foundry� Basta trocar o “DataSource”
� Cloud Foundry� Plataforma aberta baseada no Cloud Tools� Abstrai plataformas existentes (Amazon EC2)
� Eteg já escala em máquinas “virtualizadas”� A conhecida robustez da plataforma Java
![Page 31: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/31.jpg)
Declarações
� LinkedIn (250 funcionários)� “For our usage, Grails is a lot more productive
than current crop of mainstream Java Web-AppFrameworks” [in Grails At LinkedIn]
� Eteg Tecnologia� “Grails simplificou nossa curva de aprendizado e
reduziu a complexidade de implementação de nossos sistemas”
� “Tivemos uma considerável melhoria de produtividade, reduzindo o total de horas consumidas por projeto”
![Page 32: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/32.jpg)
Por onde começar?
� Grails User Guide (www.grails.org)
� IBM “Mastering Grails”� Diversos livros no mercado
� Cadastrar-se em fóruns e listas de discussão
� Muitas referências na Web!
![Page 33: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/33.jpg)
Perguntas?
![Page 35: Produtividade em Java com Grails](https://reader033.vdocuments.mx/reader033/viewer/2022042713/547d01c95806b5cc3f8b4825/html5/thumbnails/35.jpg)
Referências
� Site oficial: http://www.grails.org
� Grails Introductionhttp://www.slideshare.net/glaforge/grails-introduction-ijtc-2007-presentation
� Grails At LinkedInhttp://www.slideshare.net/linkedin/grails-at-linked