20. Splitter
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("file://orders").
splitter(body().tokenize("n")).
to("activemq:Order.Items");
}
}
20
21. Splitter Using XQuery
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("file://orders").
splitter().xquery("/order/items").
to("activemq:Order.Items");
}
}
21
22. Aggregator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("activemq:Inventory.Items").
aggregator().xpath("/order/@id").
to("activemq:Inventory.Order");
}
}
22
23. Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("file://incoming”).
to("xslt:com/acme/mytransform.xsl").
to("http://outgoing.com/foo");
}
}
23
24. Resequencer
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("direct:a”).
resequencer(header("JMSPriority")).
to("seda:b");
}
}
24
25. Throttler
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("seda:a”).
throttler(3).timePeriodMillis(30000).
to("seda:b");
}
}
25
26. Delayer
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("seda:a”).
delayer(header("JMSTimestamp", 3000).
to("seda:b");
}
}
26
27. Combine Patterns
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("seda:a”).
resequencer(header("JMSPriority")).
delayer(3000).
to("seda:b");
}
}
27
29. Bean
package com.mycompany.beans;
public class MyBean {
public void someMethod(String name) {
...
}
}
<camelContext
xmlns="http://activemq.apache.org/camel/schema/spring">
<package>com.mycompany.beans</package>
</camelContext>
29
30. Bean as a Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("activemq:Incoming”).
beanRef("myBean").
to("activemq:Outgoing");
}
}
30
31. Bean as a Message Translator
*With Method Name
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from("activemq:Incoming”).
beanRef("myBean", "someMethod").
to("activemq:Outgoing");
}
}
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="activemq:cheese")
public void onCheese(String name) {
...
}
}
34
35. Binding Method Arguments
public class Foo {
public void onCheese(
@XPath("/foo/bar") String name,
@Header("JMSCorrelationID") String id) {
...
}
}
http://activemq.apache.org/camel/bean-integration.html
35
36. Injecting Endpoints Into Beans
public class Foo {
@EndpointInject(uri="activemq:foo.bar")
ProducerTemplate producer;
public void doSomething() {
if (whatever) {
producer.sendBody("<hello>world!</hello>");
}
}
}
36
37. Spring Remoting - Server Side
<camelContext
xmlns="http://activemq.apache.org/camel/schema/spring">
<export id="sayService"
uri="activemq:MyService"
serviceRef="sayImpl"
serviceInterface="com.acme.MyServiceInterface"/>
</camelContext>
<bean id="sayImpl" class="com.acme.MyServiceImpl"/>
37
38. Spring Remoting - Client Side
<camelContext
xmlns="http://activemq.apache.org/camel/schema/spring">
<proxy id="sayService" serviceUrl="activemq:MyService"
serviceInterface="com.acme.MyServiceInterface"/>
</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("activemq:PurchaseOrders")
.correlate(xpath("/purchaseOrder/@id").stringResult());
ActivityBuilder invoice = activity("activemq:Invoices")
.correlate(xpath("/invoice/@purchaseOrderId").stringResult());
// now lets add some BAM rules
invoice.starts().after(purchaseOrder.completes())
.expectWithin(seconds(1))
.errorIfOver(seconds(2)).to("activemq:FailedProcesses");
}
}
41