package camelinaction;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.hazelcast.HazelcastConstants;
/**
* Route used by both foo and bar server.
* <p/>
* This route will expose a HTTP server on localhost port 8080 or 9090 and then increment an atomic counter
* on the clustered hazelcast data-grid. The HTTP server returns the current counter value.
*/
public class AtomicCounterRoute extends RouteBuilder {
private String name;
private int port;
public AtomicCounterRoute(String name, int port) {
this.name = name;
this.port = port;
}
@Override
public void configure() throws Exception {
// HTTP service
fromF("jetty:http://localhost:" + port)
// increase the atomic clustered counter from the hazelcast cache
.setHeader(HazelcastConstants.OBJECT_ID, constant("myCounter"))
.to("hazelcast:atomicvalue:Cache?hazelcastInstance=#hz&defaultOperation=increment")
// prepare http response
.log(name + ": counter is now ${body}")
.setHeader(Exchange.CONTENT_TYPE, constant("text/plain"))
.transform().simple("Atomic Counter is now ${body}\n");
}
}