=doc #3689 Make activator templates for camel samples

* @rkuhn found the problems in the scala camel samples
  - HttpSample returns scrambled data
  - CustomRouteSample times out
This commit is contained in:
Patrik Nordwall 2013-11-15 16:28:14 +01:00
parent 362074177a
commit 23dd957ba2
47 changed files with 693 additions and 559 deletions

View file

@ -0,0 +1,21 @@
package sample.camel.http;
import akka.actor.ActorRef;
import akka.camel.javaapi.UntypedConsumerActor;
public class HttpConsumer extends UntypedConsumerActor {
private ActorRef producer;
public HttpConsumer(ActorRef producer) {
this.producer = producer;
}
public String getEndpointUri() {
return "jetty:http://0.0.0.0:8875/";
}
public void onReceive(Object message) {
producer.forward(message, getContext());
}
}

View file

@ -0,0 +1,43 @@
package sample.camel.http;
import akka.actor.ActorRef;
import akka.camel.CamelMessage;
import akka.camel.javaapi.UntypedProducerActor;
import org.apache.camel.Exchange;
import java.util.HashSet;
import java.util.Set;
public class HttpProducer extends UntypedProducerActor {
private ActorRef transformer;
public HttpProducer(ActorRef transformer) {
this.transformer = transformer;
}
public String getEndpointUri() {
// bridgeEndpoint=true makes the producer ignore the Exchange.HTTP_URI header,
// and use the endpoint's URI for request
return "jetty://http://akka.io/?bridgeEndpoint=true";
}
// before producing messages to endpoints, producer actors can pre-process
// them by overriding the onTransformOutgoingMessage method
@Override
public Object onTransformOutgoingMessage(Object message) {
if (message instanceof CamelMessage) {
CamelMessage camelMessage = (CamelMessage) message;
Set<String> httpPath = new HashSet<String>();
httpPath.add(Exchange.HTTP_PATH);
return camelMessage.withHeaders(camelMessage.getHeaders(httpPath));
} else
return super.onTransformOutgoingMessage(message);
}
// instead of replying to the initial sender, producer actors can implement custom
// response processing by overriding the onRouteResponse method
@Override
public void onRouteResponse(Object message) {
transformer.forward(message, getContext());
}
}

View file

@ -0,0 +1,15 @@
package sample.camel.http;
import akka.actor.*;
public class HttpSample {
public static void main(String[] args) {
ActorSystem system = ActorSystem.create("some-system");
final ActorRef httpTransformer = system.actorOf(Props.create(HttpTransformer.class));
final ActorRef httpProducer = system.actorOf(Props.create(HttpProducer.class, httpTransformer));
final ActorRef httpConsumer = system.actorOf(Props.create(HttpConsumer.class, httpProducer));
}
}

View file

@ -0,0 +1,25 @@
package sample.camel.http;
import akka.actor.Status;
import akka.actor.UntypedActor;
import akka.camel.CamelMessage;
import akka.dispatch.Mapper;
public class HttpTransformer extends UntypedActor {
public void onReceive(Object message) {
if (message instanceof CamelMessage) {
CamelMessage camelMessage = (CamelMessage) message;
CamelMessage replacedMessage = camelMessage.mapBody(new Mapper<Object, String>() {
@Override
public String apply(Object body) {
String text = new String((byte[]) body);
return text.replaceAll("Akka ", "AKKA ");
}
});
getSender().tell(replacedMessage, getSelf());
} else if (message instanceof Status.Failure) {
getSender().tell(message, getSelf());
} else
unhandled(message);
}
}

View file

@ -0,0 +1,18 @@
package sample.camel.quartz;
import akka.camel.CamelMessage;
import akka.camel.javaapi.UntypedConsumerActor;
public class MyQuartzActor extends UntypedConsumerActor {
public String getEndpointUri() {
return "quartz://example?cron=0/2+*+*+*+*+?";
}
public void onReceive(Object message) {
if (message instanceof CamelMessage) {
CamelMessage camelMessage = (CamelMessage) message;
System.out.println(String.format("==============> received %s ", camelMessage));
} else
unhandled(message);
}
}

View file

@ -0,0 +1,11 @@
package sample.camel.quartz;
import akka.actor.ActorSystem;
import akka.actor.Props;
public class QuartzSample {
public static void main(String[] args) {
ActorSystem system = ActorSystem.create("my-quartz-system");
system.actorOf(Props.create(MyQuartzActor.class));
}
}

View file

@ -0,0 +1,15 @@
package sample.camel.route;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
public class CustomRouteBuilder extends RouteBuilder {
public void configure() throws Exception {
from("direct:welcome").process(new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.getOut().setBody(String.format("Welcome %s", exchange.getIn().getBody()));
}
});
}
}

View file

@ -0,0 +1,19 @@
package sample.camel.route;
import akka.actor.*;
import akka.camel.CamelExtension;
public class CustomRouteSample {
@SuppressWarnings("unused")
public static void main(String[] args) {
try {
ActorSystem system = ActorSystem.create("some-system");
final ActorRef producer = system.actorOf(Props.create(RouteProducer.class));
final ActorRef mediator = system.actorOf(Props.create(RouteTransformer.class, producer));
final ActorRef consumer = system.actorOf(Props.create(RouteConsumer.class, mediator));
CamelExtension.get(system).context().addRoutes(new CustomRouteBuilder());
} catch (Exception e) {
e.printStackTrace();
}
}
}

View file

@ -0,0 +1,27 @@
package sample.camel.route;
import akka.actor.ActorRef;
import akka.camel.CamelMessage;
import akka.camel.javaapi.UntypedConsumerActor;
public class RouteConsumer extends UntypedConsumerActor {
private ActorRef transformer;
public RouteConsumer(ActorRef transformer) {
this.transformer = transformer;
}
public String getEndpointUri() {
return "jetty:http://0.0.0.0:8877/camel/welcome";
}
public void onReceive(Object message) {
if (message instanceof CamelMessage) {
CamelMessage camelMessage = (CamelMessage) message;
// Forward a string representation of the message body to transformer
String body = camelMessage.getBodyAs(String.class, getCamelContext());
transformer.forward(camelMessage.withBody(body), getContext());
} else
unhandled(message);
}
}

View file

@ -0,0 +1,9 @@
package sample.camel.route;
import akka.camel.javaapi.UntypedProducerActor;
public class RouteProducer extends UntypedProducerActor {
public String getEndpointUri() {
return "direct:welcome";
}
}

View file

@ -0,0 +1,30 @@
package sample.camel.route;
import akka.actor.ActorRef;
import akka.actor.UntypedActor;
import akka.camel.CamelMessage;
import akka.dispatch.Mapper;
public class RouteTransformer extends UntypedActor {
private ActorRef producer;
public RouteTransformer(ActorRef producer) {
this.producer = producer;
}
public void onReceive(Object message) {
if (message instanceof CamelMessage) {
// example: transform message body "foo" to "- foo -" and forward result
// to producer
CamelMessage camelMessage = (CamelMessage) message;
CamelMessage transformedMessage = camelMessage.mapBody(new Mapper<String, String>() {
@Override
public String apply(String body) {
return String.format("- %s -", body);
}
});
producer.forward(transformedMessage, getContext());
} else
unhandled(message);
}
}