SlideShare une entreprise Scribd logo
FinistJug



      versatile open-source integration framework

                                           #FinistJUG




http://camel.apache.org/
Sommaire
       ●
           Présentation
       ●   EIP
       ●
           Chevaucher le chameau
       ●
           Dompter le chameau
       ●   Les camélidés en quelques chiffres
       ●
           Le matériel du chamelier
       ●   Questions




21/03/13                          Apache Camel   2
Présentation
  ●   Le cloud computing est à la mode




  ●   Mais pas dans nos entreprises
21/03/13           Apache Camel          3
Présentation
 ●   Nous on a le Jean-Cloud computing
                 On a acheté du MainFrame IBM parce que c'était ce
                 qu'on faisait de mieux. Puis on a rencontré des gars
                 d'Oracle et on leur a acheté leur produit. On a été à
                 une conférence Tibco et on leur a acheté des trucs,
                 ça paraissait bien sur leurs slides. Dernièrement, on
                 a développé des web-services SOAP, mis en place
                 un ActiveMQ, un WebSphère MQ, un CRM avec son
                 interface REST.




                    On est au top de la techno, mais c'est le bordel !

21/03/13             Apache Camel                                        4
Présentation
●   Pourquoi avons nous des problèmes
    d'intégration ?
    –   Nos applications sont bâties avec différentes briques
        techniques
    –   Nos briques utilisent différents protocoles d'échange
    –   L'intégration est critique pour notre business
●   Pourquoi un framework ?
    –   Le framework fait le gros du boulot
    –   Nous pouvons nous concentrer sur le métier
    –   Nous n'avons pas besoin de réinventer la roue




21/03/13                                      Apache Camel      5
Présentation
●
    Approche SOA
●
    Chaque service est lié par l’ESB
●
    Séparation des responsabilités
●
    Pas d’adhérence entre SI/applications




                                                   6



    21 mars 2013 – DTI/Architectures et méthodes
    appliquées
Présentation
●
    L'ESB est une couche basée sur des messages permettant de connecter
    différentes applications qui ne sont pas faites pour communiquer entre
    elles.
●
    Il s'appuie sur les principes suivants :
     –   L’orchestration des processus et services métiers.
     –   La distribution forte : les services sont distribués sur le réseau de l'entreprise ou sur
         Internet.
     –   La communication par messages : JMS, Web Services …




                                                                                                     7



    21 mars 2013 – DTI/Architectures et méthodes
    appliquées
Présentation
●   Framework java open source
●   Permet d'intégrer des systèmes hétérogène
    facilement
●   Basé sur des échanges de messages
●   Architecture événementielle et
    transactionnelle
●   DSL (Java, Spring XML et Scala)




21/03/13                       Apache Camel     8
Camel
●   Integration framework
●   Enterprise Integration Patterns (EIP) (50 implémentés nativement)
●   Routage et médiation
●   Domain Specific Language (DSL) (Java, XML et Scala)
    Endpoints comme URIs
                                                                  Concise
●


●   Predicate et Expressions
                                                                  Application
●   Extensible et configurable
                                                                  Messaging
●   Pas de spécification lourde
                                                                  Exchange
●   Pas de dépendance à un conteneur
                                                                  Language
●   Agnostique de la nature des messages
●   Connectable à un grand nombre de protocoles (134 à ce jour)
●   148 type converters
●   Apache licensed
21/03/13                             Apache Camel                           9
Sous le capot




21/03/13        Apache Camel   10
Sous le capot




21/03/13        Apache Camel   11
EIP
 ●   Enterprise Integration Patterns




21/03/13            Apache Camel       12
EIP
 ●   Enterprise Integration Patterns




21/03/13            Apache Camel   http://camel.apache.org/eip   13
EIP
●   Enterprise Integration Pattern :
    http://camel.apache.org/enterprise-integration-patterns.h
    tml
    –   Patron de conception ou typologie de routes. L’objectif est de :
        ●   Modéliser l’architecture d’une sous-route, voire d’une route
        ●   Maîtriser le processus de réalisation d'une sous-route voire d'une route
        ●   Pouvoir associer une route à un pattern
        ●   Pouvoir industrialiser la réalisation de plusieurs routes




21/03/13                                Apache Camel                                   14
EIP
 ●   Exemple




           Apache ActiveMQ                  WebSphereMQ




21/03/13                     Apache Camel                 15
EIP
 ●   Exemple

                             Filter pattern




           Apache ActiveMQ                    WebSphereMQ




21/03/13                     Apache Camel                   16
Chevaucher le chameau




21/03/13       Apache Camel   17
Chevaucher le chameau
 ●   Exemple
                 A                                                      B
                                      Filter pattern


                       isWidget = xpath("/quote/product = ‘widget’");
                       from(A).filter(isWidget).to(B);

           Apache ActiveMQ                                        WebSphereMQ




21/03/13                             Apache Camel                               18
Chevaucher le chameau
 ●   Code de cet exemple :
     import org.apache.camel.builder.RouteBuilder;

     public class FilterRoute extends RouteBuilder {

      public void configure() throws Exception {
       from("activemq:queue:quote")
         .filter().xpath("/quote/product =‘widget’")
           .to("mq:quote");
      }
     }
21/03/13                  Apache Camel                 19
Chevaucher le chameau
 ●   Content based router




21/03/13           Apache Camel   20
Chevaucher le chameau
  ●   Content based router (java DSL)
from("activemq:NewOrders")
  .choice()
    .when().xpath("/order/product = 'widget'")
      .to("activemq:Orders.Widget")
    .otherwise()
      .to("activemq:Orders.Gadget");



 21/03/13               Apache Camel             21
Chevaucher le chameau
  ●   Content based router (XML DSL)
<camelContext>
 <route>
  <from uri="activemq:NewOrders"/>
  <choice>
   <when>
     <xpath>/order/product = 'widget'</xpath>
     <to uri="activemq:Orders.Widgets"/>
   </when>
   <otherwise>
     <to uri="activemq:Orders.Gadgets"/>
   </otherwise>
  </choice>
 </route>
</camelContext>
 21/03/13                     Apache Camel      22
Chevaucher le chameau


           Polling     Splitter   Normalizer       Service     Aggregator   Endpoint
           Consumer                                Activator


              1          2                     3                  4            5
●   But :
    –   1) Consommer un fichier XML contenant des ordres
    –   2) Spliter le fichier en passages d'ordres
    –   3) Normaliser et traiter l'ordre
    –   4) Réassembler les ordres pour réaliser un compte rendu
    –   5) Envoyer le compte rendu
21/03/13                              Apache Camel                                     23
Chevaucher le chameau
      from("file:inbox?move=.done")
        .split().streaming().parallelProcessing()
          .xpath("/order/line")
          .aggregationStrategyRef("summaryService")
          .to("bean:orderLineService")
        .end()
        .to("jms:topic:order.summary");



●
    Streaming du fichier
                                         public class SummaryService implements
                                           AggregationStrategy {
●
    Traitement concurrent de chaque
    ordre
                                            Exchange aggregate(Exchange
●
    JAXB marshalling
                                          oldExchange, Exchange newExchange) {
●
    Utilisation d'un bean Spring comme
                                             ...
    endpoint
                                            }
                                          }
      21/03/13                             Apache Camel                       24
Camel c'est cool




21/03/13         Apache Camel   25
Connecteurs




21/03/13       Apache Camel   26
Connecteurs
 ●   En entrée (timer)
 ●   En sortie (log)
 ●   En entrée / sortie (JMS, File, CXF)
 ●   Internes (Direct, SEDA, VM)



21/03/13               Apache Camel        27
Connecteurs
 ●    134 à ce jour
     ahc              core-osgi       groovy              jaxb
     amqp             core-xml        gson                jclouds
     apns             couchdb         guava-eventbus      jcr
     atom             crypto          guice               jdbc
     avro             csv             hawtdb              jetty
     aws              cxf             hazelcast           jibx
     bam              cxf-transport   hbase               jing
     bean-validator   dns             hdfs                jms
     beanio           dozer           hl7                 jmx
     bindy            eclipse         http                josql
     blueprint        ejb             http4               jpa
     cache            elasticsearch   ibatis              jsch
     castor           eventadmin      irc                 jt400
     cdi              exec            jackson             juel
     cmis             flatpack        jasypt              jxpath
     cometd           fop             javaspace           kestrel
     context          freemarker                          http://camel.apache.org/components.html
21/03/13              ftp                  Apache Camel                                             28
                      gae
Connecteurs
 ●   134 à ce jour     paxlogging sjms
                       printer    smpp
                                                     syslog
                                                     tagsoup
               krati                                 test
               ldap    protobuf   snmp               test-blueprint
               leveldb quartz     soap               test-spring
               lucene  quickfix   solr               testng
               mail    restlet    spring             twitter
               mina    rmi        spring-batch       velocity
               mina2   routebox   spring-integration web
               mongodb rss        spring-javaconfig web-standalone
               mqtt    ruby       spring-security    websocket
               msv     saxon      spring-ws          xmlbeans
               mvel    scala      sql                xmljson
               mybatis script     ssh                xmlrpc
               nagios  servlet    stax               xmlsecurity
               neo4j   shiro      stream             xmpp
               netty   sip        stringtemplate     xstream
               ognl                                  zookeeper
                                       http://camel.apache.org/components.html
21/03/13                Apache Camel                                             29
Connecteurs
 ●   Connectés au monde externe :
     –     CXF, HTTP, FTP, File, JMS, …
 ●   Connecteurs internes
     –     Direct : sorte de GOTO
     –     Seda : pareil que direct mais avec un système
           de queue paramétrable
     –     VM : Comme Seda mais en repassant par la
           JVM (en cas de classloaders différents)

21/03/13                      Apache Camel                 30
Connecteurs
 ●   Exemple : copie de fichiers
 from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")




  http://camel.apache.org/file2.html
21/03/13                               Apache Camel                           31
Connecteurs
 ●   Exemple : Web service SOAP
  package org.giwi.camel.ws;

  import javax.jws.WebParam;
  import javax.jws.WebResult;

  @javax.jws.WebService(name = "sayHelloService", targetNamespace = "http://giwi.free.fr")
  public interface SayHelloService {
  @WebResult(name = "status")
  public String sayHello(@WebParam(name = "name") String name);

   @WebResult(name = "status")
   public String sayGoodby(@WebParam(name = "name") String name);
  }




  http://camel.apache.org/cxf.html
21/03/13                                      Apache Camel                                   32
Connecteurs
 ●   Exemple : Web service SOAP
  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context" xmlns:cxf="http://camel.apache.org/schema/cxf"
  xmlns:http="http://cxf.apache.org/transports/http/configuration" xmlns:sec="http://cxf.apache.org/configuration/security"
  xsi:schemaLocation="
  http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd
  http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
  http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <!-- needed cxf imports -->
  <import resource="classpath:META-INF/cxf/cxf.xml" />
  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
  <!-- use the CXF servlet -->
  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
  <!-- Déclaration des routes camel à éxécuter -->
  <camelContext xmlns="http://camel.apache.org/schema/spring">
  <package>org.giwi.camel.route</package>
  </camelContext>
  </beans>

  http://camel.apache.org/cxf.html
21/03/13                                               Apache Camel                                                       33
Connecteurs
 ●     Exemple : Web service SOAP
  @Override
  public void configure() throws Exception {
     from("cxf:/helloBetterService?serviceClass=org.giwi.camel.ws.SayHelloService")
        .recipientList(simple("direct:${header.operationName}"));

        from("direct:sayHello").process(new Processor() {
            @Override
            public void process(Exchange ex) throws Exception {
               ex.getOut().setBody("hello");
            }
        });

       from("direct:sayGoodby").process(new Processor() {
           @Override
           public void process(Exchange ex) throws Exception {
              ex.getOut().setBody("goodby");
           }
       });
  }
      http://camel.apache.org/cxf.html
21/03/13                                           Apache Camel                       34
Médiation
 ●   Langages d'expression :
      –    Beanshell, Python, PHP, Javascript, EL,
           Ruby, Groovy, Simple, SPEL, JSR233,
           SQL, ONGL, XPATH, Mvel, Xquery, …
 ●    Transformations de données
     from("activemq:QueueWithJavaObjects”)
        .marshal().jaxb()
        .to("mq:QueueWithXmlMessages");
21/03/13                   Apache Camel              35
Un bean pour traduire
from("activemq:Incoming”).
  beanRef("myBeanName", "someMethod").
   to("activemq:Outgoing");
 public class Foo {
  public String someMethod(String name,
 @XPath("/order/@id") String oid,
   @Header("JMSCorrelationID") String cid) {
   return “Hello “ + name;
  }
 }
21/03/13              Apache Camel             36
Tests unitaires




21/03/13        Apache Camel   37
Transactions
 ●   Une erreur se produit




21/03/13           Apache Camel
                                  X   38
Transactions
 ●   Try ... Catch style

from("activemq:incoming")
  .doTry()
    .marshal().jaxb()
    .to("mq:QueueWithXmlMessages")
  .doCatch(Exception.class)
    .to("activemq:error")
  .end();
21/03/13             Apache Camel    39
Transactions
 ●   Dead Letter Channel EIP w/
     Redelivery
errorHandler(
  deadLetterChannel("activemq:error")
   .maximumRedeliveries(5)
   .redeliveryDelay(5000)
);

from("activemq:incoming")
  .marshal().jaxb()
  .to("mq:QueueWithXmlMessages");
21/03/13             Apache Camel       40
Transactions
 ●   Interceptors




21/03/13            Apache Camel   41
Autres fonctionnalités
●   Interceptors
●   Transaction
●   Compensation
●   Pluggable Security Framework
    –   Apache Shiro
    –   Spring Security
●   Event Notification
●   Route Policy
●   Thread Model
●   Asynchronous Non-Blocking Routing Engine


21/03/13                    Apache Camel       42
En résumé
●
    50 EIP patterns
●   134 Components
●
    19 Data formats
●   15 Expression Languages
●   DSL in multiple flavors (Java, XML, Scala, Groovy)
●
    Automatic type conversion
●   Strong bean support
●
    Test Kit
●   Management (JMX, REST)
●
    Developer Web Console
●
    Error Handling
●   Non-blocking Routing Engine                          Camel c'est puissant


21/03/13                               Apache Camel                             43
Pimp my Camel

●   Camel est extensible
    –   On peut créer des composants
        (connecteurs) très simplement
    –   http://camel.apache.org/writing-c
        omponents.html




    21/03/13                          Apache Camel   44
Chevaucher le chameau




21/03/13       Apache Camel   45
Dompter le chameau
●   Paradigmes de déploiement
    –   Aucune dépendance à un conteneur
    –   Léger
    –   Encapsulable
●   Possibilités de déploiement
    –   Standalone
    –   WAR
    –   Spring
    –   J2EE
    –   JBI
    –   OSGi
    –   Cloud
    –   Java Web Start
    –   Spring Application
21/03/13                              Apache Camel   46
Dompter le chameau
                                 ●   Conteneurs
                                     compatibles :
                                     –   Apache ServiceMix
                                     –   Apache ActiveMQ
                                     –   Apache Tomcat
                                     –   Jetty
                                     –   JBoss
                                     –   IBM WebSphere
                                     –   Oracle WebLogic
                                     –   Oracle OC4j
                                     –   Glassfish
                                     –   Google App Engine
                                     –   ...


21/03/13          Apache Camel                             47
Quelques chiffres
                                                                                           ●   Né en 2007
                                                                                           ●   13677 commits on trunk
                                                                                               (37 different committers)



Quarterly visits on the Apache Camel website   Number of commiters on the project




 Yearly posts on Camel user mailing list       Number of Camel components out of the box


                                                                                                      Camel est sexy
     21/03/13                                           Apache Camel                                              48
Le matériel du chamelier




           Fuse IDE
21/03/13              Apache Camel   49
Le matériel du chamelier




   Talend Open Studio

21/03/13                Apache Camel   50
Le matériel du chamelier




      Yed / LibreOffice
21/03/13                  Apache Camel   51
Pourquoi utiliser Camel
●   Masque la complexité
●   Design de workflows métiers
    complexes
●
    Re-use des sous routes
●   Interconnexions natives
●   Événementiel et transactionnel
●   Peu de lignes de code
                    C'est nouveau, mais c'est beau !
                        Jean-Cloud est content.

21/03/13                   Apache Camel                52
WTF
                                 Mais, WTF !!!
                           La complexité maîtrisée est
                          remplacée par une complexité
                                non maîtrisée du
                                  framework.




21/03/13   Apache Camel                              53
Bonus
 ●   Il m'en reste un peu, je vous le rajoute ?
      –    Mapping avec Dozer
      –    http://dozer.sourceforge.net




21/03/13                    Apache Camel     54
Cas concret : Dozer
Cas concret : Dozer
Questions
@XavMarin
http://github.com/giwi
http://giwi.free.fr




                        « Si tout le monde a compris, c'est que je me suis mal exprimé »
                                                                        Alan Greenspan

                                                                                     57



   21 mars 2013 – DTI/Architectures et méthodes
   appliquées

Contenu connexe

Tendances

symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)Fabien Potencier
 
Les nouveautés de Visual Studio 11
Les nouveautés de Visual Studio 11Les nouveautés de Visual Studio 11
Les nouveautés de Visual Studio 11
Microsoft
 
eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductionRoland Benedetti
 
Deployment of a multi-site platform
Deployment of a multi-site platformDeployment of a multi-site platform
Deployment of a multi-site platform
Kaliop-slide
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api management
Lilia Sfaxi
 
Tp2 - Latex
Tp2 - LatexTp2 - Latex
Tp2 - Latex
Lilia Sfaxi
 
Front end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeFront end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeOuadie LAHDIOUI
 
Apache for développeurs PHP
Apache for développeurs PHPApache for développeurs PHP
Apache for développeurs PHP
julien pauli
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
Nicolas Lœuillet
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
Syrine Ben aziza
 

Tendances (11)

symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
 
Les nouveautés de Visual Studio 11
Les nouveautés de Visual Studio 11Les nouveautés de Visual Studio 11
Les nouveautés de Visual Studio 11
 
eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introduction
 
Deployment of a multi-site platform
Deployment of a multi-site platformDeployment of a multi-site platform
Deployment of a multi-site platform
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api management
 
Tp2 - Latex
Tp2 - LatexTp2 - Latex
Tp2 - Latex
 
Front end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeFront end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitée
 
Apache for développeurs PHP
Apache for développeurs PHPApache for développeurs PHP
Apache for développeurs PHP
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
Wasxposefinal
WasxposefinalWasxposefinal
Wasxposefinal
 

En vedette

Messaging for Web and Mobile with Apache ActiveMQ
Messaging for Web and Mobile with Apache ActiveMQMessaging for Web and Mobile with Apache ActiveMQ
Messaging for Web and Mobile with Apache ActiveMQ
dejanb
 
Enterprise Integration Patterns with ActiveMQ
Enterprise Integration Patterns with ActiveMQEnterprise Integration Patterns with ActiveMQ
Enterprise Integration Patterns with ActiveMQ
Rob Davies
 
Active MQ
Active MQActive MQ
Active MQ
Kris Jeong
 
Messaging With Apache ActiveMQ
Messaging With Apache ActiveMQMessaging With Apache ActiveMQ
Messaging With Apache ActiveMQ
Bruce Snyder
 
Enterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache CamelEnterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache Camel
Ioan Eugen Stan
 
ActiveMQ In Action
ActiveMQ In ActionActiveMQ In Action
ActiveMQ In Action
Bruce Snyder
 
Apache ActiveMQ - Enterprise messaging in action
Apache ActiveMQ - Enterprise messaging in actionApache ActiveMQ - Enterprise messaging in action
Apache ActiveMQ - Enterprise messaging in action
dejanb
 
Apache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache CamelApache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache Camel
Omi Om
 
ActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresActiveMQ 5.9.x new features
ActiveMQ 5.9.x new features
Christian Posta
 
Dopplr: It's made of messages - Matt Biddulph
Dopplr: It's made of messages - Matt BiddulphDopplr: It's made of messages - Matt Biddulph
Dopplr: It's made of messages - Matt BiddulphCarsonified Team
 
Communication par l'objet : place à la convergence
Communication par l'objet : place à la convergenceCommunication par l'objet : place à la convergence
Communication par l'objet : place à la convergencecmboyer
 
Virus y bacterias
Virus y bacteriasVirus y bacterias
Virus y bacterias
Karola_Lay
 
E-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in DeutschlandE-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in Deutschland
Tertium datur AG
 
Uniminuto sistema de informacion
Uniminuto   sistema de informacionUniminuto   sistema de informacion
Uniminuto sistema de informacion
doralruizz
 
Power de la gripe.. melina
Power de la gripe.. melinaPower de la gripe.. melina
Power de la gripe.. melina
Meli Heredia
 
Magento1
Magento1Magento1
Magento1
Jabran Abdi
 
La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 2015La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 2015
4roues
 
Verhandlungen Herbstlohnrunde 07
Verhandlungen Herbstlohnrunde 07Verhandlungen Herbstlohnrunde 07
Verhandlungen Herbstlohnrunde 07
hc voigt
 
Portafolio.pptx
Portafolio.pptxPortafolio.pptx
Portafolio.pptx
Nathaly Andria
 
Sesión sexta
Sesión sextaSesión sexta
Sesión sexta
Alejandro Caro
 

En vedette (20)

Messaging for Web and Mobile with Apache ActiveMQ
Messaging for Web and Mobile with Apache ActiveMQMessaging for Web and Mobile with Apache ActiveMQ
Messaging for Web and Mobile with Apache ActiveMQ
 
Enterprise Integration Patterns with ActiveMQ
Enterprise Integration Patterns with ActiveMQEnterprise Integration Patterns with ActiveMQ
Enterprise Integration Patterns with ActiveMQ
 
Active MQ
Active MQActive MQ
Active MQ
 
Messaging With Apache ActiveMQ
Messaging With Apache ActiveMQMessaging With Apache ActiveMQ
Messaging With Apache ActiveMQ
 
Enterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache CamelEnterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache Camel
 
ActiveMQ In Action
ActiveMQ In ActionActiveMQ In Action
ActiveMQ In Action
 
Apache ActiveMQ - Enterprise messaging in action
Apache ActiveMQ - Enterprise messaging in actionApache ActiveMQ - Enterprise messaging in action
Apache ActiveMQ - Enterprise messaging in action
 
Apache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache CamelApache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache Camel
 
ActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresActiveMQ 5.9.x new features
ActiveMQ 5.9.x new features
 
Dopplr: It's made of messages - Matt Biddulph
Dopplr: It's made of messages - Matt BiddulphDopplr: It's made of messages - Matt Biddulph
Dopplr: It's made of messages - Matt Biddulph
 
Communication par l'objet : place à la convergence
Communication par l'objet : place à la convergenceCommunication par l'objet : place à la convergence
Communication par l'objet : place à la convergence
 
Virus y bacterias
Virus y bacteriasVirus y bacterias
Virus y bacterias
 
E-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in DeutschlandE-Bilanz mit XBRL in Deutschland
E-Bilanz mit XBRL in Deutschland
 
Uniminuto sistema de informacion
Uniminuto   sistema de informacionUniminuto   sistema de informacion
Uniminuto sistema de informacion
 
Power de la gripe.. melina
Power de la gripe.. melinaPower de la gripe.. melina
Power de la gripe.. melina
 
Magento1
Magento1Magento1
Magento1
 
La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 2015La Route des Villages, Paris-Cannes 2015
La Route des Villages, Paris-Cannes 2015
 
Verhandlungen Herbstlohnrunde 07
Verhandlungen Herbstlohnrunde 07Verhandlungen Herbstlohnrunde 07
Verhandlungen Herbstlohnrunde 07
 
Portafolio.pptx
Portafolio.pptxPortafolio.pptx
Portafolio.pptx
 
Sesión sexta
Sesión sextaSesión sexta
Sesión sexta
 

Similaire à FinistJUG - Camel Presentation

Presentation mug-data mapper
Presentation mug-data mapperPresentation mug-data mapper
Presentation mug-data mapper
FastConnect
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
DocDoku
 
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
Alexandre Touret
 
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
Alexandre Touret
 
Lagom, reactive framework
Lagom, reactive frameworkLagom, reactive framework
Lagom, reactive framework
Fabrice Sznajderman
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
Julien Anguenot
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
Noël Bardelot
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
VISEO
 
12-Factor
12-Factor12-Factor
12-Factor
Luc Juggery
 
Architecture SAP Web AS
Architecture SAP Web ASArchitecture SAP Web AS
Architecture SAP Web AS
Mrabtei Ayoub
 
Architecture sap web AS
Architecture sap web ASArchitecture sap web AS
Architecture sap web AS
Mrabtei Ayoub
 
Big sql4meetup
Big sql4meetupBig sql4meetup
Big sql4meetup
Jacques Milman
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
Horacio Gonzalez
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
Xavier MARIN
 
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureTechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureThomas Conté
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Jérôme Petazzoni
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf
Ombotimbe Salifou
 
presentation_corrige_rapidertgrthtrr.pptx
presentation_corrige_rapidertgrthtrr.pptxpresentation_corrige_rapidertgrthtrr.pptx
presentation_corrige_rapidertgrthtrr.pptx
ThamerMahersi1
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
Nicolas Herbaut
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs rubypinguin666
 

Similaire à FinistJUG - Camel Presentation (20)

Presentation mug-data mapper
Presentation mug-data mapperPresentation mug-data mapper
Presentation mug-data mapper
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
 
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam
 
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
 
Lagom, reactive framework
Lagom, reactive frameworkLagom, reactive framework
Lagom, reactive framework
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
12-Factor
12-Factor12-Factor
12-Factor
 
Architecture SAP Web AS
Architecture SAP Web ASArchitecture SAP Web AS
Architecture SAP Web AS
 
Architecture sap web AS
Architecture sap web ASArchitecture sap web AS
Architecture sap web AS
 
Big sql4meetup
Big sql4meetupBig sql4meetup
Big sql4meetup
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans AzureTechDays 2014 : retour d'expérience Kompass migration Java dans Azure
TechDays 2014 : retour d'expérience Kompass migration Java dans Azure
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
 
0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf0251-formation-java-programmation-objet.pdf
0251-formation-java-programmation-objet.pdf
 
presentation_corrige_rapidertgrthtrr.pptx
presentation_corrige_rapidertgrthtrr.pptxpresentation_corrige_rapidertgrthtrr.pptx
presentation_corrige_rapidertgrthtrr.pptx
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs ruby
 

Plus de Xavier MARIN

BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
Xavier MARIN
 
Warp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series PlatformWarp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series Platform
Xavier MARIN
 
Mongo db et nosql
Mongo db et nosqlMongo db et nosql
Mongo db et nosql
Xavier MARIN
 
Vert.x
Vert.xVert.x
Vert.x
Xavier MARIN
 
Polymer
PolymerPolymer
Polymer
Xavier MARIN
 
Jeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dJeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3d
Xavier MARIN
 

Plus de Xavier MARIN (6)

BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Warp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series PlatformWarp 10 - The most advanced Time Series Platform
Warp 10 - The most advanced Time Series Platform
 
Mongo db et nosql
Mongo db et nosqlMongo db et nosql
Mongo db et nosql
 
Vert.x
Vert.xVert.x
Vert.x
 
Polymer
PolymerPolymer
Polymer
 
Jeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3dJeux vidéo sur mobile - Unity3d
Jeux vidéo sur mobile - Unity3d
 

Dernier

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 

Dernier (6)

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 

FinistJUG - Camel Presentation

  • 1. FinistJug versatile open-source integration framework #FinistJUG http://camel.apache.org/
  • 2. Sommaire ● Présentation ● EIP ● Chevaucher le chameau ● Dompter le chameau ● Les camélidés en quelques chiffres ● Le matériel du chamelier ● Questions 21/03/13 Apache Camel 2
  • 3. Présentation ● Le cloud computing est à la mode ● Mais pas dans nos entreprises 21/03/13 Apache Camel 3
  • 4. Présentation ● Nous on a le Jean-Cloud computing On a acheté du MainFrame IBM parce que c'était ce qu'on faisait de mieux. Puis on a rencontré des gars d'Oracle et on leur a acheté leur produit. On a été à une conférence Tibco et on leur a acheté des trucs, ça paraissait bien sur leurs slides. Dernièrement, on a développé des web-services SOAP, mis en place un ActiveMQ, un WebSphère MQ, un CRM avec son interface REST. On est au top de la techno, mais c'est le bordel ! 21/03/13 Apache Camel 4
  • 5. Présentation ● Pourquoi avons nous des problèmes d'intégration ? – Nos applications sont bâties avec différentes briques techniques – Nos briques utilisent différents protocoles d'échange – L'intégration est critique pour notre business ● Pourquoi un framework ? – Le framework fait le gros du boulot – Nous pouvons nous concentrer sur le métier – Nous n'avons pas besoin de réinventer la roue 21/03/13 Apache Camel 5
  • 6. Présentation ● Approche SOA ● Chaque service est lié par l’ESB ● Séparation des responsabilités ● Pas d’adhérence entre SI/applications 6 21 mars 2013 – DTI/Architectures et méthodes appliquées
  • 7. Présentation ● L'ESB est une couche basée sur des messages permettant de connecter différentes applications qui ne sont pas faites pour communiquer entre elles. ● Il s'appuie sur les principes suivants : – L’orchestration des processus et services métiers. – La distribution forte : les services sont distribués sur le réseau de l'entreprise ou sur Internet. – La communication par messages : JMS, Web Services … 7 21 mars 2013 – DTI/Architectures et méthodes appliquées
  • 8. Présentation ● Framework java open source ● Permet d'intégrer des systèmes hétérogène facilement ● Basé sur des échanges de messages ● Architecture événementielle et transactionnelle ● DSL (Java, Spring XML et Scala) 21/03/13 Apache Camel 8
  • 9. Camel ● Integration framework ● Enterprise Integration Patterns (EIP) (50 implémentés nativement) ● Routage et médiation ● Domain Specific Language (DSL) (Java, XML et Scala) Endpoints comme URIs Concise ● ● Predicate et Expressions Application ● Extensible et configurable Messaging ● Pas de spécification lourde Exchange ● Pas de dépendance à un conteneur Language ● Agnostique de la nature des messages ● Connectable à un grand nombre de protocoles (134 à ce jour) ● 148 type converters ● Apache licensed 21/03/13 Apache Camel 9
  • 10. Sous le capot 21/03/13 Apache Camel 10
  • 11. Sous le capot 21/03/13 Apache Camel 11
  • 12. EIP ● Enterprise Integration Patterns 21/03/13 Apache Camel 12
  • 13. EIP ● Enterprise Integration Patterns 21/03/13 Apache Camel http://camel.apache.org/eip 13
  • 14. EIP ● Enterprise Integration Pattern : http://camel.apache.org/enterprise-integration-patterns.h tml – Patron de conception ou typologie de routes. L’objectif est de : ● Modéliser l’architecture d’une sous-route, voire d’une route ● Maîtriser le processus de réalisation d'une sous-route voire d'une route ● Pouvoir associer une route à un pattern ● Pouvoir industrialiser la réalisation de plusieurs routes 21/03/13 Apache Camel 14
  • 15. EIP ● Exemple Apache ActiveMQ WebSphereMQ 21/03/13 Apache Camel 15
  • 16. EIP ● Exemple Filter pattern Apache ActiveMQ WebSphereMQ 21/03/13 Apache Camel 16
  • 18. Chevaucher le chameau ● Exemple A B Filter pattern isWidget = xpath("/quote/product = ‘widget’"); from(A).filter(isWidget).to(B); Apache ActiveMQ WebSphereMQ 21/03/13 Apache Camel 18
  • 19. Chevaucher le chameau ● Code de cet exemple : import org.apache.camel.builder.RouteBuilder; public class FilterRoute extends RouteBuilder { public void configure() throws Exception { from("activemq:queue:quote") .filter().xpath("/quote/product =‘widget’") .to("mq:quote"); } } 21/03/13 Apache Camel 19
  • 20. Chevaucher le chameau ● Content based router 21/03/13 Apache Camel 20
  • 21. Chevaucher le chameau ● Content based router (java DSL) from("activemq:NewOrders") .choice() .when().xpath("/order/product = 'widget'") .to("activemq:Orders.Widget") .otherwise() .to("activemq:Orders.Gadget"); 21/03/13 Apache Camel 21
  • 22. Chevaucher le chameau ● Content based router (XML DSL) <camelContext> <route> <from uri="activemq:NewOrders"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:Orders.Widgets"/> </when> <otherwise> <to uri="activemq:Orders.Gadgets"/> </otherwise> </choice> </route> </camelContext> 21/03/13 Apache Camel 22
  • 23. Chevaucher le chameau Polling Splitter Normalizer Service Aggregator Endpoint Consumer Activator 1 2 3 4 5 ● But : – 1) Consommer un fichier XML contenant des ordres – 2) Spliter le fichier en passages d'ordres – 3) Normaliser et traiter l'ordre – 4) Réassembler les ordres pour réaliser un compte rendu – 5) Envoyer le compte rendu 21/03/13 Apache Camel 23
  • 24. Chevaucher le chameau from("file:inbox?move=.done") .split().streaming().parallelProcessing() .xpath("/order/line") .aggregationStrategyRef("summaryService") .to("bean:orderLineService") .end() .to("jms:topic:order.summary"); ● Streaming du fichier public class SummaryService implements AggregationStrategy { ● Traitement concurrent de chaque ordre Exchange aggregate(Exchange ● JAXB marshalling oldExchange, Exchange newExchange) { ● Utilisation d'un bean Spring comme ... endpoint } } 21/03/13 Apache Camel 24
  • 25. Camel c'est cool 21/03/13 Apache Camel 25
  • 26. Connecteurs 21/03/13 Apache Camel 26
  • 27. Connecteurs ● En entrée (timer) ● En sortie (log) ● En entrée / sortie (JMS, File, CXF) ● Internes (Direct, SEDA, VM) 21/03/13 Apache Camel 27
  • 28. Connecteurs ● 134 à ce jour ahc core-osgi groovy jaxb amqp core-xml gson jclouds apns couchdb guava-eventbus jcr atom crypto guice jdbc avro csv hawtdb jetty aws cxf hazelcast jibx bam cxf-transport hbase jing bean-validator dns hdfs jms beanio dozer hl7 jmx bindy eclipse http josql blueprint ejb http4 jpa cache elasticsearch ibatis jsch castor eventadmin irc jt400 cdi exec jackson juel cmis flatpack jasypt jxpath cometd fop javaspace kestrel context freemarker http://camel.apache.org/components.html 21/03/13 ftp Apache Camel 28 gae
  • 29. Connecteurs ● 134 à ce jour paxlogging sjms printer smpp syslog tagsoup krati test ldap protobuf snmp test-blueprint leveldb quartz soap test-spring lucene quickfix solr testng mail restlet spring twitter mina rmi spring-batch velocity mina2 routebox spring-integration web mongodb rss spring-javaconfig web-standalone mqtt ruby spring-security websocket msv saxon spring-ws xmlbeans mvel scala sql xmljson mybatis script ssh xmlrpc nagios servlet stax xmlsecurity neo4j shiro stream xmpp netty sip stringtemplate xstream ognl zookeeper http://camel.apache.org/components.html 21/03/13 Apache Camel 29
  • 30. Connecteurs ● Connectés au monde externe : – CXF, HTTP, FTP, File, JMS, … ● Connecteurs internes – Direct : sorte de GOTO – Seda : pareil que direct mais avec un système de queue paramétrable – VM : Comme Seda mais en repassant par la JVM (en cas de classloaders différents) 21/03/13 Apache Camel 30
  • 31. Connecteurs ● Exemple : copie de fichiers from("file://inputdir/?recursive=true&delete=true").to("file://outputdir") http://camel.apache.org/file2.html 21/03/13 Apache Camel 31
  • 32. Connecteurs ● Exemple : Web service SOAP package org.giwi.camel.ws; import javax.jws.WebParam; import javax.jws.WebResult; @javax.jws.WebService(name = "sayHelloService", targetNamespace = "http://giwi.free.fr") public interface SayHelloService { @WebResult(name = "status") public String sayHello(@WebParam(name = "name") String name); @WebResult(name = "status") public String sayGoodby(@WebParam(name = "name") String name); } http://camel.apache.org/cxf.html 21/03/13 Apache Camel 32
  • 33. Connecteurs ● Exemple : Web service SOAP <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:http="http://cxf.apache.org/transports/http/configuration" xmlns:sec="http://cxf.apache.org/configuration/security" xsi:schemaLocation=" http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <!-- needed cxf imports --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <!-- use the CXF servlet --> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- Déclaration des routes camel à éxécuter --> <camelContext xmlns="http://camel.apache.org/schema/spring"> <package>org.giwi.camel.route</package> </camelContext> </beans> http://camel.apache.org/cxf.html 21/03/13 Apache Camel 33
  • 34. Connecteurs ● Exemple : Web service SOAP @Override public void configure() throws Exception { from("cxf:/helloBetterService?serviceClass=org.giwi.camel.ws.SayHelloService") .recipientList(simple("direct:${header.operationName}")); from("direct:sayHello").process(new Processor() { @Override public void process(Exchange ex) throws Exception { ex.getOut().setBody("hello"); } }); from("direct:sayGoodby").process(new Processor() { @Override public void process(Exchange ex) throws Exception { ex.getOut().setBody("goodby"); } }); } http://camel.apache.org/cxf.html 21/03/13 Apache Camel 34
  • 35. Médiation ● Langages d'expression : – Beanshell, Python, PHP, Javascript, EL, Ruby, Groovy, Simple, SPEL, JSR233, SQL, ONGL, XPATH, Mvel, Xquery, … ● Transformations de données from("activemq:QueueWithJavaObjects”) .marshal().jaxb() .to("mq:QueueWithXmlMessages"); 21/03/13 Apache Camel 35
  • 36. Un bean pour traduire from("activemq:Incoming”). beanRef("myBeanName", "someMethod"). to("activemq:Outgoing"); public class Foo { public String someMethod(String name, @XPath("/order/@id") String oid, @Header("JMSCorrelationID") String cid) { return “Hello “ + name; } } 21/03/13 Apache Camel 36
  • 37. Tests unitaires 21/03/13 Apache Camel 37
  • 38. Transactions ● Une erreur se produit 21/03/13 Apache Camel X 38
  • 39. Transactions ● Try ... Catch style from("activemq:incoming") .doTry() .marshal().jaxb() .to("mq:QueueWithXmlMessages") .doCatch(Exception.class) .to("activemq:error") .end(); 21/03/13 Apache Camel 39
  • 40. Transactions ● Dead Letter Channel EIP w/ Redelivery errorHandler( deadLetterChannel("activemq:error") .maximumRedeliveries(5) .redeliveryDelay(5000) ); from("activemq:incoming") .marshal().jaxb() .to("mq:QueueWithXmlMessages"); 21/03/13 Apache Camel 40
  • 41. Transactions ● Interceptors 21/03/13 Apache Camel 41
  • 42. Autres fonctionnalités ● Interceptors ● Transaction ● Compensation ● Pluggable Security Framework – Apache Shiro – Spring Security ● Event Notification ● Route Policy ● Thread Model ● Asynchronous Non-Blocking Routing Engine 21/03/13 Apache Camel 42
  • 43. En résumé ● 50 EIP patterns ● 134 Components ● 19 Data formats ● 15 Expression Languages ● DSL in multiple flavors (Java, XML, Scala, Groovy) ● Automatic type conversion ● Strong bean support ● Test Kit ● Management (JMX, REST) ● Developer Web Console ● Error Handling ● Non-blocking Routing Engine Camel c'est puissant 21/03/13 Apache Camel 43
  • 44. Pimp my Camel ● Camel est extensible – On peut créer des composants (connecteurs) très simplement – http://camel.apache.org/writing-c omponents.html 21/03/13 Apache Camel 44
  • 46. Dompter le chameau ● Paradigmes de déploiement – Aucune dépendance à un conteneur – Léger – Encapsulable ● Possibilités de déploiement – Standalone – WAR – Spring – J2EE – JBI – OSGi – Cloud – Java Web Start – Spring Application 21/03/13 Apache Camel 46
  • 47. Dompter le chameau ● Conteneurs compatibles : – Apache ServiceMix – Apache ActiveMQ – Apache Tomcat – Jetty – JBoss – IBM WebSphere – Oracle WebLogic – Oracle OC4j – Glassfish – Google App Engine – ... 21/03/13 Apache Camel 47
  • 48. Quelques chiffres ● Né en 2007 ● 13677 commits on trunk (37 different committers) Quarterly visits on the Apache Camel website Number of commiters on the project Yearly posts on Camel user mailing list Number of Camel components out of the box Camel est sexy 21/03/13 Apache Camel 48
  • 49. Le matériel du chamelier Fuse IDE 21/03/13 Apache Camel 49
  • 50. Le matériel du chamelier Talend Open Studio 21/03/13 Apache Camel 50
  • 51. Le matériel du chamelier Yed / LibreOffice 21/03/13 Apache Camel 51
  • 52. Pourquoi utiliser Camel ● Masque la complexité ● Design de workflows métiers complexes ● Re-use des sous routes ● Interconnexions natives ● Événementiel et transactionnel ● Peu de lignes de code C'est nouveau, mais c'est beau ! Jean-Cloud est content. 21/03/13 Apache Camel 52
  • 53. WTF Mais, WTF !!! La complexité maîtrisée est remplacée par une complexité non maîtrisée du framework. 21/03/13 Apache Camel 53
  • 54. Bonus ● Il m'en reste un peu, je vous le rajoute ? – Mapping avec Dozer – http://dozer.sourceforge.net 21/03/13 Apache Camel 54
  • 55. Cas concret : Dozer
  • 56. Cas concret : Dozer
  • 57. Questions @XavMarin http://github.com/giwi http://giwi.free.fr « Si tout le monde a compris, c'est que je me suis mal exprimé » Alan Greenspan 57 21 mars 2013 – DTI/Architectures et méthodes appliquées