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




                         Globalcode	
  –	
  Open4education
Para ganhar um refcardz
The Top Twelve Integration Patterns for Apache Camel




!   Envie um Twitter contendo:

#TDC2012 #ApacheCamel @pangeanet

Quero ganhar um refcardz!




                                                       Globalcode	
  –	
  Open4education
Meta




  “Apresentar a DSL Java do Apache Camel
   para tornar as integrações mais simples e
     produtivas para os desenvolvedores.”




                                      Globalcode	
  –	
  Open4education
Agenda
!     Conceitos Fundamentais
!     Arquitetura do Apache Camel
!     Desenho & Implementação
!     Demo
!     Conclusão
!     Perguntas & Respostas




                                    Globalcode	
  –	
  Open4education
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ífico
CSS                 Definição de estilo e layout de páginas web
SQL                 Consultas em bases de dados relacionais
XUL                 Definição de interfaces com o usuário
Expressão Regular   Casamento de padrões em strings
Ant                 Automatização de build’s
JPA Criteria        Consultas de entidades OO
                                        * Domain Specific Languages.

                                                    Globalcode	
  –	
  Open4education
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
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
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
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
Agenda
!     Conceitos Fundamentais
!     Arquitetura do Apache Camel
!     Desenho & Implementação
!     Demo
!     Conclusão
!     Perguntas & Respostas




                                    Globalcode	
  –	
  Open4education
Roteamento
com a DSL Java




 <<Endpoint A>>     <<Filter>>       <<Endpoint B>>
                  <<Processor>>




 from(A).filter(isValid).to(B);

                                  Globalcode	
  –	
  Open4education
Endpoint URI


"schema:contextpath?option=value"


 "file:c:dir?delay=5000"

 "jms:aQueue?competingConsumers=10"



                            Globalcode	
  –	
  Open4education
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
Arquitetura do Camel
a 10 mil pés
Engine de       Camel Context
Roteamento
                Route 1                                                          Processadores
A DSL liga
endpoints e      Route 2                                                         É onde o
processadores                                                                    processamento da
para criar          Route 3
                                                                                 lógica de
rotas.
                                                                                 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
Arquitetura modular
e 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
Agenda
!     Conceitos Fundamentais
!     Arquitetura do Apache Camel
!     Desenho & Implementação
!     Demo
!     Conclusão
!     Perguntas & Respostas




                                    Globalcode	
  –	
  Open4education
Contexto da Aplicação



                                     Logística de
                                       Entrega



Site E-Commerce      Camel
                  E-Commerce



                                     Controle de
                                      Estoque



                               Globalcode	
  –	
  Open4education
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
<<Message>>                    <<Message>>
                                                Pedido XML                    Pedido POJO




Site 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
<<Message>>                    <<Message>>
                                                Pedido XML                    Pedido POJO




Site 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
ROTA 1: Endpoint FTP +
Translator
                                            <<Message>>                    <<Message>>
                                             Pedido XML                    Pedido POJO




                             <<Endpoint>>                 <<Translator>>                 <<Channel>>
           Site E-Commerce
                              Pedido FTP                    Pedido XML                     Pedidos
                                                            para POJO



public 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
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
Pedido com anotações
JAXB 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
ROTA 2: Splitter


          <<Channel>>    <<Splitter>>     <<Channel>>
            Pedidos     Pedido em Itens      Itens




from("jms:pedidos")
.split().method(PedidoSplitter.class)
  .setHeader("PEDIDO_CORRELATION_ID",
                  property("CamelCorrelationId"))
  .setHeader("PEDIDO_SIZE",
                  property("CamelSplitSize"))
.to("jms:itens");



                                                    Globalcode	
  –	
  Open4education
ROTA 3: Content Based
Router
                                                  <<Content Enricher>>
                                                        Produtos
                                                       Artesanais

                                                                         <<Channel>>
         <<Channel>>   <<Content Based Router>>                              Itens
            Itens            Tipo do Item                                Processados


                                                  <<Content Enricher>>
                                                        Produtos
from("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
Um Processador de
Pedidos

    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
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 Estoque

from("jms:itensProcessados")
  .aggregate(header("PEDIDO_CORRELATION_ID"),
                  new PedidoAggregationStrategy())
            .completionSize(header("PEDIDO_SIZE"))
  .multicast().parallelProcessing()
.to("jms:pedidosProntosEntrega",
            "jms:pedidosProntosBaixaEstoque");

                                                                  Globalcode	
  –	
  Open4education
ROTA 5: Endpoints
Freemarker e File

      <<Channel>>      <<Translator>>                    Logística de
      Pedidos para                        <<Endpoint>>
                      Pedido POJO para                     Entrega
        Entrega                            Arquivo TXT
                     TXT com Freemarker




from("jms:pedidosProntosEntrega")
.to("freemarker:ecommerce/pedido_ecommerce.ftl")
.to("file:ecommerce/entregas/?
      fileName=entrega-
          $simple{date:now:yyyyMMddHHmmssSSS}.txt");




                                                         Globalcode	
  –	
  Open4education
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
Demo
!   - Execução da aplicação;

!   - Subindo o contexto do Apache Camel;

!   - Escalabilidade com o Competing Consumers.




                                       Globalcode	
  –	
  Open4education
Agenda
!     Conceitos Fundamentais
!     Arquitetura do Apache Camel
!     Desenho & Implementação
!     Demo
!     Conclusão
!     Perguntas & Respostas




                                    Globalcode	
  –	
  Open4education
Conclusão
A DSL Java do Apache Camel confere:

! Vocabulário comum baseado em EIPs;
! Produtividade para o desenvolvedor

Em projetos de integração não reinvente a roda.

Considere utilizar o Apache Camel!


                                      Globalcode	
  –	
  Open4education
Perguntas & Respostas




                        Globalcode	
  –	
  Open4education
Agradecimentos




                 Globalcode	
  –	
  Open4education
Contatos para consultoria
e 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

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

  • 1.
    Produtividade em Integraçãode Aplicações com Apache Camel Globalcode  –  Open4education
  • 2.
    Para ganhar umrefcardz The Top Twelve Integration Patterns for Apache Camel !   Envie um Twitter contendo: #TDC2012 #ApacheCamel @pangeanet Quero ganhar um refcardz! Globalcode  –  Open4education
  • 3.
    Meta “Apresentara 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ãoDSL’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ífico CSS Definição de estilo e layout de páginas web SQL Consultas em bases de dados relacionais XUL Definição de interfaces com o usuário Expressão Regular Casamento de padrões em strings Ant Automatização de build’s JPA Criteria Consultas de entidades OO * Domain Specific Languages. Globalcode  –  Open4education
  • 6.
    A DSL doApache 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 umaboa 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 usaro 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 umcaso 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.
    Roteamento com a DSLJava <<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 aDSL 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 Camel a10 mil pés Engine de Camel Context Roteamento Route 1 Processadores A DSL liga endpoints e Route 2 É onde o processadores processamento da para criar Route 3 lógica de rotas. 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 modular e 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 Entrega Site 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 POJO Site 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 POJO Site 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: EndpointFTP + Translator <<Message>> <<Message>> Pedido XML Pedido POJO <<Endpoint>> <<Translator>> <<Channel>> Site E-Commerce Pedido FTP Pedido XML Pedidos para POJO public 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 dePedido <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ções JAXBe 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 Itens from("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: ContentBased Router <<Content Enricher>> Produtos Artesanais <<Channel>> <<Channel>> <<Content Based Router>> Itens Itens Tipo do Item Processados <<Content Enricher>> Produtos from("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 de Pedidos 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 Estoque from("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: Endpoints Freemarkere File <<Channel>> <<Translator>> Logística de Pedidos para <<Endpoint>> Pedido POJO para Entrega Entrega Arquivo TXT TXT com Freemarker from("jms:pedidosProntosEntrega") .to("freemarker:ecommerce/pedido_ecommerce.ftl") .to("file:ecommerce/entregas/? fileName=entrega- $simple{date:now:yyyyMMddHHmmssSSS}.txt"); Globalcode  –  Open4education
  • 29.
    ROTA 6: EndpointJPA <<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ão A DSL Javado Apache Camel confere: ! Vocabulário comum baseado em EIPs; ! Produtividade para o desenvolvedor Em 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 consultoria etreinamento 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