Your SlideShare is downloading. ×
0
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Produtividade em integração de aplicações com apache camel tdc2012-são paulo-v1.3

872

Published on

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
872
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
36
Comments
1
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Produtividade em Integração deAplicações com Apache Camel Globalcode  –  Open4education
  2. Para ganhar um refcardzThe Top Twelve Integration Patterns for Apache Camel!   Envie um Twitter contendo:#TDC2012 #ApacheCamel @pangeanetQuero ganhar um refcardz! Globalcode  –  Open4education
  3. Meta “Apresentar a DSL Java do Apache Camel para tornar as integrações mais simples e produtivas para os desenvolvedores.” Globalcode  –  Open4education
  4. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  5. O que são DSL’s*? DSL’s são linguagens de programação com expressividade limitada e que foram desenhadas para tratar problemas de um domínio específico. Linguagem Domínio EspecíficoCSS Definição de estilo e layout de páginas webSQL Consultas em bases de dados relacionaisXUL Definição de interfaces com o usuárioExpressão Regular Casamento de padrões em stringsAnt Automatização de build’sJPA Criteria Consultas de entidades OO * Domain Specific Languages. Globalcode  –  Open4education
  6. A DSL do Apache Camel Domínio: ! Integração de aplicações utilizando padrões do livro Enterprise Integration Patterns. “Apache Camel é um framework open-source flexível baseado em EIPs.” Camel implements EIPs Globalcode  –  Open4education
  7. Benefícios de uma boa DSL “Produtividade” 1.  O código fica mais fácil de compreender; 2.  O programa fica mais simples de modificar; 3.  Melhora a produtividade do desenvolvedor; 4.  É facilmente entendida por especialistas do domínio. Globalcode  –  Open4education
  8. Por que usar o Camel? “Não reinventar a roda” ! Ele faz o trabalho pesado enquanto você foca no problema de negócio. Globalcode  –  Open4education
  9. Números de um caso real !   Implementação do padrão Aggregator !   Sem usar o Apache Camel !  ~2711 LOC, ~25 Classes !   Usando o Apache Camel e sua DSL Java ~30x !  ~75 LOC, ~5 Classes Globalcode  –  Open4education
  10. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  11. Roteamentocom a DSL Java <<Endpoint A>> <<Filter>> <<Endpoint B>> <<Processor>> from(A).filter(isValid).to(B); Globalcode  –  Open4education
  12. Endpoint URI"schema:contextpath?option=value" "file:c:dir?delay=5000" "jms:aQueue?competingConsumers=10" Globalcode  –  Open4education
  13. JMS com a DSL Java <<Channel>> <<Filter>> <<Endpoint A>> <<Endpoint B>>from(”file:c:dir”).to(”jms:aQueue”);from(”jms:aQueue”).filter(isValid).to(B); Globalcode  –  Open4education
  14. Arquitetura do Camela 10 mil pésEngine de Camel ContextRoteamento Route 1 ProcessadoresA DSL ligaendpoints e Route 2 É onde oprocessadores processamento dapara criar Route 3 lógica derotas. integração acontece. ... ... A DSL é usada para implementar File JMS ... FTP os padrões de integração. Componentes A DSL fornecem uma interface uniforme para criação de endpoints. Globalcode  –  Open4education
  15. Arquitetura modulare plugável !   Mais de 50 EIPs implementados http://camel.apache.org/enterprise_integration_patterns.html !   Mais de 80 Components disponíveis (activemq, jms, bean, cxf, file, ftp, jdbc, ibatis, jetty, mina, netty, timer, xslt, rss, atom, twitter, etc...) http://camel.apache.org/components.html !   Diversos formatos de dados (csv, serialization, zip, hl7, soap, jaxb, etc...) http://camel.apache.org/data-format.html !   Diversas linguagens suportadas (EL, Simple, XQuery, Xpath, JavaScript, Ruby, Python, PHP, etc...) http://camel.apache.org/languages.html Globalcode  –  Open4education
  16. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  17. Contexto da Aplicação Logística de EntregaSite E-Commerce Camel E-Commerce Controle de Estoque Globalcode  –  Open4education
  18. Requisitos de Integração!   Buscar pedidos em arquivos XML do site em um servidor FTP; Endpoint FTP!   Trabalhar com modelo POJO; Translator!   Processar os tipos de itens por processadores especializados; Splitter e Content Enricher!   Entregar o pedido completo; Aggregator!   Disponibilizar arquivos TXT com dados dos pedidos para entrega; Endpoint File!   Gravar dados dos pedidos em banco de dados para controle de estoque. Endpoint JPA Globalcode  –  Open4education
  19. <<Message>> <<Message>> Pedido XML Pedido POJOSite E-Commerce <<Endpoint>> Pedido FTP <<Translator>> Pedido XML para POJO <<Channel>> Pedidos Desenho da Solução com EIP’s <<Content Enricher>> Produtos Artesanais <<Channel>> <<Splitter>> <<Channel>> <<Content Based Router>> Itens Pedido em Itens Itens Tipo do Item Processados <<Content Enricher>> Produtos Industrializados <<Channel>> <<Translator>> Logística de Pedidos para <<Endpoint>> Pedido POJO para Entrega Entrega Arquivo TXT TXT com Freemarker <<Aggregator>> <<Recipient List>> Itens de Pedidos Pedido Pronto Multicast <<Channel>> <<Endpoint>> Controle de Pedidos para Banco de Dados Estoque Baixa no Estoque Endpoint Globalcode  –  Open4education
  20. <<Message>> <<Message>> Pedido XML Pedido POJOSite E-Commerce <<Endpoint>> Pedido FTP <<Translator>> Pedido XML para POJO <<Channel>> Pedidos Desenho da Solução com EIP’s <<Content Enricher>> Produtos Artesanais <<Channel>> <<Splitter>> <<Channel>> <<Content Based Router>> Itens Pedido em Itens Itens Tipo do Item Processados <<Content Enricher>> Produtos Industrializados <<Channel>> <<Translator>> Logística de Pedidos para <<Endpoint>> Pedido POJO para Entrega Entrega Arquivo TXT TXT com Freemarker <<Aggregator>> <<Recipient List>> Itens de Pedidos Pedido Pronto Multicast <<Channel>> <<Endpoint>> Controle de Pedidos para Banco de Dados Estoque Baixa no Estoque Endpoint Globalcode  –  Open4education
  21. ROTA 1: Endpoint FTP +Translator <<Message>> <<Message>> Pedido XML Pedido POJO <<Endpoint>> <<Translator>> <<Channel>> Site E-Commerce Pedido FTP Pedido XML Pedidos para POJOpublic class BuscaPedidoXmlFtpRouteBuilder extends RouteBuilder { @Override public void configure() { from("ftp:localhost:2121/pedidos? username=xxxxxxx&password=xxxxxxxxxx") .convertBodyTo(Pedido.class) .to("jms:pedidos"); }} Globalcode  –  Open4education
  22. Arquivo XML de Pedido <pedido cliente="11111111111"> <itens> <item> <nome>Camisa customizada</nome> <quantidade>1</quantidade> <tipo>ARTESANAL</tipo> </item> <item> <nome>Camisa branca</nome> <quantidade>3</quantidade> <tipo>INDUSTRIALIZADO</tipo> </item> </itens> </pedido> Globalcode  –  Open4education
  23. Pedido com anotaçõesJAXB e JPA @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @Entity public class Pedido implements Serializable { @XmlAttribute private String cliente; @XmlElementWrapper @XmlElement(name="item") @OneToMany(cascade = CascadeType.ALL) private List<Item> itens; … } Globalcode  –  Open4education
  24. ROTA 2: Splitter <<Channel>> <<Splitter>> <<Channel>> Pedidos Pedido em Itens Itensfrom("jms:pedidos").split().method(PedidoSplitter.class) .setHeader("PEDIDO_CORRELATION_ID", property("CamelCorrelationId")) .setHeader("PEDIDO_SIZE", property("CamelSplitSize")).to("jms:itens"); Globalcode  –  Open4education
  25. ROTA 3: Content BasedRouter <<Content Enricher>> Produtos Artesanais <<Channel>> <<Channel>> <<Content Based Router>> Itens Itens Tipo do Item Processados <<Content Enricher>> Produtosfrom("jms:itens") Industrializados .choice() .when(simple("${body.itens[0].tipo} == ARTESANAL")) .bean(ProcessadorArtesanal.class) .when(simple("${body.itens[0].tipo} == INDUSTRIALIZADO")) .bean(ProcessadorIndustrializado.class) .end().to("jms:itensProcessados"); Globalcode  –  Open4education
  26. Um Processador dePedidos public class ProcessadorArtesanal { public Pedido preparar(Pedido pedido) { Item item = pedido.getItens().get(0); item.preparar(); // simulando tempo de processamento Thread.sleep(1000); return pedido; } Globalcode  –  Open4education
  27. ROTA 4: Aggregator +“Multicast” <<Channel>> Pedidos para Entrega <<Channel>> <<Aggregator>> <<Recipient List>> Itens Itens de Pedidos Pedido Pronto Processados Multicast <<Channel>> Pedidos para Baixa no Estoquefrom("jms:itensProcessados") .aggregate(header("PEDIDO_CORRELATION_ID"), new PedidoAggregationStrategy()) .completionSize(header("PEDIDO_SIZE")) .multicast().parallelProcessing().to("jms:pedidosProntosEntrega", "jms:pedidosProntosBaixaEstoque"); Globalcode  –  Open4education
  28. ROTA 5: EndpointsFreemarker e File <<Channel>> <<Translator>> Logística de Pedidos para <<Endpoint>> Pedido POJO para Entrega Entrega Arquivo TXT TXT com Freemarkerfrom("jms:pedidosProntosEntrega").to("freemarker:ecommerce/pedido_ecommerce.ftl").to("file:ecommerce/entregas/? fileName=entrega- $simple{date:now:yyyyMMddHHmmssSSS}.txt"); Globalcode  –  Open4education
  29. ROTA 6: Endpoint JPA <<Channel>> <<Endpoint>> Controle de Pedidos para Banco de Dados Estoque Baixa no Estoque Endpoint from("jms:pedidosProntosBaixaEstoque") .to("jpa:tdc2012.camel.ecommerce.domain.Pedido"); Globalcode  –  Open4education
  30. Demo!   - Execução da aplicação;!   - Subindo o contexto do Apache Camel;!   - Escalabilidade com o Competing Consumers. Globalcode  –  Open4education
  31. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  32. ConclusãoA DSL Java do Apache Camel confere:! Vocabulário comum baseado em EIPs;! Produtividade para o desenvolvedorEm projetos de integração não reinvente a roda.Considere utilizar o Apache Camel! Globalcode  –  Open4education
  33. Perguntas & Respostas Globalcode  –  Open4education
  34. Agradecimentos Globalcode  –  Open4education
  35. Contatos para consultoriae treinamento Adriano Tavares adriano.tavares@arkhi.com.br @adrianotavares adrianotavares.com linkedin.com/in/adrianotavares Alessandro Kieras alessandro.kieras@arkhi.com.br @kierasbr kieras.com.br linkedin.com/in/kieras Globalcode  –  Open4education

×