The document introduces Grails, a web framework for Java that aims to provide high productivity and rapid application development. It discusses how Grails addresses issues like slow development speed and repetitive tasks that developers face with traditional Java web development. Key features highlighted include conventions over configuration, integration with Spring and Hibernate, and a large ecosystem of plugins. Real-world success stories and a vibrant community are also cited.
4. • Perda de tempo para criar
ambiente de desenvolvimento ...
• ... e para configurar uma aplicação
Olhando o passado
quarta-feira, 9 de maio de 2012
5. • Muitas tarefas repetitivas
executadas manualmente
• Muito tempo para aprender
tecnologias (Spring, Hibernate,
JSF, etc)
Olhando o passado
quarta-feira, 9 de maio de 2012
6. • Baixa produtividade no
desenvolvimento Web
Olhando o passado
quarta-feira, 9 de maio de 2012
25. Linguagem dinâmica e ágil para JVM
Java com esteróides
Todo o poder de Java mas com recursos
poderosos emprestados de outras linguagens
Integração com objetos e bibliotecas Java
quarta-feira, 9 de maio de 2012
26. public class Minicurso {
private String titulo;
public Minicurso (String titulo){
this.titulo = titulo;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem (){
return "Título do Minicurso: " + this.titulo;
}
}
quarta-feira, 9 de maio de 2012
27. public class Minicurso {
private String titulo;
public Minicurso (String titulo){
this.titulo = titulo;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem (){
return "Título do Minicurso: " + this.titulo;
}
}
quarta-feira, 9 de maio de 2012
29. “Groovyficando”
o código
class Minicurso {
def titulo
def getMensagem (){
"Título do Minicurso: ${titulo}"
}
}
miniCurso = new Minicurso (titulo = "Grails")
miniCurso.getMessagem ()
quarta-feira, 9 de maio de 2012
30. Mais facilidades...
Null Checking
if (obj != null)
...
if (obj)
...
quarta-feira, 9 de maio de 2012
31. Mais facilidades...
Null Checking
Object obj = new Object ();
String str = "Valor do objeto: " + obj == null ?
"null" : obj.toString();
Object obj = new Object()
String str = "Valor do objeto ${obj?.toString()}"
quarta-feira, 9 de maio de 2012
32. Mais facilidades...
Mapas
import java.util.HashMap;
import java.util.Map;
Map m = new HashMap();
m.put("br", "Brasil");
m.put("us", "USA");
m = [br:"Brasil", us:"USA"]
quarta-feira, 9 de maio de 2012
33. Mais facilidades...
Looping
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
o.method();
}
list.each(){
it.method()
}
quarta-feira, 9 de maio de 2012
34. Mais facilidades...
Looping
for (i in 0..<10) {
print i
}
quarta-feira, 9 de maio de 2012
35. Mais facilidades...
Return
String getEdicao (num){
"Edicao: ${num} "
}
quarta-feira, 9 de maio de 2012
36. E ainda tem muito mais!
http://groovy.codehaus.org/User+Guide
quarta-feira, 9 de maio de 2012
37. http://www.springsource.com/
developer/stso
http://netbeans.org/downloads/
index.html
http://www.eclipse.org/
downloads/
quarta-feira, 9 de maio de 2012
39. Primeiros Passos
Instalação
• Download: http://grails.org/
Download
• Descompactar a pasta
• Configurar variável de
ambiente GRAILS_HOME
• Detalhes: http://grails.org/
Installation+Portuguese
quarta-feira, 9 de maio de 2012
40. Comandos básicos
• grails create-app
• grails create-domain-class
• grails generate-all
• grails install-plugin
• grails run-app
• grails war
grails help
quarta-feira, 9 de maio de 2012
42. Você percebeu?
• Nenhum arquivo XML de configuração
• Nenhum arquivo de mapeamento
• Nenhuma configuração de banco de dados
• Nenhuma instalação de servidor de
aplicação
Tem muita mágica por
baixo disso tudo!
quarta-feira, 9 de maio de 2012
43. Domain Class
<<BD Simplificado>>
Table Album
class Album {
String title id title artist release_date
String artist
Date releaseDate
static hasMany = [songs: Song]
}
Table Song
class Song { id title duration album_id
String title
Double duration
}
quarta-feira, 9 de maio de 2012
44. Vamos criar uma
simples aplicação!
quarta-feira, 9 de maio de 2012
45. CRUD
Criar
Recuperar
Atualizar (Update)
Remover (Delete)
quarta-feira, 9 de maio de 2012
46. Constraints
class Usuario {
String username
String passwd
String nomeCompleto
String identidade
static constraints = {
username(size:6..15, matches:"[a-zA-Z0-9]+", unique:true, blank:false, nullable:false)
passwd(size:6..100, matches:"[a-zA-Z0-9]+", blank:false, nullable:false, password:true)
nomeCompleto(size:1..50, blank:false, nullable:false)
identidade(size:1..20, blank:false, nullable:false, matches:"[0-9]+")
}
}
Ler documentação para ver todas as restrições!
quarta-feira, 9 de maio de 2012
47. Consultas ao BD
Table Album
class Album {
String title id title artist release_date
String artist
Date releaseDate
static hasMany = [songs: Song]
}
Table Song
class Song { id title duration album_id
String title
Double duration
}
Métodos default:
•Album.count()
•Album.get(1)
•Song.list()
•song.save()
•song.delete()
•...
quarta-feira, 9 de maio de 2012
48. Consultas ao BD
Table Album
class Album {
String title id title artist release_date
String artist
Date releaseDate
static hasMany = [songs: Song]
}
Table Song
class Song { id title duration album_id
String title
Double duration
}
Buscas dinâmicas:
•Song.findByTitle ("Parachutes")
•Album.findByArtist ("Jotta A")
•Song.findByDuration(3.24)
quarta-feira, 9 de maio de 2012
49. “Grails não é somente um
framework, mas uma
plataforma” (Graeme Rocher)
Plugins permitem compor aplicações de
forma rápida, sem muita configuração!
quarta-feira, 9 de maio de 2012
50. Mais de 750 plug-ins
(Sem contar as APIs de Java)
• Testes: Functional-test, Fitness, Code coverage, etc.
• Interfaces Robustas: Flex, GWT, RichUI, etc.
• Segurança: Spring Security, Apache Shiro, OpenID, etc.
• Integração: JasperReports, JMS, Google App Engine,
Facebook,Twitter, etc.
quarta-feira, 9 de maio de 2012
51. Material de Apoio
http://grails.org/doc/2.0.3/
http://grails.org/Tutorials
http://grails.org/screencasts
quarta-feira, 9 de maio de 2012