SlideShare une entreprise Scribd logo
1  sur  47
Java Poliglota Idéias Para Aplicações Multilíngue Phillip Calçado http://www.fragmental.com.br
[object Object],Objetivo
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Agenda
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Quem é Você?
Novas Linguagens da  Plataforma Java
Novas Linguagens ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Por Que Utilizar? ?
Por Que Utilizar? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Como Utilizar? ?
Como Utilizar? ,[object Object],[object Object],[object Object],[object Object]
Nosso Estudo de Caso:
Groovy ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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.nome println usuario.isAdministrador()
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()); } }
Uso Sugerido: Configuração <!-- Subscription form bean --> <form-bean    name=&quot;subscriptionForm&quot;   type=&quot;org.apache.struts.example.SubscriptionForm&quot; /> <!-- Edit mail subscription --> <action path=&quot;/editSubscription&quot;   type=&quot;org.apache.struts.example.EditSubscriptionAction&quot;   name=&quot;subscriptionForm&quot;   scope=&quot;request&quot;   validate=&quot;false&quot;  >   <forward name=&quot;failure&quot; path=&quot;/mainMenu.jsp&quot;/>   <forward name=&quot;success&quot; path=&quot;/subscription.jsp&quot;/> </action> <!-- Registration form bean --> <form-bean name=&quot;registrationForm&quot; type=&quot;org.apache.struts.example.RegistrationForm&quot;/> <!-- Edit user registration --> <action path=&quot;/editRegistration&quot; type=&quot;org.apache.struts.example.EditRegistrationAction&quot; name=&quot;registrationForm&quot; scope=&quot;request&quot; validate=&quot;false&quot; input=&quot;/registration.jsp&quot;> <forward name=&quot;success&quot; path=&quot;/registration.jsp&quot;/> </action> <!-- Global Forward Definitions --> <global-forwards>  <forward     name=&quot;logon&quot;     path=&quot;/logon.jsp&quot;  />  <forward     name=&quot;success&quot;     path=&quot;/mainMenu.jsp&quot;  /> </global-forwards>
Configuração ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
<grupo nome=&quot;Funcionarios&quot; nivel=&quot;1&quot;> <pessoa login=&quot;pcalcado&quot; nome=&quot;Phillip Calçado&quot; email=&quot;pcalcado@gmail.com&quot;> <parentes> <pessoa login=“ottilia&quot; /> </ parentes > </pessoa> <pessoa login=&quot;ottilia&quot; nome=&quot;Ottilia Calçado&quot; email=&quot;ocalcado@hotmail.com&quot;> <parentes> <pessoa login=&quot;pcalcado&quot; /> </ parentes > </pessoa> < pessoas-autorizadas > <pessoa login=“pcalcado” /> <pessoa login=“ottilia” /> </pessoas-autorizadas> <!– Um grupo contêm outros grupos   <grupo nome=“Diretoria&quot; nivel=“999&quot;> <pessoa login=“tmota&quot; nome=“Tatiana Mota&quot; email=“taty.mota@gmail.com&quot;> <pessoas-autorizadas><pessoa login=“tmota” /></pessoas-autorizadas> </grupo>  </grupo>
phillip = new Pessoa() phillip.nome= &quot;Phillip Calçado&quot; phillip.email= &quot;pcalcado.gmail.com&quot; ottilia = new Pessoa() ottilia.nome= &quot;Ottília Calçado&quot; ottilia.email= &quot;ocalcado@hotmail.com&quot; ottilia.adicionarParente phillip tmota = new Pessoa() tmota.nome= &quot;Tatiana Mota&quot; tmota.email= &quot;taty.mota@gmail.com&quot; 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}
Uso Sugerido:  Regras de Negócio
 
Regras de Negócio ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
public class VendeProduto{ public void efetuarVenda(Produto produto, Cliente cliente){ cliente.adicionarProduto(p); } }
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); } }
Se o cliente utilizar o Cartão Tabajara, 10% de desconto public 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); } }
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); } }
public class VendeProduto { public void efetuarVenda(Produto produto, Cliente cliente){ preVenda(Produto produto, Cliente cliente); cliente.adicionarProduto(p); posVenda(Produto produto, Cliente cliente); } }
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); }
Uso Sugerido: Shell
 
Shell ,[object Object],[object Object],[object Object],[object Object]
--Remove as compras canceladas DELETE FROM COMPRAS WHERE COD_CLIENTE=0223 --Retorna produtos para o estoque UPDATE ESTOQUE SET QTDADE = 10 WHERE COD_PRODUTO=102 UPDATE ESTOQUE SET QTDADE = 6 WHERE COD_PRODUTO=1342 UPDATE ESTOQUE SET QTDADE = 977 WHERE COD_PRODUTO=98 -- Atualiza o gasto anual do cliente UPDATE CLIENTES SET TOTAL_GASTO_ANUAL = 0
Login: admin Senha: ****** --- Bem vindo ao Shell do VENDAS WEB vendasweb>  cliente = gerenciadorClientes.buscarPeloCodigo(223) vendasweb>  cliente.compras.each{ compra ->  cliente.cancelar(compra) }
Uso Sugerido: Scripting
Scripting ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
From:  [email_address] To:  [email_address] Subject: INSTRUÇÕES PARA REMOVER VENDAS INDEVIDAS Caro cliente, para efetuar o procedimento, siga os passos: 1 – Entre no sistema como administrador 2 – Vá no menu “Vendas” 3 – Clique no botão “Vendas Diárias” 4 – Clique no menu Arquivo->Exportar como CSV e salve o arquivo 5 – Abra o arquivo gerado no Bloco de Notas do Windows, localize as linhas com data igual a data que deseja excluir as vendas 6 – Anote o número do código (quarta coluna das separadas por vírgula) de todas as vendas que deseja excluir 7 – 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 solicitado 9 – Vá no menu Operações->Estornos 10 – Selecione as vendas que deseja alterar ATENÇAO: tenha certeza de selecionar apenas as que deseja alterar 11 – CLique no botão “cancelar estorno” 12 – Anote o número retornado para cada venda ...
Login: admin Senha: ****** --- Bem vindo ao Shell do VENDAS WEB vendasweb>  carregar_script “c:orrecao_vendas_indevidas.groovy” Digite a data que deseja cancelar as vendas: > 21/02/2006 Operação Efetuada com Sucesso, foram canceladas as vendas: 102, 121, 433 From:  suporte@ minhaempresa .com.br To:  cliente@ outraempresa .com.br Subject: 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ção 3 – Digite  $ carregar_script <caminho para o arquivo salvo> 4 – Entre com a data que deseja cancelar as vendas Atenciosamente, Equipe Suporte
Domain Specific Languages
Domain Specific Languages ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Domain Specific Languages
Conclusão !
Conclusão ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Autores Recomendados
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Para Saber Mais
[object Object],[object Object],[object Object],Para Saber Mais
Continua em...
Contato http://www.fragmental.com.br http://www.guj.com.br http://www.riojug.org [email_address]
Obrigado! Que Zahl os Acompanhe...

Contenu connexe

Tendances

ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPLuis Gustavo Almeida
 
WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011Leonardo Balter
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaMilfont Consulting
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-CSaulo Arruda
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019Cassio Santos
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
MongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesMongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesPedro Menezes
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 
JS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaJS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaiMasters
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesDerek Willian Stavis
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScriptCarlos Santos
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 

Tendances (20)

ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
Java script - funções
Java script - funçõesJava script - funções
Java script - funções
 
WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma prática
 
Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-C
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019
 
Java script aula 10 - angularjs
Java script   aula 10 - angularjsJava script   aula 10 - angularjs
Java script aula 10 - angularjs
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
MongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesMongoDB com a Turma do Chaves
MongoDB com a Turma do Chaves
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
JS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaJS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na Prática
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 

Similaire à (Portuguese) Java EE Poliglota

Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Bruno Borges
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
JavaScript - Aula Introdutória
JavaScript - Aula IntrodutóriaJavaScript - Aula Introdutória
JavaScript - Aula Introdutórialucasleite
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
Django - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisDjango - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisMarinho Brandão
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Jaime Schettini
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa FlexEduardo Kraus
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template EngineDiego Tremper
 

Similaire à (Portuguese) Java EE Poliglota (20)

Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
JavaScript - Aula Introdutória
JavaScript - Aula IntrodutóriaJavaScript - Aula Introdutória
JavaScript - Aula Introdutória
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Django - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisDjango - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes Plugaveis
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
RYSYS Overview
RYSYS OverviewRYSYS Overview
RYSYS Overview
 
Spring Capitulo 02
Spring Capitulo 02Spring Capitulo 02
Spring Capitulo 02
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa Flex
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template Engine
 

Plus de Phil Calçado

the afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowththe afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowthPhil Calçado
 
don't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leaderdon't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leaderPhil Calçado
 
The Economics of Microservices (redux)
The Economics of Microservices (redux)The Economics of Microservices (redux)
The Economics of Microservices (redux)Phil Calçado
 
From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019Phil Calçado
 
The Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to ServerlessThe Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to ServerlessPhil Calçado
 
Ten Years of Failing Microservices
Ten Years of Failing MicroservicesTen Years of Failing Microservices
Ten Years of Failing MicroservicesPhil Calçado
 
The Next Generation of Microservices
The Next Generation of MicroservicesThe Next Generation of Microservices
The Next Generation of MicroservicesPhil Calçado
 
The Next Generation of Microservices — YOW 2017 Brisbane
The Next Generation of Microservices — YOW 2017 BrisbaneThe Next Generation of Microservices — YOW 2017 Brisbane
The Next Generation of Microservices — YOW 2017 BrisbanePhil Calçado
 
The Economics of Microservices (2017 CraftConf)
The Economics of Microservices  (2017 CraftConf)The Economics of Microservices  (2017 CraftConf)
The Economics of Microservices (2017 CraftConf)Phil Calçado
 
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...Phil Calçado
 
Finagle @ SoundCloud
Finagle @ SoundCloudFinagle @ SoundCloud
Finagle @ SoundCloudPhil Calçado
 
A Brief Talk On High-Performing Organisations
A Brief Talk On High-Performing OrganisationsA Brief Talk On High-Performing Organisations
A Brief Talk On High-Performing OrganisationsPhil Calçado
 
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015Phil Calçado
 
Rhein-Main Scala Enthusiasts — Your microservice as a Function
Rhein-Main Scala Enthusiasts — Your microservice as a FunctionRhein-Main Scala Enthusiasts — Your microservice as a Function
Rhein-Main Scala Enthusiasts — Your microservice as a FunctionPhil Calçado
 
ScalaItaly 2015 - Your Microservice as a Function
ScalaItaly 2015 - Your Microservice as a FunctionScalaItaly 2015 - Your Microservice as a Function
ScalaItaly 2015 - Your Microservice as a FunctionPhil Calçado
 
Finagle-Based Microservices at SoundCloud
Finagle-Based Microservices at SoundCloudFinagle-Based Microservices at SoundCloud
Finagle-Based Microservices at SoundCloudPhil Calçado
 
An example of Future composition in a real app
An example of Future composition in a real appAn example of Future composition in a real app
An example of Future composition in a real appPhil Calçado
 
APIs: The Problems with Eating your Own Dog Food
APIs: The Problems with Eating your Own Dog FoodAPIs: The Problems with Eating your Own Dog Food
APIs: The Problems with Eating your Own Dog FoodPhil Calçado
 
Evolutionary Architecture at Work
Evolutionary  Architecture at WorkEvolutionary  Architecture at Work
Evolutionary Architecture at WorkPhil Calçado
 
Structuring apps in Scala
Structuring apps in ScalaStructuring apps in Scala
Structuring apps in ScalaPhil Calçado
 

Plus de Phil Calçado (20)

the afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowththe afterparty: refactoring after 100x hypergrowth
the afterparty: refactoring after 100x hypergrowth
 
don't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leaderdon't try this at home: self-improvement as a senior leader
don't try this at home: self-improvement as a senior leader
 
The Economics of Microservices (redux)
The Economics of Microservices (redux)The Economics of Microservices (redux)
The Economics of Microservices (redux)
 
From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019From microservices to serverless - Chicago CTO Summit 2019
From microservices to serverless - Chicago CTO Summit 2019
 
The Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to ServerlessThe Not-So-Straightforward Road From Microservices to Serverless
The Not-So-Straightforward Road From Microservices to Serverless
 
Ten Years of Failing Microservices
Ten Years of Failing MicroservicesTen Years of Failing Microservices
Ten Years of Failing Microservices
 
The Next Generation of Microservices
The Next Generation of MicroservicesThe Next Generation of Microservices
The Next Generation of Microservices
 
The Next Generation of Microservices — YOW 2017 Brisbane
The Next Generation of Microservices — YOW 2017 BrisbaneThe Next Generation of Microservices — YOW 2017 Brisbane
The Next Generation of Microservices — YOW 2017 Brisbane
 
The Economics of Microservices (2017 CraftConf)
The Economics of Microservices  (2017 CraftConf)The Economics of Microservices  (2017 CraftConf)
The Economics of Microservices (2017 CraftConf)
 
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
Microservices vs. The First Law of Distributed Objects - GOTO Nights Chicago ...
 
Finagle @ SoundCloud
Finagle @ SoundCloudFinagle @ SoundCloud
Finagle @ SoundCloud
 
A Brief Talk On High-Performing Organisations
A Brief Talk On High-Performing OrganisationsA Brief Talk On High-Performing Organisations
A Brief Talk On High-Performing Organisations
 
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
Three Years of Microservices at SoundCloud - Distributed Matters Berlin 2015
 
Rhein-Main Scala Enthusiasts — Your microservice as a Function
Rhein-Main Scala Enthusiasts — Your microservice as a FunctionRhein-Main Scala Enthusiasts — Your microservice as a Function
Rhein-Main Scala Enthusiasts — Your microservice as a Function
 
ScalaItaly 2015 - Your Microservice as a Function
ScalaItaly 2015 - Your Microservice as a FunctionScalaItaly 2015 - Your Microservice as a Function
ScalaItaly 2015 - Your Microservice as a Function
 
Finagle-Based Microservices at SoundCloud
Finagle-Based Microservices at SoundCloudFinagle-Based Microservices at SoundCloud
Finagle-Based Microservices at SoundCloud
 
An example of Future composition in a real app
An example of Future composition in a real appAn example of Future composition in a real app
An example of Future composition in a real app
 
APIs: The Problems with Eating your Own Dog Food
APIs: The Problems with Eating your Own Dog FoodAPIs: The Problems with Eating your Own Dog Food
APIs: The Problems with Eating your Own Dog Food
 
Evolutionary Architecture at Work
Evolutionary  Architecture at WorkEvolutionary  Architecture at Work
Evolutionary Architecture at Work
 
Structuring apps in Scala
Structuring apps in ScalaStructuring apps in Scala
Structuring apps in Scala
 

(Portuguese) Java EE Poliglota

  • 1. Java Poliglota Idéias Para Aplicações Multilíngue Phillip Calçado http://www.fragmental.com.br
  • 2.
  • 3.
  • 4.
  • 5. Novas Linguagens da Plataforma Java
  • 6.
  • 8.
  • 10.
  • 12.
  • 13. class Usuario{ @Property nome; List grupos=new ArrayList(); def adicionar(grupo){ grupos.add grupo } def isAdministrador(){ achei=false; grupos.each{ grupo -> if(grupo==&quot;Administrador&quot;) achei=true; } return achei; } } usuario = new Usuario() usuario.nome=&quot;Phillip&quot; usuario.adicionar &quot;Administrador&quot; println usuario.nome println usuario.isAdministrador()
  • 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(&quot;Administrador&quot;)){ achei=true; } return achei; } public static void main(String[] args){ Usuario usuario = new Usuario(); usuario.setNome(&quot;Phillip&quot;); usuario.adicionar(&quot;Administrador&quot;); System.out.println(usuario.getNome()); System.out.println(usuario.isAdministrador()); } }
  • 15. Uso Sugerido: Configuração <!-- Subscription form bean --> <form-bean    name=&quot;subscriptionForm&quot;   type=&quot;org.apache.struts.example.SubscriptionForm&quot; /> <!-- Edit mail subscription --> <action path=&quot;/editSubscription&quot;   type=&quot;org.apache.struts.example.EditSubscriptionAction&quot;   name=&quot;subscriptionForm&quot;   scope=&quot;request&quot;   validate=&quot;false&quot;  >   <forward name=&quot;failure&quot; path=&quot;/mainMenu.jsp&quot;/>   <forward name=&quot;success&quot; path=&quot;/subscription.jsp&quot;/> </action> <!-- Registration form bean --> <form-bean name=&quot;registrationForm&quot; type=&quot;org.apache.struts.example.RegistrationForm&quot;/> <!-- Edit user registration --> <action path=&quot;/editRegistration&quot; type=&quot;org.apache.struts.example.EditRegistrationAction&quot; name=&quot;registrationForm&quot; scope=&quot;request&quot; validate=&quot;false&quot; input=&quot;/registration.jsp&quot;> <forward name=&quot;success&quot; path=&quot;/registration.jsp&quot;/> </action> <!-- Global Forward Definitions --> <global-forwards>  <forward     name=&quot;logon&quot;     path=&quot;/logon.jsp&quot;  />  <forward     name=&quot;success&quot;     path=&quot;/mainMenu.jsp&quot;  /> </global-forwards>
  • 16.
  • 17. <grupo nome=&quot;Funcionarios&quot; nivel=&quot;1&quot;> <pessoa login=&quot;pcalcado&quot; nome=&quot;Phillip Calçado&quot; email=&quot;pcalcado@gmail.com&quot;> <parentes> <pessoa login=“ottilia&quot; /> </ parentes > </pessoa> <pessoa login=&quot;ottilia&quot; nome=&quot;Ottilia Calçado&quot; email=&quot;ocalcado@hotmail.com&quot;> <parentes> <pessoa login=&quot;pcalcado&quot; /> </ parentes > </pessoa> < pessoas-autorizadas > <pessoa login=“pcalcado” /> <pessoa login=“ottilia” /> </pessoas-autorizadas> <!– Um grupo contêm outros grupos  <grupo nome=“Diretoria&quot; nivel=“999&quot;> <pessoa login=“tmota&quot; nome=“Tatiana Mota&quot; email=“taty.mota@gmail.com&quot;> <pessoas-autorizadas><pessoa login=“tmota” /></pessoas-autorizadas> </grupo> </grupo>
  • 18. phillip = new Pessoa() phillip.nome= &quot;Phillip Calçado&quot; phillip.email= &quot;pcalcado.gmail.com&quot; ottilia = new Pessoa() ottilia.nome= &quot;Ottília Calçado&quot; ottilia.email= &quot;ocalcado@hotmail.com&quot; ottilia.adicionarParente phillip tmota = new Pessoa() tmota.nome= &quot;Tatiana Mota&quot; tmota.email= &quot;taty.mota@gmail.com&quot; 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}
  • 19. Uso Sugerido: Regras de Negócio
  • 20.  
  • 21.
  • 22. public class VendeProduto{ public void efetuarVenda(Produto produto, Cliente cliente){ cliente.adicionarProduto(p); } }
  • 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); } }
  • 24. Se o cliente utilizar o Cartão Tabajara, 10% de desconto public 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); } }
  • 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); } }
  • 26. public class VendeProduto { public void efetuarVenda(Produto produto, Cliente cliente){ preVenda(Produto produto, Cliente cliente); cliente.adicionarProduto(p); posVenda(Produto produto, Cliente cliente); } }
  • 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); }
  • 29.  
  • 30.
  • 31. --Remove as compras canceladas DELETE FROM COMPRAS WHERE COD_CLIENTE=0223 --Retorna produtos para o estoque UPDATE ESTOQUE SET QTDADE = 10 WHERE COD_PRODUTO=102 UPDATE ESTOQUE SET QTDADE = 6 WHERE COD_PRODUTO=1342 UPDATE ESTOQUE SET QTDADE = 977 WHERE COD_PRODUTO=98 -- Atualiza o gasto anual do cliente UPDATE CLIENTES SET TOTAL_GASTO_ANUAL = 0
  • 32. Login: admin Senha: ****** --- Bem vindo ao Shell do VENDAS WEB vendasweb> cliente = gerenciadorClientes.buscarPeloCodigo(223) vendasweb> cliente.compras.each{ compra -> cliente.cancelar(compra) }
  • 34.
  • 35. From: [email_address] To: [email_address] Subject: INSTRUÇÕES PARA REMOVER VENDAS INDEVIDAS Caro cliente, para efetuar o procedimento, siga os passos: 1 – Entre no sistema como administrador 2 – Vá no menu “Vendas” 3 – Clique no botão “Vendas Diárias” 4 – Clique no menu Arquivo->Exportar como CSV e salve o arquivo 5 – Abra o arquivo gerado no Bloco de Notas do Windows, localize as linhas com data igual a data que deseja excluir as vendas 6 – Anote o número do código (quarta coluna das separadas por vírgula) de todas as vendas que deseja excluir 7 – 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 solicitado 9 – Vá no menu Operações->Estornos 10 – Selecione as vendas que deseja alterar ATENÇAO: tenha certeza de selecionar apenas as que deseja alterar 11 – CLique no botão “cancelar estorno” 12 – Anote o número retornado para cada venda ...
  • 36. Login: admin Senha: ****** --- Bem vindo ao Shell do VENDAS WEB vendasweb> carregar_script “c:orrecao_vendas_indevidas.groovy” Digite a data que deseja cancelar as vendas: > 21/02/2006 Operação Efetuada com Sucesso, foram canceladas as vendas: 102, 121, 433 From: suporte@ minhaempresa .com.br To: cliente@ outraempresa .com.br Subject: 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ção 3 – Digite $ carregar_script <caminho para o arquivo salvo> 4 – Entre com a data que deseja cancelar as vendas Atenciosamente, Equipe Suporte
  • 38.
  • 41.
  • 42.
  • 43.
  • 44.
  • 46. Contato http://www.fragmental.com.br http://www.guj.com.br http://www.riojug.org [email_address]
  • 47. Obrigado! Que Zahl os Acompanhe...