Getting Started with Apache Camel.
Presentation and Workshop at
BarcelonaJUG, January 2014

Claus Ibsen (@davsclaus)
Principal Software Engineer, Red Hat
1

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

2

History of Camel

More Information
PUBLIC PRESENTATION | CLAUS IBSEN
Your Speaker
●

Principal Software Engineer at Red Hat

●

Apache Camel
●

6 years working with Camel

●

Author of Camel in Action book

●

Contact
●
●

Twitter: @davsclaus

●

Blog: http://davsclaus.com

●

3

EMail: cibsen@redhat.com

Linkedin: http://www.linkedin.com/in/davsclaus

PUBLIC PRESENTATION | CLAUS IBSEN
Why the name Camel?

4

PUBLIC PRESENTATION | CLAUS IBSEN
Why the name Camel?

Because Camel is
easy to remember and type ...
5

PUBLIC PRESENTATION | CLAUS IBSEN
Why the name Camel?

… or the creator used to smoke cigarets!
http://camel.apache.org/why-the-name-camel.html
6

PUBLIC PRESENTATION | CLAUS IBSEN
Camel's parents

7

PUBLIC PRESENTATION | CLAUS IBSEN
Camel's parents

James Strachan (creator of Camel)
Gregor Hohpe (author of EIP book)

8

PUBLIC PRESENTATION | CLAUS IBSEN
The birth of Camel
●

9

First Commit

PUBLIC PRESENTATION | CLAUS IBSEN
The birth of Camel
●

10

My first Commit

PUBLIC PRESENTATION | CLAUS IBSEN
The birth of Camel
●

First Release
●

Apache Camel 1.0
June 2007

http://www.davsclaus.com/2012/05/looking-at-impressive-first-apache.html
11

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

12

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

13

Quote from the website

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Why do we need integration?
●

●

Critical for your business to integrate

Why Integration Framework?
●
●

You can focus on business problem

●

14

Framework do the heavy lifting
Not "reinventing the wheel"

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

What is Enterprise Integration Patterns?

It's a book
15

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Enterprise Integration Patterns

http://camel.apache.org/eip
16

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

17

EIP - Content Based Router

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

from newOrder

18

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

from newOrder
choice

19

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

from newOrder
choice
when isWidget to widget

20

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

from newOrder
choice
when isWidget to widget
otherwise to gadget

21

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

from(newOrder)
choice
when(isWidget) to(widget)
otherwise to(gadget)

22

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);

23

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

Endpoint newOrder = endpoint("activemq:queue:newOrder");

from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);

24

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");

from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);

25

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?

Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");
Endpoint widget = endpoint("activemq:queue:widget");
Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);

26

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Java Code

public void configure() throws Exception {
Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");
Endpoint widget = endpoint("activemq:queue:widget");
Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget)
.end();
}
27

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Java Code
import org.apache.camel.Endpoint;
import org.apache.camel.Predicate;
import org.apache.camel.builder.RouteBuilder;
public class MyRoute extends RouteBuilder {
public void configure() throws Exception {
Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");
Endpoint widget = endpoint("activemq:queue:widget");
Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget)
.end();
}
}

28

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Camel Java DSL
import org.apache.camel.builder.RouteBuilder;
public class MyRoute extends RouteBuilder {
public void configure() throws Exception {
from("activemq:queue:newOrder")
.choice()
.when(xpath("/order/product = 'widget'"))
.to("activemq:queue:widget")
.otherwise()
.to("activemq:queue:gadget")
.end();
}
}

29

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Camel XML DSL
<route>
<from uri="activemq:queue:newOrder"/>
<choice>
<when>
<xpath>/order/product = 'widget'</xpath>
<to uri="activemq:queue:widget"/>
</when>
<otherwise>
<to uri="activemq:queue:gadget"/>
</otherwise>
</choice>
</route>

30

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Endpoint as URIs

use file instead

<route>
<from uri="file:inbox/orders"/>
<choice>
<when>
<xpath>/order/product = 'widget'</xpath>
<to uri="activemq:queue:widget"/>
</when>
<otherwise>
<to uri="activemq:queue:gadget"/>
</otherwise>
</choice>
</route>

31

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
parameters
●

Endpoint as URIs
<route>
<from uri="file:inbox/orders?delete=true"/>
<choice>
<when>
<xpath>/order/product = 'widget'</xpath>
<to uri="activemq:queue:widget"/>
</when>
<otherwise>
<to uri="activemq:queue:gadget"/>
</otherwise>
</choice>
</route>

32

PUBLIC PRESENTATION | CLAUS IBSEN
Standard Java or XML
●

33

Java DSL is just Java

PUBLIC PRESENTATION | CLAUS IBSEN
Standard Java or XML
●

XML DSL is just XML

●

34

… with XSD schema for validation/tooling

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

35

Camel's Architecture

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
150+ Components

36

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
150+ Components

37

PUBLIC PRESENTATION | CLAUS IBSEN
What is Apache Camel?
●

Summary
●
●

Enterprise Integration Patterns (EIP)

●

Routing (using DSL)

●

Easy Configuration (endpoint as uri's)

●

Just Java or XML code

●

No Container Dependency

●

38

Integration Framework

A lot of components

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

39

PUBLIC PRESENTATION | CLAUS IBSEN
A Little Example
●

40

File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN
A Little Example
●

41

File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN
A Little Example
●

42

File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN
A Little Example
●

43

File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN
A Little Example
●

44

File Copier Example

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

45

PUBLIC PRESENTATION | CLAUS IBSEN
Riding Camel
●

Downloading Apache Camel
●

zip/tarball (approx 8mb)

http://camel.apache.org

46

PUBLIC PRESENTATION | CLAUS IBSEN
Riding Camel
●

Using Command Shell
●

●

47

Requires: Apache Maven

From Eclipse

PUBLIC PRESENTATION | CLAUS IBSEN
Riding Camel
●

Console Example

●

cd examples/camel-example-console

●

mvn compile exec:java

48

PUBLIC PRESENTATION | CLAUS IBSEN
Riding Camel
●

Twitter Example

●

cd examples/camel-example-twitter-websocket

●

mvn compile exec:java

49

http://localhost:9090/index.html

PUBLIC PRESENTATION | CLAUS IBSEN
Riding Camel
●

More examples ...

... and further details at website.
http://camel.apache.org/examples

50

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

51

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?

52

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

Enterprise Integration Patterns

http://camel.apache.org/eip
53

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

54

Pipes and Filters EIP

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

55

Pipes and Filters EIP

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

56

Recipient List EIP

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

57

Recipient List EIP

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

58

Splitter EIP

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
150+ Components

59

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
19 Data Formats

60

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
15 Expression Languages

61

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
5+ DSL in multiple languages
●
●

XML DSL (Spring and OSGi Blueprint)

●

Groovy DSL

●

Scala DSL

●

62

Java DSL

Kotlin DSL (work in progress)

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

Mixing Java and XML

●

●

63

Java DSL

Spring XML file

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

Mixing Java and XML
●

.. having both XML and Java routes

Java route

XML route
64

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

Multiple XML files

myCoolRoutes.xml
myOtherCoolRoutes.xml

myCamel.xml
65

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

Scanning on classpath for Java routes
●

●

66

… with packageScan

… supports excludes/includes

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

Scanning Spring ApplicationContext for Java routes
●

67

… with <contextScan/>

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

Scanning Spring ApplicationContext for Java routes
●

68

… and routes uses @Component

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

69

Type Converters

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

70

Writing Custom Type Converter

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

71

Bean as Message Translator

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

72

Bean as Message Translator

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

73

Working with beans

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

74

Working with beans

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

75

Working with beans

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
●

76

Working with beans

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
Test Kit
●

camel-test-spring

●

77

camel-test
camel-test-blueprint

camel-testng

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
Management
●
●

78

JMX
REST (w/ Jolokia)

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
Error Handling

79

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
try .. catch style

80

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
Dead Letter Channel (EIP style)

81

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
Dead Letter Channel (EIP style)

82

PUBLIC PRESENTATION | CLAUS IBSEN
What's in the box?
The Rest
●

Interceptors

●

Security

●

Route Policy

●

Type Converters

●

Transaction
●

Compensation as rollback

●
●

Thread management

●

Maven Tooling

●

83

Asynchronous non-blocking routing engine

... and much more
PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

84

PUBLIC PRESENTATION | CLAUS IBSEN
Deploying Camel
●

Deployment Strategy
●
●

●

No Container Dependency
Lightweight & Embeddable

Deployment Options
●
●

WAR

●

Spring

●

JEE

●

OSGi

●

85

Standalone

Cloud
PUBLIC PRESENTATION | CLAUS IBSEN
Camel as a Client
●

Java Client Application (no routes)

●

Example
●

86

Upload a file to a FTP server

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

87

PUBLIC PRESENTATION | CLAUS IBSEN
Creating new Camel Projects
●

Using Command Shell

●

From Eclipse

88

PUBLIC PRESENTATION | CLAUS IBSEN
Creating new Camel Projects
●

89

Maven Archetypes

PUBLIC PRESENTATION | CLAUS IBSEN
Creating new Camel Projects
●

90

camel-archetype-blueprint

PUBLIC PRESENTATION | CLAUS IBSEN
Creating new Camel Projects
●

Importing into Eclipse

Existing Maven Project

91

PUBLIC PRESENTATION | CLAUS IBSEN
Creating new Camel Projects
●

Testing Camel Projects

●

... from inside Eclipse

92

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

93

PUBLIC PRESENTATION | CLAUS IBSEN
What's not in the Camel box?
●

3rd party Apache Camel software

●

Commercial Support
●

●

User Stories
●

●

http://camel.apache.org/user-stories.html

External Components
●

●

http://camel.apache.org/commercial-camel-offerings.html

http://camel.apache.org/components.html (bottom)

Apache Camel Extra
●

94

https://code.google.com/a/apache-extras.org/p/camel-extra
PUBLIC PRESENTATION | CLAUS IBSEN
What's not in the Camel box?
Tooling – Eclipse Plugin – Fuse IDE

http://github.com/fusesource/fuseide
95

PUBLIC PRESENTATION | CLAUS IBSEN
What's not in the Camel box?
Tooling – Web console - HawtIO

http://hawt.io
96

PUBLIC PRESENTATION | CLAUS IBSEN
What's not in the Camel box?
●

Integration Platform

http://fabric8.io
97

PUBLIC PRESENTATION | CLAUS IBSEN
Agenda
●

History of Camel

●

What is Apache Camel?

●

A little Example

●

Riding Camel

●

What's in the Camel box?

●

Deploying Camel

●

Creating new Camel Projects

●

What's not in the Camel box?

●

More Information

98

PUBLIC PRESENTATION | CLAUS IBSEN
Where do I get more information?
●

Best Article covering what Apache Camel is
●

http://java.dzone.com/articles/open-source-integrationapache

Link to article from “Getting Started”

99

PUBLIC PRESENTATION | CLAUS IBSEN
Where do I get more information?
●

Try Camel Examples
●

●

Read other blogs and articles
●

●

100

http://camel.apache.org/examples.html

http://camel.apache.org/articles.html

Use the “search box” on the Camel front page

PUBLIC PRESENTATION | CLAUS IBSEN
Where do I get more information?
●

Use the mailing list / forum
●

●

Use stackoverflow
●

●

http://stackoverflow.com/questions/tagged/apache-camel

Use IRC chat
●

101

http://camel.apache.org/mailing-lists.html

http://camel.apache.org/irc-room.html

PUBLIC PRESENTATION | CLAUS IBSEN
Where do I get more information?
●

Buy the Camel in Action book

Use code ...
camel40
… for 40% discount

http://manning.com/ibsen/

102

PUBLIC PRESENTATION | CLAUS IBSEN
Where do I get more information?
●

.. and/or any of the other Camel books in the market

http://camel.apache.org/books

103

PUBLIC PRESENTATION | CLAUS IBSEN
Where do I get more information?
●

Attend the CamelOne conferences

The conference formerly known as CamelOne,
is now part of larger conference named DevNation

http://www.devnation.org

104

PUBLIC PRESENTATION | CLAUS IBSEN
Any Questions ?

●

Contact
●
EMail: cibsen@redhat.com / claus.ibsen@gmail.com
●
Twitter: @davsclaus
●
Blog: http://davsclaus.com
●
Linkedin: http://www.linkedin.com/in/davsclaus

105

PUBLIC PRESENTATION | CLAUS IBSEN

Getting started with Apache Camel presentation at BarcelonaJUG, january 2014

  • 1.
    Getting Started withApache Camel. Presentation and Workshop at BarcelonaJUG, January 2014 Claus Ibsen (@davsclaus) Principal Software Engineer, Red Hat 1 PUBLIC PRESENTATION | CLAUS IBSEN
  • 2.
    Agenda ● ● What is ApacheCamel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● 2 History of Camel More Information PUBLIC PRESENTATION | CLAUS IBSEN
  • 3.
    Your Speaker ● Principal SoftwareEngineer at Red Hat ● Apache Camel ● 6 years working with Camel ● Author of Camel in Action book ● Contact ● ● Twitter: @davsclaus ● Blog: http://davsclaus.com ● 3 EMail: cibsen@redhat.com Linkedin: http://www.linkedin.com/in/davsclaus PUBLIC PRESENTATION | CLAUS IBSEN
  • 4.
    Why the nameCamel? 4 PUBLIC PRESENTATION | CLAUS IBSEN
  • 5.
    Why the nameCamel? Because Camel is easy to remember and type ... 5 PUBLIC PRESENTATION | CLAUS IBSEN
  • 6.
    Why the nameCamel? … or the creator used to smoke cigarets! http://camel.apache.org/why-the-name-camel.html 6 PUBLIC PRESENTATION | CLAUS IBSEN
  • 7.
  • 8.
    Camel's parents James Strachan(creator of Camel) Gregor Hohpe (author of EIP book) 8 PUBLIC PRESENTATION | CLAUS IBSEN
  • 9.
    The birth ofCamel ● 9 First Commit PUBLIC PRESENTATION | CLAUS IBSEN
  • 10.
    The birth ofCamel ● 10 My first Commit PUBLIC PRESENTATION | CLAUS IBSEN
  • 11.
    The birth ofCamel ● First Release ● Apache Camel 1.0 June 2007 http://www.davsclaus.com/2012/05/looking-at-impressive-first-apache.html 11 PUBLIC PRESENTATION | CLAUS IBSEN
  • 12.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 12 PUBLIC PRESENTATION | CLAUS IBSEN
  • 13.
    What is ApacheCamel? ● 13 Quote from the website PUBLIC PRESENTATION | CLAUS IBSEN
  • 14.
    What is ApacheCamel? ● Why do we need integration? ● ● Critical for your business to integrate Why Integration Framework? ● ● You can focus on business problem ● 14 Framework do the heavy lifting Not "reinventing the wheel" PUBLIC PRESENTATION | CLAUS IBSEN
  • 15.
    What is ApacheCamel? ● What is Enterprise Integration Patterns? It's a book 15 PUBLIC PRESENTATION | CLAUS IBSEN
  • 16.
    What is ApacheCamel? ● Enterprise Integration Patterns http://camel.apache.org/eip 16 PUBLIC PRESENTATION | CLAUS IBSEN
  • 17.
    What is ApacheCamel? ● 17 EIP - Content Based Router PUBLIC PRESENTATION | CLAUS IBSEN
  • 18.
    What is ApacheCamel? from newOrder 18 PUBLIC PRESENTATION | CLAUS IBSEN
  • 19.
    What is ApacheCamel? from newOrder choice 19 PUBLIC PRESENTATION | CLAUS IBSEN
  • 20.
    What is ApacheCamel? from newOrder choice when isWidget to widget 20 PUBLIC PRESENTATION | CLAUS IBSEN
  • 21.
    What is ApacheCamel? from newOrder choice when isWidget to widget otherwise to gadget 21 PUBLIC PRESENTATION | CLAUS IBSEN
  • 22.
    What is ApacheCamel? from(newOrder) choice when(isWidget) to(widget) otherwise to(gadget) 22 PUBLIC PRESENTATION | CLAUS IBSEN
  • 23.
    What is ApacheCamel? from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget); 23 PUBLIC PRESENTATION | CLAUS IBSEN
  • 24.
    What is ApacheCamel? Endpoint newOrder = endpoint("activemq:queue:newOrder"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget); 24 PUBLIC PRESENTATION | CLAUS IBSEN
  • 25.
    What is ApacheCamel? Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget); 25 PUBLIC PRESENTATION | CLAUS IBSEN
  • 26.
    What is ApacheCamel? Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget); 26 PUBLIC PRESENTATION | CLAUS IBSEN
  • 27.
    What is ApacheCamel? ● Java Code public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); } 27 PUBLIC PRESENTATION | CLAUS IBSEN
  • 28.
    What is ApacheCamel? ● Java Code import org.apache.camel.Endpoint; import org.apache.camel.Predicate; import org.apache.camel.builder.RouteBuilder; public class MyRoute extends RouteBuilder { public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); } } 28 PUBLIC PRESENTATION | CLAUS IBSEN
  • 29.
    What is ApacheCamel? ● Camel Java DSL import org.apache.camel.builder.RouteBuilder; public class MyRoute extends RouteBuilder { public void configure() throws Exception { from("activemq:queue:newOrder") .choice() .when(xpath("/order/product = 'widget'")) .to("activemq:queue:widget") .otherwise() .to("activemq:queue:gadget") .end(); } } 29 PUBLIC PRESENTATION | CLAUS IBSEN
  • 30.
    What is ApacheCamel? ● Camel XML DSL <route> <from uri="activemq:queue:newOrder"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route> 30 PUBLIC PRESENTATION | CLAUS IBSEN
  • 31.
    What is ApacheCamel? ● Endpoint as URIs use file instead <route> <from uri="file:inbox/orders"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route> 31 PUBLIC PRESENTATION | CLAUS IBSEN
  • 32.
    What is ApacheCamel? parameters ● Endpoint as URIs <route> <from uri="file:inbox/orders?delete=true"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route> 32 PUBLIC PRESENTATION | CLAUS IBSEN
  • 33.
    Standard Java orXML ● 33 Java DSL is just Java PUBLIC PRESENTATION | CLAUS IBSEN
  • 34.
    Standard Java orXML ● XML DSL is just XML ● 34 … with XSD schema for validation/tooling PUBLIC PRESENTATION | CLAUS IBSEN
  • 35.
    What is ApacheCamel? ● 35 Camel's Architecture PUBLIC PRESENTATION | CLAUS IBSEN
  • 36.
    What is ApacheCamel? 150+ Components 36 PUBLIC PRESENTATION | CLAUS IBSEN
  • 37.
    What is ApacheCamel? 150+ Components 37 PUBLIC PRESENTATION | CLAUS IBSEN
  • 38.
    What is ApacheCamel? ● Summary ● ● Enterprise Integration Patterns (EIP) ● Routing (using DSL) ● Easy Configuration (endpoint as uri's) ● Just Java or XML code ● No Container Dependency ● 38 Integration Framework A lot of components PUBLIC PRESENTATION | CLAUS IBSEN
  • 39.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 39 PUBLIC PRESENTATION | CLAUS IBSEN
  • 40.
    A Little Example ● 40 FileCopier Example PUBLIC PRESENTATION | CLAUS IBSEN
  • 41.
    A Little Example ● 41 FileCopier Example PUBLIC PRESENTATION | CLAUS IBSEN
  • 42.
    A Little Example ● 42 FileCopier Example PUBLIC PRESENTATION | CLAUS IBSEN
  • 43.
    A Little Example ● 43 FileCopier Example PUBLIC PRESENTATION | CLAUS IBSEN
  • 44.
    A Little Example ● 44 FileCopier Example PUBLIC PRESENTATION | CLAUS IBSEN
  • 45.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 45 PUBLIC PRESENTATION | CLAUS IBSEN
  • 46.
    Riding Camel ● Downloading ApacheCamel ● zip/tarball (approx 8mb) http://camel.apache.org 46 PUBLIC PRESENTATION | CLAUS IBSEN
  • 47.
    Riding Camel ● Using CommandShell ● ● 47 Requires: Apache Maven From Eclipse PUBLIC PRESENTATION | CLAUS IBSEN
  • 48.
    Riding Camel ● Console Example ● cdexamples/camel-example-console ● mvn compile exec:java 48 PUBLIC PRESENTATION | CLAUS IBSEN
  • 49.
    Riding Camel ● Twitter Example ● cdexamples/camel-example-twitter-websocket ● mvn compile exec:java 49 http://localhost:9090/index.html PUBLIC PRESENTATION | CLAUS IBSEN
  • 50.
    Riding Camel ● More examples... ... and further details at website. http://camel.apache.org/examples 50 PUBLIC PRESENTATION | CLAUS IBSEN
  • 51.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 51 PUBLIC PRESENTATION | CLAUS IBSEN
  • 52.
    What's in thebox? 52 PUBLIC PRESENTATION | CLAUS IBSEN
  • 53.
    What's in thebox? ● Enterprise Integration Patterns http://camel.apache.org/eip 53 PUBLIC PRESENTATION | CLAUS IBSEN
  • 54.
    What's in thebox? ● 54 Pipes and Filters EIP PUBLIC PRESENTATION | CLAUS IBSEN
  • 55.
    What's in thebox? ● 55 Pipes and Filters EIP PUBLIC PRESENTATION | CLAUS IBSEN
  • 56.
    What's in thebox? ● 56 Recipient List EIP PUBLIC PRESENTATION | CLAUS IBSEN
  • 57.
    What's in thebox? ● 57 Recipient List EIP PUBLIC PRESENTATION | CLAUS IBSEN
  • 58.
    What's in thebox? ● 58 Splitter EIP PUBLIC PRESENTATION | CLAUS IBSEN
  • 59.
    What's in thebox? 150+ Components 59 PUBLIC PRESENTATION | CLAUS IBSEN
  • 60.
    What's in thebox? 19 Data Formats 60 PUBLIC PRESENTATION | CLAUS IBSEN
  • 61.
    What's in thebox? 15 Expression Languages 61 PUBLIC PRESENTATION | CLAUS IBSEN
  • 62.
    What's in thebox? 5+ DSL in multiple languages ● ● XML DSL (Spring and OSGi Blueprint) ● Groovy DSL ● Scala DSL ● 62 Java DSL Kotlin DSL (work in progress) PUBLIC PRESENTATION | CLAUS IBSEN
  • 63.
    What's in thebox? ● Mixing Java and XML ● ● 63 Java DSL Spring XML file PUBLIC PRESENTATION | CLAUS IBSEN
  • 64.
    What's in thebox? ● Mixing Java and XML ● .. having both XML and Java routes Java route XML route 64 PUBLIC PRESENTATION | CLAUS IBSEN
  • 65.
    What's in thebox? ● Multiple XML files myCoolRoutes.xml myOtherCoolRoutes.xml myCamel.xml 65 PUBLIC PRESENTATION | CLAUS IBSEN
  • 66.
    What's in thebox? ● Scanning on classpath for Java routes ● ● 66 … with packageScan … supports excludes/includes PUBLIC PRESENTATION | CLAUS IBSEN
  • 67.
    What's in thebox? ● Scanning Spring ApplicationContext for Java routes ● 67 … with <contextScan/> PUBLIC PRESENTATION | CLAUS IBSEN
  • 68.
    What's in thebox? ● Scanning Spring ApplicationContext for Java routes ● 68 … and routes uses @Component PUBLIC PRESENTATION | CLAUS IBSEN
  • 69.
    What's in thebox? ● 69 Type Converters PUBLIC PRESENTATION | CLAUS IBSEN
  • 70.
    What's in thebox? ● 70 Writing Custom Type Converter PUBLIC PRESENTATION | CLAUS IBSEN
  • 71.
    What's in thebox? ● 71 Bean as Message Translator PUBLIC PRESENTATION | CLAUS IBSEN
  • 72.
    What's in thebox? ● 72 Bean as Message Translator PUBLIC PRESENTATION | CLAUS IBSEN
  • 73.
    What's in thebox? ● 73 Working with beans PUBLIC PRESENTATION | CLAUS IBSEN
  • 74.
    What's in thebox? ● 74 Working with beans PUBLIC PRESENTATION | CLAUS IBSEN
  • 75.
    What's in thebox? ● 75 Working with beans PUBLIC PRESENTATION | CLAUS IBSEN
  • 76.
    What's in thebox? ● 76 Working with beans PUBLIC PRESENTATION | CLAUS IBSEN
  • 77.
    What's in thebox? Test Kit ● camel-test-spring ● 77 camel-test camel-test-blueprint camel-testng PUBLIC PRESENTATION | CLAUS IBSEN
  • 78.
    What's in thebox? Management ● ● 78 JMX REST (w/ Jolokia) PUBLIC PRESENTATION | CLAUS IBSEN
  • 79.
    What's in thebox? Error Handling 79 PUBLIC PRESENTATION | CLAUS IBSEN
  • 80.
    What's in thebox? try .. catch style 80 PUBLIC PRESENTATION | CLAUS IBSEN
  • 81.
    What's in thebox? Dead Letter Channel (EIP style) 81 PUBLIC PRESENTATION | CLAUS IBSEN
  • 82.
    What's in thebox? Dead Letter Channel (EIP style) 82 PUBLIC PRESENTATION | CLAUS IBSEN
  • 83.
    What's in thebox? The Rest ● Interceptors ● Security ● Route Policy ● Type Converters ● Transaction ● Compensation as rollback ● ● Thread management ● Maven Tooling ● 83 Asynchronous non-blocking routing engine ... and much more PUBLIC PRESENTATION | CLAUS IBSEN
  • 84.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 84 PUBLIC PRESENTATION | CLAUS IBSEN
  • 85.
    Deploying Camel ● Deployment Strategy ● ● ● NoContainer Dependency Lightweight & Embeddable Deployment Options ● ● WAR ● Spring ● JEE ● OSGi ● 85 Standalone Cloud PUBLIC PRESENTATION | CLAUS IBSEN
  • 86.
    Camel as aClient ● Java Client Application (no routes) ● Example ● 86 Upload a file to a FTP server PUBLIC PRESENTATION | CLAUS IBSEN
  • 87.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 87 PUBLIC PRESENTATION | CLAUS IBSEN
  • 88.
    Creating new CamelProjects ● Using Command Shell ● From Eclipse 88 PUBLIC PRESENTATION | CLAUS IBSEN
  • 89.
    Creating new CamelProjects ● 89 Maven Archetypes PUBLIC PRESENTATION | CLAUS IBSEN
  • 90.
    Creating new CamelProjects ● 90 camel-archetype-blueprint PUBLIC PRESENTATION | CLAUS IBSEN
  • 91.
    Creating new CamelProjects ● Importing into Eclipse Existing Maven Project 91 PUBLIC PRESENTATION | CLAUS IBSEN
  • 92.
    Creating new CamelProjects ● Testing Camel Projects ● ... from inside Eclipse 92 PUBLIC PRESENTATION | CLAUS IBSEN
  • 93.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 93 PUBLIC PRESENTATION | CLAUS IBSEN
  • 94.
    What's not inthe Camel box? ● 3rd party Apache Camel software ● Commercial Support ● ● User Stories ● ● http://camel.apache.org/user-stories.html External Components ● ● http://camel.apache.org/commercial-camel-offerings.html http://camel.apache.org/components.html (bottom) Apache Camel Extra ● 94 https://code.google.com/a/apache-extras.org/p/camel-extra PUBLIC PRESENTATION | CLAUS IBSEN
  • 95.
    What's not inthe Camel box? Tooling – Eclipse Plugin – Fuse IDE http://github.com/fusesource/fuseide 95 PUBLIC PRESENTATION | CLAUS IBSEN
  • 96.
    What's not inthe Camel box? Tooling – Web console - HawtIO http://hawt.io 96 PUBLIC PRESENTATION | CLAUS IBSEN
  • 97.
    What's not inthe Camel box? ● Integration Platform http://fabric8.io 97 PUBLIC PRESENTATION | CLAUS IBSEN
  • 98.
    Agenda ● History of Camel ● Whatis Apache Camel? ● A little Example ● Riding Camel ● What's in the Camel box? ● Deploying Camel ● Creating new Camel Projects ● What's not in the Camel box? ● More Information 98 PUBLIC PRESENTATION | CLAUS IBSEN
  • 99.
    Where do Iget more information? ● Best Article covering what Apache Camel is ● http://java.dzone.com/articles/open-source-integrationapache Link to article from “Getting Started” 99 PUBLIC PRESENTATION | CLAUS IBSEN
  • 100.
    Where do Iget more information? ● Try Camel Examples ● ● Read other blogs and articles ● ● 100 http://camel.apache.org/examples.html http://camel.apache.org/articles.html Use the “search box” on the Camel front page PUBLIC PRESENTATION | CLAUS IBSEN
  • 101.
    Where do Iget more information? ● Use the mailing list / forum ● ● Use stackoverflow ● ● http://stackoverflow.com/questions/tagged/apache-camel Use IRC chat ● 101 http://camel.apache.org/mailing-lists.html http://camel.apache.org/irc-room.html PUBLIC PRESENTATION | CLAUS IBSEN
  • 102.
    Where do Iget more information? ● Buy the Camel in Action book Use code ... camel40 … for 40% discount http://manning.com/ibsen/ 102 PUBLIC PRESENTATION | CLAUS IBSEN
  • 103.
    Where do Iget more information? ● .. and/or any of the other Camel books in the market http://camel.apache.org/books 103 PUBLIC PRESENTATION | CLAUS IBSEN
  • 104.
    Where do Iget more information? ● Attend the CamelOne conferences The conference formerly known as CamelOne, is now part of larger conference named DevNation http://www.devnation.org 104 PUBLIC PRESENTATION | CLAUS IBSEN
  • 105.
    Any Questions ? ● Contact ● EMail:cibsen@redhat.com / claus.ibsen@gmail.com ● Twitter: @davsclaus ● Blog: http://davsclaus.com ● Linkedin: http://www.linkedin.com/in/davsclaus 105 PUBLIC PRESENTATION | CLAUS IBSEN