Produtividade em Integração deAplicações com Apache Camel                         Globalcode	  –	  Open4education
Para ganhar um refcardzThe Top Twelve Integration Patterns for Apache Camel!   Envie um Twitter contendo:#TDC2012 #ApacheC...
Meta  “Apresentar a DSL Java do Apache Camel   para tornar as integrações mais simples e     produtivas para os desenvolve...
Agenda!     Conceitos Fundamentais!     Arquitetura do Apache Camel!     Desenho & Implementação!     Demo!     Conclusão!...
O que são DSL’s*?   DSL’s são linguagens de programação com expressividade limitada e que foram desenhadas para tratar pro...
A DSL do Apache Camel  Domínio:  ! Integração de aplicações    utilizando padrões do livro    Enterprise Integration Patte...
Benefícios de uma boa DSL                 “Produtividade”  1.    O código fica mais fácil de compreender;  2.    O program...
Por que usar o Camel?        “Não reinventar a roda”   ! Ele faz o trabalho pesado enquanto você foca no     problema de n...
Números de um caso real  !   Implementação do padrão Aggregator  !   Sem usar o Apache Camel     !  ~2711 LOC, ~25 Classes...
Agenda!     Conceitos Fundamentais!     Arquitetura do Apache Camel!     Desenho & Implementação!     Demo!     Conclusão!...
Roteamentocom a DSL Java <<Endpoint A>>     <<Filter>>       <<Endpoint B>>                  <<Processor>> from(A).filter(...
Endpoint URI"schema:contextpath?option=value" "file:c:dir?delay=5000" "jms:aQueue?competingConsumers=10"                  ...
JMS com a DSL Java                  <<Channel>>   <<Filter>> <<Endpoint A>>                                 <<Endpoint B>>...
Arquitetura do Camela 10 mil pésEngine de       Camel ContextRoteamento                Route 1                            ...
Arquitetura modulare plugável  !   Mais de 50 EIPs implementados    http://camel.apache.org/enterprise_integration_pattern...
Agenda!     Conceitos Fundamentais!     Arquitetura do Apache Camel!     Desenho & Implementação!     Demo!     Conclusão!...
Contexto da Aplicação                                     Logística de                                       EntregaSite E...
Requisitos de Integração!   Buscar pedidos em arquivos XML do site em um    servidor FTP; Endpoint FTP!   Trabalhar com mo...
<<Message>>                    <<Message>>                                                Pedido XML                    Pe...
<<Message>>                    <<Message>>                                                Pedido XML                    Pe...
ROTA 1: Endpoint FTP +Translator                                            <<Message>>                    <<Message>>    ...
Arquivo XML de Pedido <pedido cliente="11111111111">     <itens>         <item>              <nome>Camisa customizada</nom...
Pedido com anotaçõesJAXB e JPA   @XmlRootElement   @XmlAccessorType(XmlAccessType.FIELD)   @Entity   public class Pedido i...
ROTA 2: Splitter          <<Channel>>    <<Splitter>>     <<Channel>>            Pedidos     Pedido em Itens      Itensfro...
ROTA 3: Content BasedRouter                                                  <<Content Enricher>>                         ...
Um Processador dePedidos    public class ProcessadorArtesanal {      public Pedido preparar(Pedido pedido) {          Item...
ROTA 4: Aggregator +“Multicast”                                                             <<Channel>>                   ...
ROTA 5: EndpointsFreemarker e File      <<Channel>>      <<Translator>>                    Logística de      Pedidos para ...
ROTA 6: Endpoint JPA        <<Channel>>        <<Endpoint>>    Controle de         Pedidos para     Banco de Dados    Esto...
Demo!   - Execução da aplicação;!   - Subindo o contexto do Apache Camel;!   - Escalabilidade com o Competing Consumers.  ...
Agenda!     Conceitos Fundamentais!     Arquitetura do Apache Camel!     Desenho & Implementação!     Demo!     Conclusão!...
ConclusãoA DSL Java do Apache Camel confere:! Vocabulário comum baseado em EIPs;! Produtividade para o desenvolvedorEm pro...
Perguntas & Respostas                        Globalcode	  –	  Open4education
Agradecimentos                 Globalcode	  –	  Open4education
Contatos para consultoriae treinamento            Adriano Tavares              adriano.tavares@arkhi.com.br              @...
Upcoming SlideShare
Loading in …5
×

Produtividade em Integração de Aplicações com Apache Camel

977 views

Published on

Apresentação realizada por Alessandro Kieras e Adriano Tavares na trilha de Arquitetura de Software no TDC (The Developers Conference), o maior evento dos profissionais de TI de todo o Brasil.

O código fonte da aplicação utilizada na apresentação pode ser obtido em https://github.com/kieras/camel-ecommerce.

Esta palestra apresenta como utilizar o projeto open source Apache Camel para implementar padrões de integração de aplicações corporativas nos ambientes Java e Java EE, com foco na produtividade.

Os assuntos abordados na palestra são: Introdução à DSL Java do Apache Camel para integração de aplicações e padrões de integração; A arquitetura do Apache Camel a 10.000 pés; Requisitos de um cenário de integração do mundo real; Desenho de uma solução de integração utilizando "Enterprise Integration Patterns"; Implementação de padrões de integração (Roteamento, Endpoints, Transformação, Enriquecimento, Quebra e Agregação etc) utilizando Apache Camel; Uso dos componentes File, FTP, JPA e JMS; Demonstrações usando Apache Camel com Eclipse, Maven e ActiveMQ.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
977
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Produtividade em Integração de Aplicações com Apache Camel

  1. 1. Produtividade em Integração deAplicações com Apache Camel Globalcode  –  Open4education
  2. 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. 3. Meta “Apresentar a DSL Java do Apache Camel para tornar as integrações mais simples e produtivas para os desenvolvedores.” Globalcode  –  Open4education
  4. 4. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  5. 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. 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. 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. 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. 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. 10. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  11. 11. Roteamentocom a DSL Java <<Endpoint A>> <<Filter>> <<Endpoint B>> <<Processor>> from(A).filter(isValid).to(B); Globalcode  –  Open4education
  12. 12. Endpoint URI"schema:contextpath?option=value" "file:c:dir?delay=5000" "jms:aQueue?competingConsumers=10" Globalcode  –  Open4education
  13. 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. 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. 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. 16. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  17. 17. Contexto da Aplicação Logística de EntregaSite E-Commerce Camel E-Commerce Controle de Estoque Globalcode  –  Open4education
  18. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 30. Demo!   - Execução da aplicação;!   - Subindo o contexto do Apache Camel;!   - Escalabilidade com o Competing Consumers. Globalcode  –  Open4education
  31. 31. Agenda!   Conceitos Fundamentais!   Arquitetura do Apache Camel!   Desenho & Implementação!   Demo!   Conclusão!   Perguntas & Respostas Globalcode  –  Open4education
  32. 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. 33. Perguntas & Respostas Globalcode  –  Open4education
  34. 34. Agradecimentos Globalcode  –  Open4education
  35. 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

×