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