O documento discute Grails, uma framework web para desenvolvimento em Java que facilita a construção de aplicações web com recursos como Spring, Hibernate, JSF e outros de forma mais produtiva e divertida em comparação a usar essas tecnologias individualmente.
11. import java.util.List;
import java.util.ArrayList; Seletor.java
class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList();
for (int i = 0; i < palavras.size(); i++) {
String pal = (String) palavras.get(i);
if (pal.length() <= tamanho) {
resultado.add(pal);
}
}
return resultado;
}
public static void main(String[] args) {
List linguagens = new ArrayList();
linguagens.add("Java");
linguagens.add("Scala");
linguagens.add("Groovy");
linguagens.add("Ruby");
Seletor seletor = new Seletor();
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5);
System.out.println("Total "+selecionadas.size())
for (int i = 0; i < selecionadas.size(); i++) {
String sel = (String) selecionadas.get(i);
System.out.println(sel);
}
}
11 @lucastex
12. import java.util.List;
import java.util.ArrayList;
class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList();
for (int i = 0; i < palavras.size(); i++) {
String pal = (String) palavras.get(i);
if (pal.length() <= tamanho) {
resultado.add(pal);
}
}
return resultado;
}
public static void main(String[] args) {
List linguagens = new ArrayList();
linguagens.add("Java");
linguagens.add("Scala");
linguagens.add("Groovy");
linguagens.add("Ruby");
Seletor seletor = new Seletor();
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5);
System.out.println("Total "+selecionadas.size())
for (int i = 0; i < selecionadas.size(); i++) {
String sel = (String) selecionadas.get(i);
System.out.println(sel);
}
}
12 @lucastex
14. import java.util.List;
import java.util.ArrayList;
class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList();
for (int i = 0; i < palavras.size(); i++) {
String pal = (String) palavras.get(i);
if (pal.length() <= tamanho) {
resultado.add(pal);
}
}
return resultado;
}
public static void main(String[] args) {
List linguagens = new ArrayList();
linguagens.add("Java");
linguagens.add("Scala");
linguagens.add("Groovy");
linguagens.add("Ruby");
Seletor seletor = new Seletor();
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5);
System.out.println("Total "+selecionadas.size())
for (int i = 0; i < selecionadas.size(); i++) {
String sel = (String) selecionadas.get(i);
System.out.println(sel);
}
}
14 @lucastex
15. class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList()
palavras.each { String pal ->
if (pal.length() <= tamanho) {
resultado.add(pal)
}
}
return resultado
}
public static void main(String[] args) {
List linguagens = new ArrayList()
linguagens.add("Java")
linguagens.add("Scala")
linguagens.add("Groovy")
linguagens.add("Ruby")
Seletor seletor = new Seletor()
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5)
System.out.println("Total "+selecionadas.size())
selecionadas.each { String sel ->
System.out.println(sel)
}
}
}
15 @lucastex
16. class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList()
palavras.each { String pal ->
if (pal.length() <= tamanho) {
resultado.add(pal)
}
}
return resultado
}
public static void main(String[] args) {
List linguagens = new ArrayList()
linguagens.add("Java")
linguagens.add("Scala")
linguagens.add("Groovy")
linguagens.add("Ruby")
Seletor seletor = new Seletor()
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5)
System.out.println("Total "+selecionadas.size())
selecionadas.each { String sel ->
System.out.println(sel)
}
}
}
16 @lucastex
17. def selecionaMenoresQue(palavras, tamanho) {
def resultado = new ArrayList()
palavras.each { pal ->
if (pal.size() <= tamanho) {
resultado.add(pal)
}
}
return resultado
}
def linguagens = new ArrayList()
linguagens.add("Java")
linguagens.add("Scala")
linguagens.add("Groovy")
linguagens.add("Ruby")
def selecionadas = selecionaMenoresQue(linguagens, 5)
System.out.println("Total "+selecionadas.size())
selecionadas.each { sel ->
System.out.println(sel)
}
17 @lucastex
18. def selecionaMenoresQue(palavras, tamanho) {
def resultado = new ArrayList()
palavras.each { pal ->
if (pal.size() <= tamanho) {
resultado.add(pal)
}
}
return resultado
}
def linguagens = new ArrayList()
linguagens.add("Java")
linguagens.add("Scala")
linguagens.add("Groovy")
linguagens.add("Ruby")
def selecionadas = selecionaMenoresQue(linguagens, 5)
System.out.println("Total "+selecionadas.size())
selecionadas.each { sel ->
System.out.println(sel)
}
18 @lucastex
26. import java.util.List;
import java.util.ArrayList; Seletor.java
class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList();
for (int i = 0; i < palavras.size(); i++) {
String pal = (String) palavras.get(i);
if (pal.length() <= tamanho) {
resultado.add(pal);
}
}
return resultado;
}
public static void main(String[] args) {
List linguagens = new ArrayList();
linguagens.add("Java");
linguagens.add("Scala");
linguagens.add("Groovy");
linguagens.add("Ruby");
Seletor seletor = new Seletor();
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5);
System.out.println("Total "+selecionadas.size())
for (int i = 0; i < selecionadas.size(); i++) {
String sel = (String) selecionadas.get(i);
System.out.println(sel);
}
}
26 @lucastex
28. import java.util.List;
import java.util.ArrayList; Seletor.java
class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList();
for (int i = 0; i < palavras.size(); i++) {
String pal = (String) palavras.get(i);
if (pal.length() <= tamanho) {
resultado.add(pal);
}
}
return resultado;
}
public static void main(String[] args) {
List linguagens = new ArrayList();
linguagens.add("Java");
linguagens.add("Scala");
linguagens.add("Groovy");
linguagens.add("Ruby");
Seletor seletor = new Seletor();
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5);
System.out.println("Total "+selecionadas.size())
for (int i = 0; i < selecionadas.size(); i++) {
String sel = (String) selecionadas.get(i);
System.out.println(sel);
}
}
28 @lucastex
29. import java.util.List;
import java.util.ArrayList; Seletor.groovy
class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList();
for (int i = 0; i < palavras.size(); i++) {
String pal = (String) palavras.get(i);
if (pal.length() <= tamanho) {
resultado.add(pal);
}
}
return resultado;
}
public static void main(String[] args) {
List linguagens = new ArrayList();
linguagens.add("Java");
linguagens.add("Scala");
linguagens.add("Groovy");
linguagens.add("Ruby");
Seletor seletor = new Seletor();
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5);
System.out.println("Total "+selecionadas.size())
for (int i = 0; i < selecionadas.size(); i++) {
String sel = (String) selecionadas.get(i);
System.out.println(sel);
}
}
29 @lucastex
31. import java.util.List;
import java.util.ArrayList; Seletor.java
class Seletor {
private List selecionaMenoresQue(List palavras, int tamanho) {
List resultado = new ArrayList();
for (int i = 0; i < palavras.size(); i++) {
String pal = (String) palavras.get(i);
if (pal.length() <= tamanho) {
resultado.add(pal);
}
}
return resultado;
}
public static void main(String[] args) {
List linguagens = new ArrayList();
linguagens.add("Java");
linguagens.add("Scala");
linguagens.add("Groovy");
linguagens.add("Ruby");
Seletor seletor = new Seletor();
List selecionadas = seletor.selecionaMenoresQue(linguagens, 5);
System.out.println("Total "+selecionadas.size())
for (int i = 0; i < selecionadas.size(); i++) {
String sel = (String) selecionadas.get(i);
System.out.println(sel);
}
}
31 @lucastex
57. gerenciamento de dependências
banco de dados
mapeamento de urls
controladores
dominios (tabelas)
bundles de internacionalização
servicos reutilizáveis
taglibs
classes utilitarias
telas e páginas
jars de bibliotecas
scripts de automatização
outros fontes dependentes
testes
pasta de arquivos web
@lucastex
58. - Desenvolvimento rápido
- Full stack
- Fácil bootstrap
- Convenções - CoC
- Scaffolding
- Plugins
58 @lucastex
91. Grails
Java produtivo e divertido
Lucas Teixeira
lucastex.com.br
lucastex.com
@lucastex
@lucastex
Notes de l'éditeur
- Apresenta&#xE7;&#xE3;o pessoal
- Apresenta&#xE7;&#xE3;o profissional - desde fim 07, grails 0.3 - hoje grails 1.3.1
- groovy, grails, gaelyk, gradle, gant, gmaven
agenda da palestra
primeiro ponto, linguagem de script em cima da JVM.
LINGUAGEM DE PROGRAMACAO, ou seja -> perguntar quantos programadores tem, e para eles perguntar proximo slide
O que te deixa motivado a programar?
O que te incentiva a programar?
O que te d&#xE1; vontade de programar mais, quando voc&#xEA; acaba de programar?
Exemplos de Servlet -> Struts1 e Struts1 -> Webwork.
pensar no problema que voc&#xEA; tem que resolver e n&#xE3;o em como usar uma ferramenta para resolver o problema. PROGRAMAR = PENSAR + CODIFICAR.
se voce nao pensa, o que voc&#xEA; &#xE9;?
MACACO DE CODIGO! Falar do &#x201C;Teorema do macaco infinito&#x201D;
&#xE9; isso que eu quero, pensar.
e &#xE9; isso que groovy nos deixa fazer, codificar menos pra poder pensar mais
Exemplo disso:
SCRIPT -> deixar claro, SCRIPT, executar in line
proposito do programa: um metodo que filtra palavras menores (ou igual) a X letras
explicar por cima o c&#xF3;digo, e mostrar que &#xE9; uma classe java
destaque = valor do c&#xF3;digo, l&#xF3;gica (o que tivemos que pensar)
branco = linguagem, estrutura, &#x2018;perda de tempo&#x2019;
groovy vem tentar balancear esta equa&#xE7;&#xE3;o, tirando o m&#xE1;ximo destes 80.
vou agora mostrar as facilidades e os &#x201C;atalhos&#x201D; que groovy traz pra que a gente consiga balancear a equaceao
Marrom - Classes frequentemente utilizadas, importar por default. (quantas classes no seu projeto importam java.util.*)
Verde - Itera&#xE7;&#xE3;o de listas, no java 5 j&#xE1; tem foreach, mas acredite, d&#xE1; pra fazer melhor.
Vermelho - Ponto e v&#xED;rgula - &#x201C;PRA QU&#xCA;?&#x201D;
resultado
Rosa - Consist&#xEA;ncia. M&#xE9;todo que faz a &#x2018;mesma&#x2019; coisa, com nome diferente.
Vermelho - Eu quero um script. Por que definir classe? Pra que explicitar o c&#xF3;digo a ser executado?
Amarelho - Territ&#xF3;rio &#x2018;controverso&#x2019;, tipagem din&#xE2;mica
resultado
VERDE - return? PRA QUE? eu devolvo o que eu tenho na m&#xE3;o. se meu ultimo statement me deu um list, vai o list, se o ultimo statement me devolve um int, vai o int? Por que? Por que se eu terminei de executar o metodo, eu tenho o que eu quero. Se eu nao tenho, ainda falta alguma coisa, n&#xE9;?
AMARELO - Lista? Nada mais simples?
VERMELHO - Concatena&#xE7;&#xE3;o de strings? O que &#xE9; pior, usar o + ou o .concat?
AZUL - Imprimir, &#xE9; isso que eu quero, s&#xF3; isso, IMPRIMIR (println &#xE9; um m&#xE9;todo da classe PrintStream, que &#xE9; o out, uma referencia statica dentro da classe System), t&#xE1;, e ai?
resultado
VERDE - Parenteses. eu nao falo &#x201C;INICIO&#x201D; &#x201C;OI TUDO BEM?&#x201D; &#x201C;FIM&#x201D; quando converso.
AZUL - Facilidade pra trabalhar com listas. Afinal, quase sempre que voc&#xEA; itera uma lista, &#xE9; pra fazer alguma coisa com seu conte&#xFA;do. Filtrar, calcular, etc.
resultado
AMARELO - M&#xE9;todo pra que? Se eu tenho uma instru&#xE7;&#xE3;o apenas para executar?
resultado
Este &#xE9; o nosso Seletor.groovy. Quanto de c&#xF3;digo tem aqui? Quanto de linguagem tem?
&#x201C;esse eh o seletor.groovy&#x201D;
Amarelo = quanto precisei pensar.
branco, quanto precisei escrever pro programa entender o meu objetivo
Compara&#xE7;&#xE3;o com prox slide a quantidade de instrucoes do programa
esse eh o seletor.java. falar que groovy &#xE9; legal, mas como adotar?
que infra estrutura a gente precisa pra usar groovy? servidor? outra JVM? o que?
groovy &#xE9; apenas um jar dentro da JVM....
porque groovy &#xE9; java.
comparar os 2, dizer que um &#xE9; outro, e por isso que groovy &#xE9; java
perguntar... &#x201C;groovy &#xE9; java?&#x201D;
perguntar... &#x201C;groovy &#xE9; java?&#x201D; e dizer... &#x201C;n&#xE3;o!!&#x201D;
passar o slide
&#xE9; melhor. porque me deixa pensar no que resolver.
e o que eu tinha que resolver no programa? quanto dele &#xE9; a resolu&#xE7;&#xE3;o do meu problema, e quanto dele &#xE9; linguagem de programa&#xE7;&#xE3;o?
falar que groovy &#xE9; legal, mas como adotar?
que infra estrutura a gente precisa pra usar groovy?
trazendo a faciidade do groovy para o ambiente web
exemplo de criando aplicacao &#x2018;standard&#x2019; em java....
cenario comum nas empresas para a cria&#xE7;&#xE3;o de uma aplica&#xE7;&#xE3;o
Bem vindo ao inferno
configuracao da aplica&#xE7;&#xE3;o como um todo, pra poder come&#xE7;ar a colocar l&#xF3;gica... quanto tempo? (2 dias?)
o que acontece quando voce fala que vai demorar 2 dias? o que o seu chefe pensa? no cronograma nao tinha o tempo pra isso, certo?
esse &#xE9; um dos problemas que grails resolve,
traz o desenvolvimento &#x201C;r&#xE1;pido&#x201D;. n&#xE3;o &#xE9; &#x2018;agil&#x2019;, &#xE9; &#x2018;r&#xE1;pido&#x2019;
e &#xE9; isso que o grails nos traz.
full stack, &#xE9; a estrutura completa para o desenvolvimento
nao da pra falar de tudo, apenas de mapeamento or (GORM)
mostrar no proximo slide o resultado
nesse slide j&#xE1; iniciar falando de CoC
reflete em tabela pessoa com colunas e constraints
2 tipos de constraints - que mexe em schema e que soh via hibernate validator
ressaltar Conv. OVER Conf. e n&#xE3;o Conv. INSTEAD of Conf.
d&#xE1; poder sem tirar a liberdade de configurar do melhor jeito
alem disso, tem o controller com os metodos gerados
falar dos templates
falar que &#xE9; uma app a parte que faz merge com a sua
qq tipo de resource... classe, tela, service, javascript, conf do web.xml
gerenciamento automatico = baixar sozinho
qual &#xE9; o segredo? na minha opiniao
nao s&#xF3; framework, mas a empresa
em &#x201C;java/jvm&#x201D; falar da integracao com tudo que j&#xE1; existe, qq jar no lib e ponto
michael apoia muito a divulgacao do groovy e grails por isso que deu os coupons
brasilitfree - uma edicao de gra&#xE7;a - qualquer edi&#xE7;&#xE3;o
brasilit10 - 10% em qq compra, seja de uma edicao, varias ou assinatura