Your speaker
Christian Posta
Blog: http://christianposta.com/blog
Twitter: @christianposta
Email: christian@redhat.com
ceposta@apache.org
• Principal Consultant and Architect at Red Hat (FuseSource)
• Based in Phoenix, AZ
• Committer on Apache Camel, ActiveMQ, Apollo
• PMC on ActiveMQ
• Author: Essential Camel Components DZone Refcard
3
Why is integration hard?
• Off the shelf? Home Grown? Acquisition?
• Platforms
• Protocols / Data Formats
• Data Formats
• Timing
• Organizational mismatch
8
Apache Camel
Apache Camel is an open-source,
light-weight, integration library.
Use Camel to integrate disparate systems
that speak different protocols and data formats
16
Why the name Camel?
• Can carry more weight that other
beasts?
• James fancied the cigarettes?
• A horse designed by committee?
17
Concise
Application
Messaging
Exchange
Language
What is Apache Camel?
• Light-weight integration library
• Enterprise Integration Patterns
• Components
• Domain Specific Language
• Routing and Mediation (like an ESB?)
• Runs in any container (or stand alone)
18
Not an ESB…per-se…
• An integration library
•
•
•
Routing (content-based, dynamic, rules-engine…)
Mediation (xformations, protocols, wire transports…)
DSL
• Can build an ESB (real ESB.. Not just box in the
middle)
• Many options based on Camel!
•
•
•
•
19
Fuse ESB / JBoss Fuse
Apache ServiceMix (Karaf + Camel)
Talend, wso2, others…
Not tied to vendor lock-in and commercial licenses!
Very popular
• Used at top companies in finance, shipping,
retail/e-retail, health care, airline
reservations, etc
• FAA: http://fusesource.com/collateral/131
• Sabre: http://fusesource.com/collateral/139
• CERN: http://fusesource.com/collateral/103
27
Open source
• Apache Software Foundation
• ASL v 2.0 Licensed
• Vibrant community
•
•
28
Jira, mailing list, github
Lots of contributions! Check out the components!
Pipes and Filters
• Step by Step – “Processors” in Camel terminology
• Complex processing – “Routes”
• Flexible
• Testing
• Reuse
29
Camel Routes
• Defined in Java, XML, Scala, Groovy
• Step by step processing of a message:
• Consumer – Listen for incoming message
• Zero or more “filters” or Processors
• Producer – Send outgoing message
• Number of processing filters, or “Processors” in
Camel-speak
• EIPs
• Tranform, redirect, enrich
30
Domain Specific Language
• Domain specific (integration)
• Used to build and describe Camel Routes
• Embedded within a general programming language
• Java, Spring XML, Scala, Groovy
• Take advantage of existing tools
• Fluent builders (builder pattern…)
•
31
from(“..”).enrich(“…”).filter(“..”).to(“…”);
Java DSL
public class OrderProcessorRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from(“activemq:orders”)
.choice()
.when(header(“customer-rating”).isEqualTo(“gold”))
.to(“ibmmq:topic:specialCustomer”)
.otherwise()
.to(“ftp://user@host/orders/regularCustomers”)
.end()
.log(“received new order ${body.orderId}”)
.to(“ibatis:storeOrder?statementType=Insert”);
}
}
32
Spring XML DSL
<route id=“processOrders”>
<from uri=“activemq:orders”/>
<choice>
<when>
<simple>${header.customer-rating} == ‘gold’</simple>
<to uri=“ibmmq:topic:specialCustomer”>
</when>
<otherwise>
<to uri=“ftp://user@host/orders/regularCustomers” />
</otherwise>
</choice>
<log message=“received new order ${body.orderId}”/>
<to uri=“ibatis:storeOrder?statementType=Insert”/>
</route>
33
Enterprise Integration Patterns
• Message Routing
• Transformation
• Aggregation
• Splitting
• Resequencer
• Routing Slip
• Enricher
• All from the book!
34
Components
• Prepackaged bits of code
• Highly configurable
• Maximum interoperability
• Used to build “Adapters” to existing systems
• Don’t reinvent the wheel and end up with a box
35
Components
http://camel.apache.org/components.html
• ActiveMQ, Websphere, Weblogic (JMS)
• AMQP
• HTTP
• ATOM feeds
• IRC
• AWS (S3, SQS, SNS, others)
• jclouds
• Bean
• JDBC
• Cache (EHCache)
• Jetty
• CXF (JAX-WS, JAX-RS)
• Twitter
• EJB
• MQTT
• Drools
• MyBatis
• File
• JPA
• FTP
• Spring Integration
• Google App Engine
36
• GMail
• Spring Web Services
To see list of all
components!!
Components
• URI format:
•
scheme:localPart[?options]
•
scheme: identifies the “component”
•
localPart: specific to the component
•
options: is a list of name-value pairs
• Creates endpoints based on configuration
• Route endpoint “factories”
• Integrate with Camel Routes by creating producer/
consumer endpoints
37
Another Example
public class MyExampleRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from(“aws-sqs://demo?defaultVisibilityTimeout=2”)
}
}
38
.setHeader(“type”).jsonpath(“$[‘type’]”)
.filter(simple(“${header.type} == ‘login’”)
.to(“jms:quote”);
Test Framework
• Powerful way to test your Camel routes
•
http://camel.apache.org/mock.html
• Uses Mocks
• Mocks vs Stubs?
•
http://martinfowler.com/articles/mocksArentStubs.html
• Provides declarative testing mechanism
• Declare
• Test
• Assert
39