FinistJug      versatile open-source integration framework                                           #FinistJUGhttp://came...
Sommaire       ●           Présentation       ●   EIP       ●           Chevaucher le chameau       ●           Dompter le...
Présentation  ●   Le cloud computing est à la mode  ●   Mais pas dans nos entreprises21/03/13           Apache Camel      ...
Présentation ●   Nous on a le Jean-Cloud computing                 On a acheté du MainFrame IBM parce que cétait ce       ...
Présentation●   Pourquoi avons nous des problèmes    dintégration ?    –   Nos applications sont bâties avec différentes b...
Présentation●    Approche SOA●    Chaque service est lié par l’ESB●    Séparation des responsabilités●    Pas d’adhérence ...
Présentation●    LESB est une couche basée sur des messages permettant de connecter    différentes applications qui ne son...
Présentation●   Framework java open source●   Permet dintégrer des systèmes hétérogène    facilement●   Basé sur des échan...
Camel●   Integration framework●   Enterprise Integration Patterns (EIP) (50 implémentés nativement)●   Routage et médiatio...
Sous le capot21/03/13        Apache Camel   10
Sous le capot21/03/13        Apache Camel   11
EIP ●   Enterprise Integration Patterns21/03/13            Apache Camel       12
EIP ●   Enterprise Integration Patterns21/03/13            Apache Camel   http://camel.apache.org/eip   13
EIP●   Enterprise Integration Pattern :    http://camel.apache.org/enterprise-integration-patterns.h    tml    –   Patron ...
EIP ●   Exemple           Apache ActiveMQ                  WebSphereMQ21/03/13                     Apache Camel           ...
EIP ●   Exemple                             Filter pattern           Apache ActiveMQ                    WebSphereMQ21/03/1...
Chevaucher le chameau21/03/13       Apache Camel   17
Chevaucher le chameau ●   Exemple                 A                                                      B                ...
Chevaucher le chameau ●   Code de cet exemple :     import org.apache.camel.builder.RouteBuilder;     public class FilterR...
Chevaucher le chameau ●   Content based router21/03/13           Apache Camel   20
Chevaucher le chameau  ●   Content based router (java DSL)from("activemq:NewOrders")  .choice()    .when().xpath("/order/p...
Chevaucher le chameau  ●   Content based router (XML DSL)<camelContext> <route>  <from uri="activemq:NewOrders"/>  <choice...
Chevaucher le chameau           Polling     Splitter   Normalizer       Service     Aggregator   Endpoint           Consum...
Chevaucher le chameau      from("file:inbox?move=.done")        .split().streaming().parallelProcessing()          .xpath(...
Camel cest cool21/03/13         Apache Camel   25
Connecteurs21/03/13       Apache Camel   26
Connecteurs ●   En entrée (timer) ●   En sortie (log) ●   En entrée / sortie (JMS, File, CXF) ●   Internes (Direct, SEDA, ...
Connecteurs ●    134 à ce jour     ahc              core-osgi       groovy              jaxb     amqp             core-xml...
Connecteurs ●   134 à ce jour     paxlogging sjms                       printer    smpp                                   ...
Connecteurs ●   Connectés au monde externe :     –     CXF, HTTP, FTP, File, JMS, … ●   Connecteurs internes     –     Dir...
Connecteurs ●   Exemple : copie de fichiers from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")  ht...
Connecteurs ●   Exemple : Web service SOAP  package org.giwi.camel.ws;  import javax.jws.WebParam;  import javax.jws.WebRe...
Connecteurs ●   Exemple : Web service SOAP  <?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframewo...
Connecteurs ●     Exemple : Web service SOAP  @Override  public void configure() throws Exception {     from("cxf:/helloBe...
Médiation ●   Langages dexpression :      –    Beanshell, Python, PHP, Javascript, EL,           Ruby, Groovy, Simple, SPE...
Un bean pour traduirefrom("activemq:Incoming”).  beanRef("myBeanName", "someMethod").   to("activemq:Outgoing"); public cl...
Tests unitaires21/03/13        Apache Camel   37
Transactions ●   Une erreur se produit21/03/13           Apache Camel                                  X   38
Transactions ●   Try ... Catch stylefrom("activemq:incoming")  .doTry()    .marshal().jaxb()    .to("mq:QueueWithXmlMessag...
Transactions ●   Dead Letter Channel EIP w/     RedeliveryerrorHandler(  deadLetterChannel("activemq:error")   .maximumRed...
Transactions ●   Interceptors21/03/13            Apache Camel   41
Autres fonctionnalités●   Interceptors●   Transaction●   Compensation●   Pluggable Security Framework    –   Apache Shiro ...
En résumé●    50 EIP patterns●   134 Components●    19 Data formats●   15 Expression Languages●   DSL in multiple flavors ...
Pimp my Camel●   Camel est extensible    –   On peut créer des composants        (connecteurs) très simplement    –   http...
Chevaucher le chameau21/03/13       Apache Camel   45
Dompter le chameau●   Paradigmes de déploiement    –   Aucune dépendance à un conteneur    –   Léger    –   Encapsulable● ...
Dompter le chameau                                 ●   Conteneurs                                     compatibles :       ...
Quelques chiffres                                                                                           ●   Né en 2007...
Le matériel du chamelier           Fuse IDE21/03/13              Apache Camel   49
Le matériel du chamelier   Talend Open Studio21/03/13                Apache Camel   50
Le matériel du chamelier      Yed / LibreOffice21/03/13                  Apache Camel   51
Pourquoi utiliser Camel●   Masque la complexité●   Design de workflows métiers    complexes●    Re-use des sous routes●   ...
WTF                                 Mais, WTF !!!                           La complexité maîtrisée est                   ...
Bonus ●   Il men reste un peu, je vous le rajoute ?      –    Mapping avec Dozer      –    http://dozer.sourceforge.net21/...
Cas concret : Dozer
Cas concret : Dozer
Questions@XavMarinhttp://github.com/giwihttp://giwi.free.fr                        « Si tout le monde a compris, cest que ...
Prochain SlideShare
Chargement dans…5
×

FinistJUG - Camel Presentation

3 843 vues

Publié le

A presentation of Apache Camel

Publié dans : Technologie
0 commentaire
4 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
3 843
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 886
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
4
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

FinistJUG - Camel Presentation

  1. 1. FinistJug versatile open-source integration framework #FinistJUGhttp://camel.apache.org/
  2. 2. Sommaire ● Présentation ● EIP ● Chevaucher le chameau ● Dompter le chameau ● Les camélidés en quelques chiffres ● Le matériel du chamelier ● Questions21/03/13 Apache Camel 2
  3. 3. Présentation ● Le cloud computing est à la mode ● Mais pas dans nos entreprises21/03/13 Apache Camel 3
  4. 4. Présentation ● Nous on a le Jean-Cloud computing On a acheté du MainFrame IBM parce que cétait ce quon faisait de mieux. Puis on a rencontré des gars dOracle 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 cest le bordel !21/03/13 Apache Camel 4
  5. 5. Présentation● Pourquoi avons nous des problèmes dintégration ? – Nos applications sont bâties avec différentes briques techniques – Nos briques utilisent différents protocoles déchange – Linté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 navons pas besoin de réinventer la roue21/03/13 Apache Camel 5
  6. 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. 7. Présentation● LESB est une couche basée sur des messages permettant de connecter différentes applications qui ne sont pas faites pour communiquer entre elles.● Il sappuie 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 lentreprise ou sur Internet. – La communication par messages : JMS, Web Services … 7 21 mars 2013 – DTI/Architectures et méthodes appliquées
  8. 8. Présentation● Framework java open source● Permet dinté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. 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 licensed21/03/13 Apache Camel 9
  10. 10. Sous le capot21/03/13 Apache Camel 10
  11. 11. Sous le capot21/03/13 Apache Camel 11
  12. 12. EIP ● Enterprise Integration Patterns21/03/13 Apache Camel 12
  13. 13. EIP ● Enterprise Integration Patterns21/03/13 Apache Camel http://camel.apache.org/eip 13
  14. 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 dune sous-route voire dune route ● Pouvoir associer une route à un pattern ● Pouvoir industrialiser la réalisation de plusieurs routes21/03/13 Apache Camel 14
  15. 15. EIP ● Exemple Apache ActiveMQ WebSphereMQ21/03/13 Apache Camel 15
  16. 16. EIP ● Exemple Filter pattern Apache ActiveMQ WebSphereMQ21/03/13 Apache Camel 16
  17. 17. Chevaucher le chameau21/03/13 Apache Camel 17
  18. 18. Chevaucher le chameau ● Exemple A B Filter pattern isWidget = xpath("/quote/product = ‘widget’"); from(A).filter(isWidget).to(B); Apache ActiveMQ WebSphereMQ21/03/13 Apache Camel 18
  19. 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. 20. Chevaucher le chameau ● Content based router21/03/13 Apache Camel 20
  21. 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. 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. 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 dordres – 3) Normaliser et traiter lordre – 4) Réassembler les ordres pour réaliser un compte rendu – 5) Envoyer le compte rendu21/03/13 Apache Camel 23
  24. 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 dun bean Spring comme ... endpoint } } 21/03/13 Apache Camel 24
  25. 25. Camel cest cool21/03/13 Apache Camel 25
  26. 26. Connecteurs21/03/13 Apache Camel 26
  27. 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. 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.html21/03/13 ftp Apache Camel 28 gae
  29. 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.html21/03/13 Apache Camel 29
  30. 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. 31. Connecteurs ● Exemple : copie de fichiers from("file://inputdir/?recursive=true&delete=true").to("file://outputdir") http://camel.apache.org/file2.html21/03/13 Apache Camel 31
  32. 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.html21/03/13 Apache Camel 32
  33. 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.html21/03/13 Apache Camel 33
  34. 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.html21/03/13 Apache Camel 34
  35. 35. Médiation ● Langages dexpression : – 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. 36. Un bean pour traduirefrom("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. 37. Tests unitaires21/03/13 Apache Camel 37
  38. 38. Transactions ● Une erreur se produit21/03/13 Apache Camel X 38
  39. 39. Transactions ● Try ... Catch stylefrom("activemq:incoming") .doTry() .marshal().jaxb() .to("mq:QueueWithXmlMessages") .doCatch(Exception.class) .to("activemq:error") .end();21/03/13 Apache Camel 39
  40. 40. Transactions ● Dead Letter Channel EIP w/ RedeliveryerrorHandler( deadLetterChannel("activemq:error") .maximumRedeliveries(5) .redeliveryDelay(5000));from("activemq:incoming") .marshal().jaxb() .to("mq:QueueWithXmlMessages");21/03/13 Apache Camel 40
  41. 41. Transactions ● Interceptors21/03/13 Apache Camel 41
  42. 42. Autres fonctionnalités● Interceptors● Transaction● Compensation● Pluggable Security Framework – Apache Shiro – Spring Security● Event Notification● Route Policy● Thread Model● Asynchronous Non-Blocking Routing Engine21/03/13 Apache Camel 42
  43. 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 cest puissant21/03/13 Apache Camel 43
  44. 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
  45. 45. Chevaucher le chameau21/03/13 Apache Camel 45
  46. 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 Application21/03/13 Apache Camel 46
  47. 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. 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. 49. Le matériel du chamelier Fuse IDE21/03/13 Apache Camel 49
  50. 50. Le matériel du chamelier Talend Open Studio21/03/13 Apache Camel 50
  51. 51. Le matériel du chamelier Yed / LibreOffice21/03/13 Apache Camel 51
  52. 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 Cest nouveau, mais cest beau ! Jean-Cloud est content.21/03/13 Apache Camel 52
  53. 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. 54. Bonus ● Il men reste un peu, je vous le rajoute ? – Mapping avec Dozer – http://dozer.sourceforge.net21/03/13 Apache Camel 54
  55. 55. Cas concret : Dozer
  56. 56. Cas concret : Dozer
  57. 57. Questions@XavMarinhttp://github.com/giwihttp://giwi.free.fr « Si tout le monde a compris, cest que je me suis mal exprimé » Alan Greenspan 57 21 mars 2013 – DTI/Architectures et méthodes appliquées

×