47
www.fragmental.com.br Java Poliglota Idéias Para Aplicações Multilíngue Phillip Calçado http://www.fragmental.com.br

(Portuguese) Java EE Poliglota

Embed Size (px)

DESCRIPTION

Apresentação realizada em 2006 no RioJavaSummit.

Citation preview

Page 1: (Portuguese) Java EE Poliglota

www.fragmental.com.br

Java PoliglotaIdéias Para Aplicações Multilíngue

Phillip Calçadohttp://www.fragmental.com.br

Page 2: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 2

• Mostrar idéias para utilizar linguagens alternativas na sua aplicação

Objetivo

Page 3: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 3

• Quem é Você?• Novas Linguagens da Plataforma Java• Por que Utilizar?• Como Utilizar?• Nosso Estudo de Caso• Uso Sugerido: Configuração• Uso Sugerido: Regras de Negócio• Uso Sugerido: Shells• Uso Sugerido: Scripting• Domain Specific Languages• Conclusão• Bibliografia, Links e Referências

Agenda

Page 4: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 4

• Phillip Calçado, a.k.a. Shoes• Arquiteto de Sistemas / Consultor• Programador desde 1996• Com Java desde 2003 • JUG Leader do RioJUG• Coordenador do GUJ• Escritor ocasional • Aplicações para análise de risco, redes GSM, gestão de

conteúdo, setor financeiro, biologia, logística... a grande maioria utilizando Java EE

Quem é Você?

Page 5: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 5

Novas Linguagens da Plataforma Java

Page 6: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 6

Novas Linguagens

• A comunidade Java já produziu centenas de linguagens para a JVM, de BASIC até LISP

• Grandes empresas (Bea, IBM...) já utilizam há um bom tempo

• Java não era uma plataforma muito amigável para outras linguagens

• Lançada a JSR 223: Scripting for the JavaTM Platform• Integrada ao Java 6 “Mustang” com implementação de

JavaScript• As linguagens Groovy e BeanShell estão sendo

padronizadas pelo JCP• Próximas JVM trarão bytecodes não utilizados em Java• Você usa todo dia sem perceber

Page 7: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 7

Por Que Utilizar?

?

Page 8: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 8

Por Que Utilizar?

• Java não é Panacéia• Linguagens especializadas facilitam desenvolvimento• Linguagens interpretadas integráveis ao programa• Curva de aprendizado reduzida• Aproveitar conhecimentos de outras plataformas• Portar código legado• Reutilizar bibliotecas e frameworks Java• Utilizar a infra-estrutura da JVM• Aplicativos simples produzidos rapidamente

Page 9: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 9

Como Utilizar?

?

Page 10: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 10

Como Utilizar?

• Linguagens geram bytecodes compatíveis ou são interpretadas

• Geralmente todo o necessário está em um JAR• Invocam código Java e vice-versa• Podem compilar código durante a execução do

programa

Page 11: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 11

Nosso Estudo de Caso:

Page 12: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 12

Groovy

• Padronizada pela JSR 241• Dinâmica, muito parecida com Ruby e Python• Sintaxe facilitada para listas e mapas• Sintaxe facilitada para JavaBeans• Sobrecarga de operador• Autoboxing• Expressões Regulares como PERL• Diversos Frameworks e bibliotecas próprias• A partir de Java SE 1.4

Page 13: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 13

class Usuario{ @Property nome;

List grupos=new ArrayList();

def adicionar(grupo){grupos.add grupo

}

def isAdministrador(){achei=false;grupos.each{

grupo -> if(grupo=="Administrador")

achei=true;}return achei;

}}

usuario = new Usuario()usuario.nome="Phillip"usuario.adicionar "Administrador"

println usuario.nomeprintln usuario.isAdministrador()

Page 14: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 14

import java.util.List;

import java.util.ArrayList;

import java.util.Iterator;

class Usuario{

private String nome;

private List grupos= new ArrayList();

public void setNome(String nome){

this.nome=nome;

}

public String getNome(){

return nome;

}

public void adicionar(String grupo){

grupos.add(grupo);

}

public boolean isAdministrador(){

boolean achei=false;

for(Iterator it = grupos.iterator();it.hasNext();){

if(it.next().equals("Administrador")){

achei=true;

}

return achei;

}

public static void main(String[] args){

Usuario usuario = new Usuario();

usuario.setNome("Phillip");

usuario.adicionar("Administrador");

System.out.println(usuario.getNome());

System.out.println(usuario.isAdministrador());

}

}

Page 15: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 15

Uso Sugerido: Configuração

<!-- Subscription form bean --><form-bean   name="subscriptionForm"  type="org.apache.struts.example.SubscriptionForm"/>

<!-- Edit mail subscription --><action path="/editSubscription"  type="org.apache.struts.example.EditSubscriptionAction"  name="subscriptionForm"  scope="request"  validate="false" >  <forward name="failure" path="/mainMenu.jsp"/>  <forward name="success" path="/subscription.jsp"/></action>

<!-- Registration form bean --><form-bean name="registrationForm"type="org.apache.struts.example.RegistrationForm"/>

<!-- Edit user registration --><action path="/editRegistration"type="org.apache.struts.example.EditRegistrationAction"name="registrationForm"scope="request"validate="false"input="/registration.jsp"><forward name="success" path="/registration.jsp"/></action>

<!-- Global Forward Definitions --><global-forwards> <forward    name="logon"    path="/logon.jsp" /> <forward    name="success"    path="/mainMenu.jsp" /></global-forwards>

Page 16: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 16

Configuração

• Substituindo XML• Linguagem imperativa • Recursos de loops, condicionais, leitura de teclado e

arquivos, alertas, log, funções, objetos...• Pode ser modificado em runtime• Pode ser debugado• Suportado pelo Struts Action, NanoContainer,

Mentawai...

Page 17: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 17

<grupo nome="Funcionarios" nivel="1"> <pessoa login="pcalcado" nome="Phillip Calçado" email="[email protected]"> <parentes> <pessoa login=“ottilia" /> </ parentes > </pessoa>

<pessoa login="ottilia" nome="Ottilia Calçado" email="[email protected]"> <parentes> <pessoa login="pcalcado" /> </ parentes > </pessoa>

< pessoas-autorizadas > <pessoa login=“pcalcado” /> <pessoa login=“ottilia” /> </pessoas-autorizadas>

<!– Um grupo contêm outros grupos <grupo nome=“Diretoria" nivel=“999"> <pessoa login=“tmota" nome=“Tatiana Mota" email=“[email protected]"> <pessoas-autorizadas><pessoa login=“tmota” /></pessoas-autorizadas> </grupo>

</grupo>

Page 18: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 18

phillip = new Pessoa()

phillip.nome= "Phillip Calçado"

phillip.email= "pcalcado.gmail.com"

ottilia = new Pessoa()

ottilia.nome= "Ottília Calçado"

ottilia.email= "[email protected]"

ottilia.adicionarParente phillip

tmota = new Pessoa()

tmota.nome= "Tatiana Mota"

tmota.email= "[email protected]"

funcionarios = new Grupo()

funcionarios.nivel = 1

diretoria = new Grupo()

diretoria.nivel = 999

funcionarios.adicionarGrupo diretoria

funcionarios.adicionarPessoa ottilia

funcionarios.adicionarPessoa phillip

diretoria.adicionarPessoa tmota

funcionarios.each {f -> f.autorizar}

diretoria.each {f -> f.autorizar}

Page 19: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 19

Uso Sugerido: Regras de Negócio

Page 20: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 20

Page 21: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 21

Regras de Negócio

• Dinamismo traz flexibilidade• Pode-se carregar Regras de Negócio novas• Mudanças temporárias facilmente implementáveis• Foco no Negócio, não em infra-estrutura• Não é o fim das gambiarras, mas sintaxe ajuda a

simplificar• Aliável com AOP para transparência

Page 22: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 22

public class VendeProduto{public void efetuarVenda(Produto produto, Cliente cliente){

cliente.adicionarProduto(p);}

}

Page 23: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 23

Este mês, comprando 1 você ganha um grátis

public class VendeProduto{public void efetuarVenda(Produto produto, Cliente cliente){

cliente.adicionarProduto(p);

//Introduzido para promoção, ***REMOVER EM Junho/2006***cliente.adicionarBrinde(p);

}}

Page 24: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 24

Se o cliente utilizar o Cartão Tabajara, 10% de

descontopublic class VendeProduto{

public void efetuarVenda(Produto produto, Cliente cliente){cliente.adicionarProduto(p);

//Introduzido para promoção, ***REMOVER EM Junho/2006***cliente.adicionarBrinde(p.clone());

//***REMOVER DIA 21/04/2006***//Por 15 dias se o cliente utilizar Tabajara Card //reduza do total 10% do valor da compra. Malditas gambiarras.if(cliente.getCartaoCredito().getBandeira()equals(“Tabajara”)

cliente.setTotal((cliente.getTotal()-cliente.getTotal())/10);

}}

Page 25: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 25

Não estamos aceitando Capivara Card

public class VendeProduto{public void efetuarVenda(Produto produto, Cliente cliente){

//Não aceitamos Capivara até eles pagarem a dívida.if(cliente.getCartaoCredito().getBandeira().equals(“CAPIVARA”))

throw new CaloteiroException();

cliente.adicionarProduto(p);

//Introduzido para promoção, ***REMOVER EM Junho/2006***cliente.adicionarBrinde(p.clone());

//***REMOVER DIA 21/04/2006***//Por 15 dias se o cliente utilizar Tabajara Card //reduza do total 10% do valor da compra. Malditas gambiarras.if(cliente.getCartaoCredito().getBandeira().equals(“Tabajara”))

cliente.setTotal((cliente.getTotal()-cliente.getTotal())/10);

}}

Page 26: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 26

public class VendeProduto {public void efetuarVenda(Produto produto, Cliente cliente){

preVenda(Produto produto, Cliente cliente);

cliente.adicionarProduto(p);

posVenda(Produto produto, Cliente cliente);

}}

Page 27: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 27

def preVenda(produto, cliente){if(cliente.cartaoCredito.bandeira== “CAPIVARA”)

throw new CaloteiroException();}

def posVenda(produto, cliente){cliente.adicionarBrinde(p.clone());

if(cliente.cartaoCredito.bandeira==“Tabajara”)cliente.total = (cliente.total - cliente.total)/10);

}

Page 28: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 28

Uso Sugerido: Shell

Page 29: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 29

Page 30: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 30

Shell

• Acesso direto aos objetos de negócio• Nada de atualizações via SQL• Interface perfeita para administradores avançados e

suporte• Ótimo para testar objetos dentro de um container

Page 31: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 31

--Remove as compras canceladasDELETE FROM COMPRAS WHERE COD_CLIENTE=0223

--Retorna produtos para o estoqueUPDATE ESTOQUE SET QTDADE = 10 WHERE COD_PRODUTO=102UPDATE ESTOQUE SET QTDADE = 6 WHERE COD_PRODUTO=1342UPDATE ESTOQUE SET QTDADE = 977 WHERE COD_PRODUTO=98

-- Atualiza o gasto anual do clienteUPDATE CLIENTES SET TOTAL_GASTO_ANUAL = 0

Page 32: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 32

Login: adminSenha: ******--- Bem vindo ao Shell do VENDAS WEBvendasweb> cliente = gerenciadorClientes.buscarPeloCodigo(223)vendasweb> cliente.compras.each{ compra -> cliente.cancelar(compra) }

Page 33: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 33

Uso Sugerido: Scripting

Page 34: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 34

Scripting

• Todo poder de um Shell• Um programa dentro do programa• Automatiza tarefas repetitivas• Melhor que dizer aos usuários o que fazer• Ótimo para testes funcionais• Agendável

Page 35: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 35

From: [email protected]: [email protected]: INSTRUÇÕES PARA REMOVER VENDAS INDEVIDAS

Caro cliente, para efetuar o procedimento, siga os passos:

1 – Entre no sistema como administrador2 – Vá no menu “Vendas”3 – Clique no botão “Vendas Diárias”4 – Clique no menu Arquivo->Exportar como CSV e salve o arquivo5 – Abra o arquivo gerado no Bloco de Notas do Windows, localize as linhas com data igual a data que deseja excluir as vendas6 – Anote o número do código (quarta coluna das separadas por vírgula) de todas as vendas que deseja excluir7 – No sistema, clique em “Entrar número de vendas estornadas”8 – Entre com o número de código das vendas e pressione Ok, confirme quando solicitado9 – Vá no menu Operações->Estornos10 – Selecione as vendas que deseja alterar ATENÇAO: tenha certeza de selecionar apenas as que deseja alterar11 – CLique no botão “cancelar estorno”12 – Anote o número retornado para cada venda...

Page 36: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 36

Login: adminSenha: ******--- Bem vindo ao Shell do VENDAS WEBvendasweb> carregar_script “c:\correcao_vendas_indevidas.groovy”Digite a data que deseja cancelar as vendas:> 21/02/2006Operação Efetuada com Sucesso, foram canceladas as vendas: 102, 121, 433

From: [email protected]: [email protected]: INSTRUÇÕES PARA REMOVER VENDAS INDEVIDAS

Caro cliente, para efetuar o procedimento, siga os passos:1 – Salve o arquivo que veio em anexo a este e-mail (correcao_vendas_indevidas.groovy)2 – Abra o Shell da Aplicação3 – Digite

$ carregar_script <caminho para o arquivo salvo>4 – Entre com a data que deseja cancelar as vendasAtenciosamente,Equipe Suporte

Page 37: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 37

Domain Specific Languages

Page 38: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 38

Domain Specific Languages

• Tendência forte em MDD• Relativamente compatível com MDA• Surgindo diversas ferramentas• Uma linguagem familiar ao usuário• Permite especializar desenvolvedores no domínio• Podem ser gráficas ou textuais

Page 39: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 39

Domain Specific Languages

Page 40: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 40

Conclusão

!

Page 41: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 41

Conclusão

• Não existe Tamanho Único em linguagens de programação

• Java não é a única linguagem da JVM e de Java EE faz algum tempo

• Java não é mais a única linguagem oficial da JVM• Java é a linguagem de Sistemas da plataforma Java• Outras linguagens trazem recursos novos e úteis para

Aplicações• DSLs são uma tendência forte para os próximos anos• Existe muito o que fazer com linguagens dinâmicas mas

muito precisa ser implementado para fazer uso efetivo

Page 42: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 42

• Bruce Tate & Justin Gehtland – Beyond Java• Andrew Hunt & David Thomas – The Pragmatic Programmer• Eric Evans – Domain-Driven Design• Bruce Tate & Justin Gehtland – Better, Faster, Lighter Java• Rod Johnson – J2EE Developmen Without EJB• Dave Thomas et al. – Programming Ruby• Dave Thomas et al. – Agile Web Development with Rails• Martin Fowler – Refactoring, PEAI, Analisys Patterns...

Autores Recomendados

Page 43: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 43

• http://groovy.codehaus.org/• http://www.beanshell.org/• http://www.jython.org/• http://jruby.sourceforge.net/• http://www.mozilla.org/rhino/• http://www.robert-tolksdorf.de/vmlanguages.html• http://www.martinfowler.com/articles/

languageWorkbench.html• http://developer.sun.com/learning/javaoneonline/2004/

corej2se/TS-3814.html• http://developer.sun.com/learning/javaoneonline/2004/

newcooltech/TS-1027.html• http://fragmental.com.br/wiki/index.php?

title=Groovy:_Linguagem_de_Script_para_Java

Para Saber Mais

Page 44: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 44

• http://www.metacase.com/• http://msdn.microsoft.com/vstudio/teamsystem/

workshop/sf• http://www.onboard.jetbrains.com/is1/articles/04/10/lop/

Para Saber Mais

Page 45: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 45

Continua em...

Page 46: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 46

Contato

http://www.fragmental.com.br

http://www.guj.com.br

http://www.riojug.org

[email protected]

Page 47: (Portuguese) Java EE Poliglota

www.fragmental.com.br Slide 47

Obrigado!Que Zahl os Acompanhe...