This document provides an overview of Apache Camel and its capabilities for system integration and implementing enterprise integration patterns. It discusses how Camel can be used for message routing and transformations using various components and languages. It also provides examples of how common integration patterns like content-based routing, filtering, splitting, and aggregating can be implemented using Camel's fluent builder style.
20. Splitter
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file://ordersquot;).
splitter(body().tokenize(quot;nquot;)).
to(quot;activemq:Order.Itemsquot;);
}
}
20
21. Splitter Using XQuery
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file://ordersquot;).
splitter().xquery(quot;/order/itemsquot;).
to(quot;activemq:Order.Itemsquot;);
}
}
21
22. Aggregator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:Inventory.Itemsquot;).
aggregator().xpath(quot;/order/@idquot;).
to(quot;activemq:Inventory.Orderquot;);
}
}
22
23. Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file://incomingโ).
to(quot;xslt:com/acme/mytransform.xslquot;).
to(quot;http://outgoing.com/fooquot;);
}
}
23
24. Resequencer
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;direct:aโ).
resequencer(header(quot;JMSPriorityquot;)).
to(quot;seda:bquot;);
}
}
24
25. Throttler
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;seda:aโ).
throttler(3).timePeriodMillis(30000).
to(quot;seda:bquot;);
}
}
25
26. Delayer
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;seda:aโ).
delayer(header(quot;JMSTimestampquot;, 3000).
to(quot;seda:bquot;);
}
}
26
27. Combine Patterns
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;seda:aโ).
resequencer(header(quot;JMSPriorityquot;)).
delayer(3000).
to(quot;seda:bquot;);
}
}
27
29. Bean
package com.mycompany.beans;
public class MyBean {
public void someMethod(String name) {
...
}
}
<camelContext
xmlns=quot;http://activemq.apache.org/camel/schema/springquot;>
<package>com.mycompany.beans</package>
</camelContext>
29
30. Bean as a Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:Incomingโ).
beanRef(quot;myBeanquot;).
to(quot;activemq:Outgoingquot;);
}
}
30
31. Bean as a Message Translator
*With Method Name
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:Incomingโ).
beanRef(quot;myBeanquot;, quot;someMethodquot;).
to(quot;activemq:Outgoingquot;);
}
}
31
33. Type Conversion
@Converter
public class IOConverter {
@Converter
public static InputStream toInputStream(File file)
throws FileNotFoundException {
return new BufferedInputStream(
new FileInputStream(file));
}
}
33
34. Binding Beans to Camel Endpoints
public class Foo {
@MessageDriven(uri=quot;activemq:cheesequot;)
public void onCheese(String name) {
...
}
}
34
35. Binding Method Arguments
public class Foo {
public void onCheese(
@XPath(quot;/foo/barquot;) String name,
@Header(quot;JMSCorrelationIDquot;) String id) {
...
}
}
http://activemq.apache.org/camel/bean-integration.html
35
36. Injecting Endpoints Into Beans
public class Foo {
@EndpointInject(uri=quot;activemq:foo.barquot;)
ProducerTemplate producer;
public void doSomething() {
if (whatever) {
producer.sendBody(quot;<hello>world!</hello>quot;);
}
}
}
36
37. Spring Remoting - Server Side
<camelContext
xmlns=quot;http://activemq.apache.org/camel/schema/springquot;>
<export id=quot;sayServicequot;
uri=quot;activemq:MyServicequot;
serviceRef=quot;sayImplquot;
serviceInterface=quot;com.acme.MyServiceInterfacequot;/>
</camelContext>
<bean id=quot;sayImplquot; class=quot;com.acme.MyServiceImplquot;/>
37
38. Spring Remoting - Client Side
<camelContext
xmlns=quot;http://activemq.apache.org/camel/schema/springquot;>
<proxy id=quot;sayServicequot; serviceUrl=quot;activemq:MyServicequot;
serviceInterface=quot;com.acme.MyServiceInterfacequot;/>
</camelContext>
38
41. Business Activity Monitoring (BAM)
public class MyActivities extends ProcessBuilder {
public void configure() throws Exception {
// lets define some activities, correlating on an
// XPath query of the message body
ActivityBuilder purchaseOrder = activity(quot;activemq:PurchaseOrdersquot;)
.correlate(xpath(quot;/purchaseOrder/@idquot;).stringResult());
ActivityBuilder invoice = activity(quot;activemq:Invoicesquot;)
.correlate(xpath(quot;/invoice/@purchaseOrderIdquot;).stringResult());
// now lets add some BAM rules
invoice.starts().after(purchaseOrder.completes())
.expectWithin(seconds(1))
.errorIfOver(seconds(2)).to(quot;activemq:FailedProcessesquot;);
}
}
41