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

(Portuguese) Java EE Poliglota

May 16, 2015

Download

Technology

Phil Calçado

Apresentação realizada em 2006 no RioJavaSummit.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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...