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

1.407 visualizações

Publicada em

Publicada em: Tecnologia
2 comentários
4 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
1.407
No SlideShare
0
A partir de incorporações
0
Número de incorporações
96
Ações
Compartilhamentos
0
Downloads
40
Comentários
2
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  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

×