diff --git a/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala b/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala index 1decc24eef..d80eedfd7a 100644 --- a/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala +++ b/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala @@ -2,20 +2,30 @@ package se.scalablesolutions.akka.camel.component import org.scalatest.{BeforeAndAfterEach, BeforeAndAfterAll, FeatureSpec} +import org.apache.camel.builder.RouteBuilder import se.scalablesolutions.akka.actor.Actor._ -import se.scalablesolutions.akka.camel._ import se.scalablesolutions.akka.actor.{ActorRegistry, ActiveObject} -import org.apache.camel.{ExchangePattern, Exchange, Processor} +import se.scalablesolutions.akka.camel._ +import org.apache.camel.impl.{DefaultCamelContext, SimpleRegistry} +import org.apache.camel.{ResolveEndpointFailedException, ExchangePattern, Exchange, Processor} /** * @author Martin Krasser */ class ActiveObjectComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll with BeforeAndAfterEach { + import ActiveObjectComponentFeatureTest._ + import CamelContextManager.template + override protected def beforeAll = { + val activePojo = ActiveObject.newInstance(classOf[Pojo]) // not a consumer val activePojoBase = ActiveObject.newInstance(classOf[PojoBase]) val activePojoIntf = ActiveObject.newInstance(classOf[PojoIntf], new PojoImpl) - CamelContextManager.init + val registry = new SimpleRegistry + registry.put("pojo", activePojo) + + CamelContextManager.init(new DefaultCamelContext(registry)) + CamelContextManager.context.addRoutes(new CustomRouteBuilder) CamelContextManager.start CamelContextManager.activeObjectRegistry.put("base", activePojoBase) @@ -29,7 +39,6 @@ class ActiveObjectComponentFeatureTest extends FeatureSpec with BeforeAndAfterAl feature("Communicate with an active object from a Camel application using active object endpoint URIs") { import ActiveObjectComponent.InternalSchema - import CamelContextManager.template import ExchangePattern._ scenario("in-out exchange with proxy created from interface and method returning String") { @@ -71,4 +80,26 @@ class ActiveObjectComponentFeatureTest extends FeatureSpec with BeforeAndAfterAl assert(result.getOut.getBody === null) } } + + feature("Communicate with an active object from a Camel application from a custom Camel route") { + + scenario("in-out exchange with externally registered active object") { + val result = template.requestBody("direct:test", "test") + assert(result === "foo: test") + } + + scenario("in-out exchange with internally registered active object not possible") { + intercept[ResolveEndpointFailedException] { + template.requestBodyAndHeader("active-object:intf?method=m2", "x", "test", "y") + } + } + } +} + +object ActiveObjectComponentFeatureTest { + class CustomRouteBuilder extends RouteBuilder { + def configure = { + from("direct:test").to("active-object:pojo?method=foo") + } + } } diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/Consumer10.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1.java similarity index 79% rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/Consumer10.java rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1.java index f08c486dac..ed29ac30e6 100644 --- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/Consumer10.java +++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/ConsumerPojo1.java @@ -8,15 +8,15 @@ import se.scalablesolutions.akka.actor.annotation.consume; /** * @author Martin Krasser */ -public class Consumer10 { +public class ConsumerPojo1 { - @consume("file:data/input2") + @consume("file:data/input/pojo") public void foo(String body) { System.out.println("Received message:"); System.out.println(body); } - @consume("jetty:http://0.0.0.0:8877/camel/active") + @consume("jetty:http://0.0.0.0:8877/camel/pojo") public String bar(@Body String body, @Header("name") String header) { return String.format("body=%s header=%s", body, header); } diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteActiveObject1.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1.java similarity index 92% rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteActiveObject1.java rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1.java index 695aa148f4..0cf22a3e62 100644 --- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteActiveObject1.java +++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo1.java @@ -8,7 +8,7 @@ import se.scalablesolutions.akka.actor.annotation.consume; /** * @author Martin Krasser */ -public class RemoteActiveObject1 { +public class RemoteConsumerPojo1 { @consume("jetty:http://localhost:6644/remote-active-object-1") public String foo(@Body String body, @Header("name") String header) { diff --git a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteActiveObject2.java b/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo2.java similarity index 92% rename from akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteActiveObject2.java rename to akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo2.java index 210a72d2f8..fc2f391233 100644 --- a/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteActiveObject2.java +++ b/akka-samples/akka-sample-camel/src/main/java/sample/camel/RemoteConsumerPojo2.java @@ -7,7 +7,7 @@ import se.scalablesolutions.akka.actor.annotation.consume; /** * @author Martin Krasser */ -public class RemoteActiveObject2 { +public class RemoteConsumerPojo2 { @consume("jetty:http://localhost:6644/remote-active-object-2") public String foo(@Body String body, @Header("name") String header) { diff --git a/akka-samples/akka-sample-camel/src/main/resources/sample-camel-context.xml b/akka-samples/akka-sample-camel/src/main/resources/context-boot.xml similarity index 100% rename from akka-samples/akka-sample-camel/src/main/resources/sample-camel-context.xml rename to akka-samples/akka-sample-camel/src/main/resources/context-boot.xml diff --git a/akka-samples/akka-sample-camel/src/main/scala/Application1.scala b/akka-samples/akka-sample-camel/src/main/scala/ClientApplication.scala similarity index 70% rename from akka-samples/akka-sample-camel/src/main/scala/Application1.scala rename to akka-samples/akka-sample-camel/src/main/scala/ClientApplication.scala index 2b3c7b5db5..cf38267ab3 100644 --- a/akka-samples/akka-sample-camel/src/main/scala/Application1.scala +++ b/akka-samples/akka-sample-camel/src/main/scala/ClientApplication.scala @@ -2,13 +2,13 @@ package sample.camel import se.scalablesolutions.akka.actor.Actor._ import se.scalablesolutions.akka.camel.Message -import se.scalablesolutions.akka.remote.RemoteClient import se.scalablesolutions.akka.actor.{ActiveObject, Actor, ActorRef} +import se.scalablesolutions.akka.remote.{RemoteClient, RemoteClient} /** * @author Martin Krasser */ -object Application1 { +object ClientApplication { // // TODO: completion of example @@ -16,10 +16,10 @@ object Application1 { def main(args: Array[String]) { val actor1 = actorOf[RemoteActor1] - val actor2 = RemoteClient.actorFor("remote2", "localhost", 7777) + val actor2 = ClientApplication.actorFor("remote2", "localhost", 7777) - val actobj1 = ActiveObject.newRemoteInstance(classOf[RemoteActiveObject1], "localhost", 7777) - //val actobj2 = TODO: create reference to server-managed active object (RemoteActiveObject2) + val actobj1 = ActiveObject.newRemoteInstance(classOf[RemoteConsumerPojo1], "localhost", 7777) + //val actobj2 = TODO: create reference to server-managed active object (RemoteConsumerPojo2) actor1.start diff --git a/akka-samples/akka-sample-camel/src/main/scala/Application2.scala b/akka-samples/akka-sample-camel/src/main/scala/ServerApplication.scala similarity index 94% rename from akka-samples/akka-sample-camel/src/main/scala/Application2.scala rename to akka-samples/akka-sample-camel/src/main/scala/ServerApplication.scala index 411f7b96b4..d7267bc90d 100644 --- a/akka-samples/akka-sample-camel/src/main/scala/Application2.scala +++ b/akka-samples/akka-sample-camel/src/main/scala/ServerApplication.scala @@ -7,7 +7,7 @@ import se.scalablesolutions.akka.actor.Actor._ /** * @author Martin Krasser */ -object Application2 { +object ServerApplication { // // TODO: completion of example