produtividade em java com grails
DESCRIPTION
INFORUSO / INOVATEC 2009TRANSCRIPT
Produtividade em Java
Com Grails
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”
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...
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
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
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
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
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
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
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.”
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)
Classe Java
public class Usuario {
private String nome;private Date dataNascimento;
public String getNome() {
return nome;
}
(...não cabe no slide! ☺)
Classe Groovy ☺
class Usuario {
String nomeDate dataNascimento
}
Obs.: Aceita todas a sintaxe da linguagem Java!
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);
}
Coleção em Groovy ☺
def frutas = [‘pera’,’uva’,’maca’]frutas.each {
println it
}
//Fui embora mais cedo!
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!
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...
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)
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.
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)
Exemplo: Configuração
environments {development {
dataSource {username = "sa"password = ""dbCreate = "create-drop" url = "jdbc:mysql://dbserver"
...
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!
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!
Exemplo: Consultas
def silvas = Usuario.withCriteria {
def hoje = new Date()between (‘dataCadastro’, hoje-7, hoje)
like (‘nome’, ‘%Silva%')
maxResults (5)
order (‘dataAniversario’, ‘desc’)
}
Exemplo: Visão
<body>
Olá ${params.mundo} !<g:each in="${[1,2,3]}" var=“ numero">
<p>Número ${numero}</p>
</g:each></body>
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/
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
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...
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! ☺
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
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”
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!
Perguntas?
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