diff --git a/akka-actor/src/main/scala/util/JavaAPI.scala b/akka-actor/src/main/scala/util/JavaAPI.scala index 0fa7abd738..248eaf7fbe 100644 --- a/akka-actor/src/main/scala/util/JavaAPI.scala +++ b/akka-actor/src/main/scala/util/JavaAPI.scala @@ -33,6 +33,7 @@ object JavaAPI { sealed abstract class Option[A] extends java.lang.Iterable[A] { def get: A def isDefined: Boolean + def asScala: scala.Option[A] } /** @@ -44,11 +45,10 @@ object JavaAPI { final case class Some[A](v: A) extends Option[A] { import scala.collection.JavaConversions._ - val sv = scala.Some(v) - - def get = sv.get - def iterator = sv.iterator + def get = v + def iterator = Iterator.single(v) def isDefined = true + def asScala = scala.Some(v) } /** @@ -60,11 +60,16 @@ object JavaAPI { import scala.collection.JavaConversions._ def get = throw new NoSuchElementException("None.get") - def iterator = scala.None.iterator + def iterator = Iterator.empty def isDefined = false + def asScala = scala.None } def some[A](v: A) = Some(v) def none[A] = None[A] + + implicit def java2ScalaOption[A](o: Option[A]): scala.Option[A] = o.asScala + implicit def scala2JavaOption[A](o: scala.Option[A]): Option[A] = + if (o.isDefined) Some(o.get) else None[A] } diff --git a/akka-camel/src/main/scala/CamelContextLifecycle.scala b/akka-camel/src/main/scala/CamelContextLifecycle.scala index 32bb386dee..8348ba4590 100644 --- a/akka-camel/src/main/scala/CamelContextLifecycle.scala +++ b/akka-camel/src/main/scala/CamelContextLifecycle.scala @@ -11,6 +11,7 @@ import org.apache.camel.impl.DefaultCamelContext import se.scalablesolutions.akka.camel.component.TypedActorComponent import se.scalablesolutions.akka.util.Logging +import se.scalablesolutions.akka.util.JavaAPI.{Option => JOption} /** * Manages the lifecycle of a CamelContext. Allowed transitions are @@ -18,12 +19,12 @@ import se.scalablesolutions.akka.util.Logging * * @author Martin Krasser */ -trait CamelContextLifecycle extends Logging { +trait CamelContextLifecycle extends CamelContextLifecycleJavaAPI with Logging { // TODO: enforce correct state transitions // valid: init -> start -> stop -> init ... - private var _context: CamelContext = _ - private var _template: ProducerTemplate = _ + private var _context: Option[CamelContext] = None + private var _template: Option[ProducerTemplate] = None private var _initialized = false private var _started = false @@ -40,25 +41,25 @@ trait CamelContextLifecycle extends Logging { private[camel] var typedActorRegistry: Map[String, AnyRef] = _ /** - * Returns the managed CamelContext. + * Returns Some(CamelContext) if CamelContextLifecycle + * has been initialized, otherwise None. */ - protected def context: CamelContext = _context + protected def context: Option[CamelContext] = _context /** - * Returns the managed ProducerTemplate. + * Returns Some(ProducerTemplate) if CamelContextLifecycle + * has been initialized, otherwise None. */ - protected def template: ProducerTemplate = _template + protected def template: Option[ProducerTemplate] = _template - /** - * Sets the managed CamelContext. - */ - protected def context_= (context: CamelContext) { _context = context } - - /** - * Sets the managed ProducerTemplate. - */ - protected def template_= (template: ProducerTemplate) { _template = template } + def mandatoryContext = + if (context.isDefined) context.get + else throw new IllegalStateException("no current CamelContext") + def mandatoryTemplate = + if (template.isDefined) template.get + else throw new IllegalStateException("no current ProducerTemplate") + def initialized = _initialized def started = _started @@ -66,21 +67,30 @@ trait CamelContextLifecycle extends Logging { * Starts the CamelContext and an associated ProducerTemplate. */ def start = { - context.start - template.start - _started = true - log.info("Camel context started") + for { + c <- context + t <- template + } { + c.start + t.start + _started = true + log.info("Camel context started") + } } /** * Stops the CamelContext and the associated ProducerTemplate. */ def stop = { - template.stop - context.stop - _initialized = false - _started = false - log.info("Camel context stopped") + for { + t <- template + c <- context + } { + t.stop + c.stop + _started = false + log.info("Camel context stopped") + } } /** @@ -98,19 +108,50 @@ trait CamelContextLifecycle extends Logging { def init(context: CamelContext) { this.typedActorComponent = new TypedActorComponent this.typedActorRegistry = typedActorComponent.typedActorRegistry - this.context = context - this.context.setStreamCaching(true) - this.context.addComponent(TypedActorComponent.InternalSchema, typedActorComponent) - this.template = context.createProducerTemplate + + context.setStreamCaching(true) + context.addComponent(TypedActorComponent.InternalSchema, typedActorComponent) + + this._context = Some(context) + this._template = Some(context.createProducerTemplate) + _initialized = true log.info("Camel context initialized") } } +/** + * Java API for CamelContextLifecycle. + * + * @author Martin Krasser + */ +trait CamelContextLifecycleJavaAPI { this: CamelContextLifecycle => + /** + * Returns Some(CamelContext) if CamelContextLifecycle + * has been initialized, otherwise None. + */ + def getContext: JOption[CamelContext] = context + + /** + * Returns Some(ProducerTemplate) if CamelContextLifecycle + * has been initialized, otherwise None. + */ + def getTemplate: JOption[ProducerTemplate] = template +} + /** * Manages a global CamelContext and an associated ProducerTemplate. */ -object CamelContextManager extends CamelContextLifecycle { - override def context: CamelContext = super.context - override def template: ProducerTemplate = super.template +object CamelContextManager extends CamelContextLifecycle with CamelContextLifecycleJavaAPI { + /** + * Returns Some(CamelContext) if CamelContextLifecycle + * has been initialized, otherwise None. + */ + override def context: Option[CamelContext] = super.context + + /** + * Returns Some(ProducerTemplate) if CamelContextLifecycle + * has been initialized, otherwise None. + */ + override def template: Option[ProducerTemplate] = super.template } diff --git a/akka-camel/src/main/scala/CamelService.scala b/akka-camel/src/main/scala/CamelService.scala index 3e4097ebcf..3d6705da00 100644 --- a/akka-camel/src/main/scala/CamelService.scala +++ b/akka-camel/src/main/scala/CamelService.scala @@ -11,7 +11,7 @@ import se.scalablesolutions.akka.actor.Actor._ import se.scalablesolutions.akka.actor.{AspectInitRegistry, ActorRegistry} import se.scalablesolutions.akka.config.Config._ import se.scalablesolutions.akka.util.{Logging, Bootable} -import se.scalablesolutions.akka.util.JavaAPI.{Option => JOption, Some => JSome, None => JNone} +import se.scalablesolutions.akka.util.JavaAPI.{Option => JOption} /** * Publishes (untyped) consumer actors and typed consumer actors via Camel endpoints. Actors @@ -116,7 +116,7 @@ trait CamelService extends Bootable with Logging { * * @author Martin Krasser */ -object CamelServiceManager { +object CamelServiceManager extends CamelServiceManagerJavaAPI { /** * The current (optional) CamelService. Is defined when a CamelService has been started. @@ -145,14 +145,7 @@ object CamelServiceManager { */ def service = _current - /** - * Returns the current CamelService. - * - * @throws IllegalStateException if there's no current CamelService. - */ - def getService: JOption[CamelService] = { - if (_current.isDefined) JSome(_current.get) else JNone[CamelService] - } + // TODO: add mandatoryService (throwing exception if service is not defined) private[camel] def register(service: CamelService) = if (_current.isDefined) throw new IllegalStateException("current CamelService already registered") @@ -163,6 +156,21 @@ object CamelServiceManager { else throw new IllegalStateException("only current CamelService can be unregistered") } +/** + * Java API for CamelServiceManager. + * + * @author Martin Krasser + */ +trait CamelServiceManagerJavaAPI { + /** + * Returns Some(CamelService) if CamelService + * has been started, None otherwise. + *

+ * Java API + */ + def getService: JOption[CamelService] = CamelServiceManager.service +} + /** * @author Martin Krasser */ diff --git a/akka-camel/src/main/scala/ConsumerPublisher.scala b/akka-camel/src/main/scala/ConsumerPublisher.scala index dfc1510ea6..f1bb5d7ab3 100644 --- a/akka-camel/src/main/scala/ConsumerPublisher.scala +++ b/akka-camel/src/main/scala/ConsumerPublisher.scala @@ -23,7 +23,7 @@ private[camel] object ConsumerPublisher extends Logging { * Creates a route to the registered consumer actor. */ def handleConsumerRegistered(event: ConsumerRegistered) { - CamelContextManager.context.addRoutes(new ConsumerActorRoute(event.uri, event.uuid, event.blocking)) + CamelContextManager.mandatoryContext.addRoutes(new ConsumerActorRoute(event.uri, event.uuid, event.blocking)) log.info("published actor %s at endpoint %s" format (event.actorRef, event.uri)) } @@ -31,7 +31,7 @@ private[camel] object ConsumerPublisher extends Logging { * Stops the route to the already un-registered consumer actor. */ def handleConsumerUnregistered(event: ConsumerUnregistered) { - CamelContextManager.context.stopRoute(event.uuid.toString) + CamelContextManager.mandatoryContext.stopRoute(event.uuid.toString) log.info("unpublished actor %s from endpoint %s" format (event.actorRef, event.uri)) } @@ -43,7 +43,7 @@ private[camel] object ConsumerPublisher extends Logging { val objectId = "%s_%s" format (event.init.actorRef.uuid, targetMethod) CamelContextManager.typedActorRegistry.put(objectId, event.typedActor) - CamelContextManager.context.addRoutes(new ConsumerMethodRoute(event.uri, objectId, targetMethod)) + CamelContextManager.mandatoryContext.addRoutes(new ConsumerMethodRoute(event.uri, objectId, targetMethod)) log.info("published method %s of %s at endpoint %s" format (targetMethod, event.typedActor, event.uri)) } @@ -55,7 +55,7 @@ private[camel] object ConsumerPublisher extends Logging { val objectId = "%s_%s" format (event.init.actorRef.uuid, targetMethod) CamelContextManager.typedActorRegistry.remove(objectId) - CamelContextManager.context.stopRoute(objectId) + CamelContextManager.mandatoryContext.stopRoute(objectId) log.info("unpublished method %s of %s from endpoint %s" format (targetMethod, event.typedActor, event.uri)) } } diff --git a/akka-camel/src/main/scala/Message.scala b/akka-camel/src/main/scala/Message.scala index d5cfd23faf..7c503009e8 100644 --- a/akka-camel/src/main/scala/Message.scala +++ b/akka-camel/src/main/scala/Message.scala @@ -24,7 +24,7 @@ case class Message(val body: Any, val headers: Map[String, Any] = Map.empty) { * @see CamelContextManager. */ def bodyAs[T](clazz: Class[T]): T = - CamelContextManager.context.getTypeConverter.mandatoryConvertTo[T](clazz, body) + CamelContextManager.mandatoryContext.getTypeConverter.mandatoryConvertTo[T](clazz, body) /** * Returns the body of the message converted to the type T. Conversion is done @@ -35,7 +35,7 @@ case class Message(val body: Any, val headers: Map[String, Any] = Map.empty) { * @see CamelContextManager. */ def bodyAs[T](implicit m: Manifest[T]): T = - CamelContextManager.context.getTypeConverter.mandatoryConvertTo[T](m.erasure.asInstanceOf[Class[T]], body) + CamelContextManager.mandatoryContext.getTypeConverter.mandatoryConvertTo[T](m.erasure.asInstanceOf[Class[T]], body) /** * Returns those headers from this message whose name is contained in names. @@ -53,14 +53,14 @@ case class Message(val body: Any, val headers: Map[String, Any] = Map.empty) { * NoSuchElementException if the header doesn't exist. */ def headerAs[T](name: String)(implicit m: Manifest[T]): T = - CamelContextManager.context.getTypeConverter.mandatoryConvertTo[T](m.erasure.asInstanceOf[Class[T]], header(name)) + CamelContextManager.mandatoryContext.getTypeConverter.mandatoryConvertTo[T](m.erasure.asInstanceOf[Class[T]], header(name)) /** * Returns the header with given name converted to type given by the clazz * argument. Throws NoSuchElementException if the header doesn't exist. */ def headerAs[T](name: String, clazz: Class[T]): T = - CamelContextManager.context.getTypeConverter.mandatoryConvertTo[T](clazz, header(name)) + CamelContextManager.mandatoryContext.getTypeConverter.mandatoryConvertTo[T](clazz, header(name)) /** * Creates a Message with a new body using a transformer function. diff --git a/akka-camel/src/main/scala/Producer.scala b/akka-camel/src/main/scala/Producer.scala index 3313c1d0be..2924590c9e 100644 --- a/akka-camel/src/main/scala/Producer.scala +++ b/akka-camel/src/main/scala/Producer.scala @@ -27,7 +27,7 @@ trait ProducerSupport { this: Actor => * Endpoint object resolved from the current CamelContext with * endpointUri. */ - private lazy val endpoint = CamelContextManager.context.getEndpoint(endpointUri) + private lazy val endpoint = CamelContextManager.mandatoryContext.getEndpoint(endpointUri) /** * SendProcessor for producing messages to endpoint. diff --git a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/SampleUntypedForwardingProducer.java b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/SampleUntypedForwardingProducer.java index e909947de8..ec2f7eb560 100644 --- a/akka-camel/src/test/java/se/scalablesolutions/akka/camel/SampleUntypedForwardingProducer.java +++ b/akka-camel/src/test/java/se/scalablesolutions/akka/camel/SampleUntypedForwardingProducer.java @@ -13,6 +13,6 @@ public class SampleUntypedForwardingProducer extends UntypedProducerActor { public void onReceiveAfterProduce(Object message) { Message msg = (Message)message; String body = msg.bodyAs(String.class); - CamelContextManager.template().sendBody("direct:forward-test-1", body); + CamelContextManager.mandatoryTemplate().sendBody("direct:forward-test-1", body); } } diff --git a/akka-camel/src/test/scala/CamelContextLifecycleTest.scala b/akka-camel/src/test/scala/CamelContextLifecycleTest.scala index cf558ec8d9..6e6889c295 100644 --- a/akka-camel/src/test/scala/CamelContextLifecycleTest.scala +++ b/akka-camel/src/test/scala/CamelContextLifecycleTest.scala @@ -6,22 +6,30 @@ import org.scalatest.junit.JUnitSuite class CamelContextLifecycleTest extends JUnitSuite with CamelContextLifecycle { @Test def shouldManageCustomCamelContext { - assert(context === null) - assert(template === null) + assert(context === None) + assert(template === None) + + intercept[IllegalStateException] { mandatoryContext } + intercept[IllegalStateException] { mandatoryTemplate } + val ctx = new TestCamelContext assert(ctx.isStreamCaching === false) + init(ctx) - assert(context.isStreamCaching === true) - assert(!context.asInstanceOf[TestCamelContext].isStarted) - // In Camel 2.3 CamelComtext.createProducerTemplate starts - // the template before returning it (wasn't started in 2.2) - assert(template.asInstanceOf[DefaultProducerTemplate].isStarted) + + assert(mandatoryContext.isStreamCaching === true) + assert(!mandatoryContext.asInstanceOf[TestCamelContext].isStarted) + assert(mandatoryTemplate.asInstanceOf[DefaultProducerTemplate].isStarted) + start - assert(context.asInstanceOf[TestCamelContext].isStarted) - assert(template.asInstanceOf[DefaultProducerTemplate].isStarted) + + assert(mandatoryContext.asInstanceOf[TestCamelContext].isStarted) + assert(mandatoryTemplate.asInstanceOf[DefaultProducerTemplate].isStarted) + stop - assert(!context.asInstanceOf[TestCamelContext].isStarted) - assert(!template.asInstanceOf[DefaultProducerTemplate].isStarted) + + assert(!mandatoryContext.asInstanceOf[TestCamelContext].isStarted) + assert(!mandatoryTemplate.asInstanceOf[DefaultProducerTemplate].isStarted) } class TestCamelContext extends DefaultCamelContext diff --git a/akka-camel/src/test/scala/ConsumerTest.scala b/akka-camel/src/test/scala/ConsumerTest.scala index 2a2cc0b11f..0af8aec7d5 100644 --- a/akka-camel/src/test/scala/ConsumerTest.scala +++ b/akka-camel/src/test/scala/ConsumerTest.scala @@ -14,7 +14,7 @@ import se.scalablesolutions.akka.actor._ * @author Martin Krasser */ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { - import CamelContextManager.template + import CamelContextManager.mandatoryTemplate import ConsumerTest._ var service: CamelService = _ @@ -45,12 +45,12 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { val consumer = actorOf(new TestConsumer("direct:publish-test-2")) "started before starting the CamelService" must { "support an in-out message exchange via its endpoint" in { - template.requestBody("direct:publish-test-1", "msg1") must equal ("received msg1") + mandatoryTemplate.requestBody("direct:publish-test-1", "msg1") must equal ("received msg1") } } "not started" must { "not have an associated endpoint in the CamelContext" in { - CamelContextManager.context.hasEndpoint("direct:publish-test-2") must be (null) + CamelContextManager.mandatoryContext.hasEndpoint("direct:publish-test-2") must be (null) } } "started" must { @@ -58,10 +58,10 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { val latch = service.expectEndpointActivationCount(1) consumer.start latch.await(5000, TimeUnit.MILLISECONDS) must be (true) - template.requestBody("direct:publish-test-2", "msg2") must equal ("received msg2") + mandatoryTemplate.requestBody("direct:publish-test-2", "msg2") must equal ("received msg2") } "have an associated endpoint in the CamelContext" in { - CamelContextManager.context.hasEndpoint("direct:publish-test-2") must not be (null) + CamelContextManager.mandatoryContext.hasEndpoint("direct:publish-test-2") must not be (null) } } "stopped" must { @@ -70,7 +70,7 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { consumer.stop latch.await(5000, TimeUnit.MILLISECONDS) must be (true) intercept[CamelExecutionException] { - template.requestBody("direct:publish-test-2", "msg2") + mandatoryTemplate.requestBody("direct:publish-test-2", "msg2") } } } @@ -83,9 +83,9 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { val latch = service.expectEndpointActivationCount(3) actor = TypedActor.newInstance(classOf[SampleTypedConsumer], classOf[SampleTypedConsumerImpl]) latch.await(5000, TimeUnit.MILLISECONDS) must be (true) - template.requestBodyAndHeader("direct:m2", "x", "test", "y") must equal ("m2: x y") - template.requestBodyAndHeader("direct:m3", "x", "test", "y") must equal ("m3: x y") - template.requestBodyAndHeader("direct:m4", "x", "test", "y") must equal ("m4: x y") + mandatoryTemplate.requestBodyAndHeader("direct:m2", "x", "test", "y") must equal ("m2: x y") + mandatoryTemplate.requestBodyAndHeader("direct:m3", "x", "test", "y") must equal ("m3: x y") + mandatoryTemplate.requestBodyAndHeader("direct:m4", "x", "test", "y") must equal ("m4: x y") } } "stopped" must { @@ -94,13 +94,13 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { TypedActor.stop(actor) latch.await(5000, TimeUnit.MILLISECONDS) must be (true) intercept[CamelExecutionException] { - template.requestBodyAndHeader("direct:m2", "x", "test", "y") + mandatoryTemplate.requestBodyAndHeader("direct:m2", "x", "test", "y") } intercept[CamelExecutionException] { - template.requestBodyAndHeader("direct:m3", "x", "test", "y") + mandatoryTemplate.requestBodyAndHeader("direct:m3", "x", "test", "y") } intercept[CamelExecutionException] { - template.requestBodyAndHeader("direct:m4", "x", "test", "y") + mandatoryTemplate.requestBodyAndHeader("direct:m4", "x", "test", "y") } } } @@ -113,8 +113,8 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { val latch = service.expectEndpointActivationCount(2) actor = TypedActor.newInstance(classOf[TestTypedConsumer], classOf[TestTypedConsumerImpl]) latch.await(5000, TimeUnit.MILLISECONDS) must be (true) - template.requestBody("direct:publish-test-3", "x") must equal ("foo: x") - template.requestBody("direct:publish-test-4", "x") must equal ("bar: x") + mandatoryTemplate.requestBody("direct:publish-test-3", "x") must equal ("foo: x") + mandatoryTemplate.requestBody("direct:publish-test-4", "x") must equal ("bar: x") } } "stopped" must { @@ -123,10 +123,10 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { TypedActor.stop(actor) latch.await(5000, TimeUnit.MILLISECONDS) must be (true) intercept[CamelExecutionException] { - template.requestBody("direct:publish-test-3", "x") + mandatoryTemplate.requestBody("direct:publish-test-3", "x") } intercept[CamelExecutionException] { - template.requestBody("direct:publish-test-4", "x") + mandatoryTemplate.requestBody("direct:publish-test-4", "x") } } } @@ -139,7 +139,7 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { val latch = service.expectEndpointActivationCount(1) consumer.start latch.await(5000, TimeUnit.MILLISECONDS) must be (true) - template.requestBodyAndHeader("direct:test-untyped-consumer", "x", "test", "y") must equal ("x y") + mandatoryTemplate.requestBodyAndHeader("direct:test-untyped-consumer", "x", "test", "y") must equal ("x y") } } "stopped" must { @@ -148,7 +148,7 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { consumer.stop latch.await(5000, TimeUnit.MILLISECONDS) must be (true) intercept[CamelExecutionException] { - template.sendBodyAndHeader("direct:test-untyped-consumer", "blah", "test", "blub") + mandatoryTemplate.sendBodyAndHeader("direct:test-untyped-consumer", "blah", "test", "blub") } } } @@ -162,7 +162,7 @@ class ConsumerTest extends WordSpec with BeforeAndAfterAll with MustMatchers { latch.await(5000, TimeUnit.MILLISECONDS) must be (true) try { - template.requestBody("direct:publish-test-5", "msg3") + mandatoryTemplate.requestBody("direct:publish-test-5", "msg3") fail("expected TimoutException not thrown") } catch { case e => { diff --git a/akka-camel/src/test/scala/ProducerFeatureTest.scala b/akka-camel/src/test/scala/ProducerFeatureTest.scala index a27e05a54f..5f31bcbe1c 100644 --- a/akka-camel/src/test/scala/ProducerFeatureTest.scala +++ b/akka-camel/src/test/scala/ProducerFeatureTest.scala @@ -14,7 +14,7 @@ class ProducerFeatureTest extends FeatureSpec with BeforeAndAfterAll with Before override protected def beforeAll = { ActorRegistry.shutdownAll CamelContextManager.init - CamelContextManager.context.addRoutes(new TestRoute) + CamelContextManager.mandatoryContext.addRoutes(new TestRoute) CamelContextManager.start } @@ -239,7 +239,7 @@ class ProducerFeatureTest extends FeatureSpec with BeforeAndAfterAll with Before } } - private def mockEndpoint = CamelContextManager.context.getEndpoint("mock:mock", classOf[MockEndpoint]) + private def mockEndpoint = CamelContextManager.mandatoryContext.getEndpoint("mock:mock", classOf[MockEndpoint]) } object ProducerFeatureTest { diff --git a/akka-camel/src/test/scala/RemoteConsumerTest.scala b/akka-camel/src/test/scala/RemoteConsumerTest.scala index 8d80d05b36..393f7a9a53 100644 --- a/akka-camel/src/test/scala/RemoteConsumerTest.scala +++ b/akka-camel/src/test/scala/RemoteConsumerTest.scala @@ -50,7 +50,7 @@ class RemoteConsumerTest extends FeatureSpec with BeforeAndAfterAll with GivenWh assert(latch.await(5000, TimeUnit.MILLISECONDS)) then("the published consumer is accessible via its endpoint URI") - val response = CamelContextManager.template.requestBody("direct:remote-consumer", "test") + val response = CamelContextManager.mandatoryTemplate.requestBody("direct:remote-consumer", "test") assert(response === "remote actor: test") } } @@ -66,7 +66,7 @@ class RemoteConsumerTest extends FeatureSpec with BeforeAndAfterAll with GivenWh assert(latch.await(5000, TimeUnit.MILLISECONDS)) then("the published method is accessible via its endpoint URI") - val response = CamelContextManager.template.requestBody("direct:remote-typed-consumer", "test") + val response = CamelContextManager.mandatoryTemplate.requestBody("direct:remote-typed-consumer", "test") assert(response === "remote typed actor: test") } } @@ -82,7 +82,7 @@ class RemoteConsumerTest extends FeatureSpec with BeforeAndAfterAll with GivenWh assert(latch.await(5000, TimeUnit.MILLISECONDS)) then("the published untyped consumer is accessible via its endpoint URI") - val response = CamelContextManager.template.requestBodyAndHeader("direct:remote-untyped-consumer", "a", "test", "b") + val response = CamelContextManager.mandatoryTemplate.requestBodyAndHeader("direct:remote-untyped-consumer", "a", "test", "b") assert(response === "a b") } } diff --git a/akka-camel/src/test/scala/UntypedProducerFeatureTest.scala b/akka-camel/src/test/scala/UntypedProducerFeatureTest.scala index c8a0bd8542..0d268785b6 100644 --- a/akka-camel/src/test/scala/UntypedProducerFeatureTest.scala +++ b/akka-camel/src/test/scala/UntypedProducerFeatureTest.scala @@ -14,7 +14,7 @@ class UntypedProducerFeatureTest extends FeatureSpec with BeforeAndAfterAll with override protected def beforeAll = { ActorRegistry.shutdownAll CamelContextManager.init - CamelContextManager.context.addRoutes(new TestRoute) + CamelContextManager.mandatoryContext.addRoutes(new TestRoute) CamelContextManager.start } @@ -78,7 +78,7 @@ class UntypedProducerFeatureTest extends FeatureSpec with BeforeAndAfterAll with } - private def mockEndpoint = CamelContextManager.context.getEndpoint("mock:mock", classOf[MockEndpoint]) + private def mockEndpoint = CamelContextManager.mandatoryContext.getEndpoint("mock:mock", classOf[MockEndpoint]) } object UntypedProducerFeatureTest { diff --git a/akka-camel/src/test/scala/component/ActorComponentFeatureTest.scala b/akka-camel/src/test/scala/component/ActorComponentFeatureTest.scala index 331f2c23b6..cc9f750aae 100644 --- a/akka-camel/src/test/scala/component/ActorComponentFeatureTest.scala +++ b/akka-camel/src/test/scala/component/ActorComponentFeatureTest.scala @@ -18,7 +18,7 @@ class ActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll with override protected def beforeAll = { ActorRegistry.shutdownAll CamelContextManager.init - CamelContextManager.context.addRoutes(new TestRoute) + CamelContextManager.mandatoryContext.addRoutes(new TestRoute) CamelContextManager.start } @@ -30,12 +30,12 @@ class ActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll with } feature("Communicate with an actor via an actor:uuid endpoint") { - import CamelContextManager.template + import CamelContextManager.mandatoryTemplate scenario("one-way communication") { val actor = actorOf[Tester1].start val latch = (actor !! SetExpectedMessageCount(1)).as[CountDownLatch].get - template.sendBody("actor:uuid:%s" format actor.uuid, "Martin") + mandatoryTemplate.sendBody("actor:uuid:%s" format actor.uuid, "Martin") assert(latch.await(5000, TimeUnit.MILLISECONDS)) val reply = (actor !! GetRetainedMessage).get.asInstanceOf[Message] assert(reply.body === "Martin") @@ -43,36 +43,36 @@ class ActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll with scenario("two-way communication") { val actor = actorOf[Tester2].start - assert(template.requestBody("actor:uuid:%s" format actor.uuid, "Martin") === "Hello Martin") + assert(mandatoryTemplate.requestBody("actor:uuid:%s" format actor.uuid, "Martin") === "Hello Martin") } scenario("two-way communication with timeout") { val actor = actorOf[Tester3].start intercept[RuntimeCamelException] { - template.requestBody("actor:uuid:%s?blocking=true" format actor.uuid, "Martin") + mandatoryTemplate.requestBody("actor:uuid:%s?blocking=true" format actor.uuid, "Martin") } } scenario("two-way communication via a custom route with failure response") { mockEndpoint.expectedBodiesReceived("whatever") - template.requestBody("direct:failure-test-1", "whatever") + mandatoryTemplate.requestBody("direct:failure-test-1", "whatever") mockEndpoint.assertIsSatisfied } scenario("two-way communication via a custom route with exception") { mockEndpoint.expectedBodiesReceived("whatever") - template.requestBody("direct:failure-test-2", "whatever") + mandatoryTemplate.requestBody("direct:failure-test-2", "whatever") mockEndpoint.assertIsSatisfied } } feature("Communicate with an actor via an actor:id endpoint") { - import CamelContextManager.template + import CamelContextManager.mandatoryTemplate scenario("one-way communication") { val actor = actorOf[Tester1].start val latch = (actor !! SetExpectedMessageCount(1)).as[CountDownLatch].get - template.sendBody("actor:%s" format actor.id, "Martin") + mandatoryTemplate.sendBody("actor:%s" format actor.id, "Martin") assert(latch.await(5000, TimeUnit.MILLISECONDS)) val reply = (actor !! GetRetainedMessage).get.asInstanceOf[Message] assert(reply.body === "Martin") @@ -80,17 +80,17 @@ class ActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll with scenario("two-way communication") { val actor = actorOf[Tester2].start - assert(template.requestBody("actor:%s" format actor.id, "Martin") === "Hello Martin") + assert(mandatoryTemplate.requestBody("actor:%s" format actor.id, "Martin") === "Hello Martin") } scenario("two-way communication via a custom route") { val actor = actorOf[CustomIdActor].start - assert(template.requestBody("direct:custom-id-test-1", "Martin") === "Received Martin") - assert(template.requestBody("direct:custom-id-test-2", "Martin") === "Received Martin") + assert(mandatoryTemplate.requestBody("direct:custom-id-test-1", "Martin") === "Received Martin") + assert(mandatoryTemplate.requestBody("direct:custom-id-test-2", "Martin") === "Received Martin") } } - private def mockEndpoint = CamelContextManager.context.getEndpoint("mock:mock", classOf[MockEndpoint]) + private def mockEndpoint = CamelContextManager.mandatoryContext.getEndpoint("mock:mock", classOf[MockEndpoint]) } object ActorComponentFeatureTest { diff --git a/akka-camel/src/test/scala/component/TypedActorComponentFeatureTest.scala b/akka-camel/src/test/scala/component/TypedActorComponentFeatureTest.scala index 37352eb154..e1f169187a 100644 --- a/akka-camel/src/test/scala/component/TypedActorComponentFeatureTest.scala +++ b/akka-camel/src/test/scala/component/TypedActorComponentFeatureTest.scala @@ -13,7 +13,7 @@ import se.scalablesolutions.akka.camel._ */ class TypedActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll with BeforeAndAfterEach { import TypedActorComponentFeatureTest._ - import CamelContextManager.template + import CamelContextManager.mandatoryTemplate override protected def beforeAll = { val typedActor = TypedActor.newInstance(classOf[SampleTypedActor], classOf[SampleTypedActorImpl]) // not a consumer @@ -24,7 +24,7 @@ class TypedActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll registry.put("ta", typedActor) CamelContextManager.init(new DefaultCamelContext(registry)) - CamelContextManager.context.addRoutes(new CustomRouteBuilder) + CamelContextManager.mandatoryContext.addRoutes(new CustomRouteBuilder) CamelContextManager.start // Internal registration @@ -41,19 +41,19 @@ class TypedActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll import ExchangePattern._ scenario("two-way communication with method returning String") { - val result1 = template.requestBodyAndHeader("%s:tc?method=m2" format InternalSchema, "x", "test", "y") - val result2 = template.requestBodyAndHeader("%s:tc?method=m4" format InternalSchema, "x", "test", "y") + val result1 = mandatoryTemplate.requestBodyAndHeader("%s:tc?method=m2" format InternalSchema, "x", "test", "y") + val result2 = mandatoryTemplate.requestBodyAndHeader("%s:tc?method=m4" format InternalSchema, "x", "test", "y") assert(result1 === "m2: x y") assert(result2 === "m4: x y") } scenario("two-way communication with method returning void") { - val result = template.requestBodyAndHeader("%s:tc?method=m5" format InternalSchema, "x", "test", "y") + val result = mandatoryTemplate.requestBodyAndHeader("%s:tc?method=m5" format InternalSchema, "x", "test", "y") assert(result === "x") // returns initial body } scenario("one-way communication with method returning String") { - val result = template.send("%s:tc?method=m2" format InternalSchema, InOnly, new Processor { + val result = mandatoryTemplate.send("%s:tc?method=m2" format InternalSchema, InOnly, new Processor { def process(exchange: Exchange) = { exchange.getIn.setBody("x") exchange.getIn.setHeader("test", "y") @@ -65,7 +65,7 @@ class TypedActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll } scenario("one-way communication with method returning void") { - val result = template.send("%s:tc?method=m5" format InternalSchema, InOnly, new Processor { + val result = mandatoryTemplate.send("%s:tc?method=m5" format InternalSchema, InOnly, new Processor { def process(exchange: Exchange) = { exchange.getIn.setBody("x") exchange.getIn.setHeader("test", "y") @@ -81,19 +81,19 @@ class TypedActorComponentFeatureTest extends FeatureSpec with BeforeAndAfterAll feature("Communicate with an internally-registered typed actor using typed-actor endpoint URIs") { scenario("communication not possible") { intercept[ResolveEndpointFailedException] { - template.requestBodyAndHeader("typed-actor:tc?method=m2", "x", "test", "y") + mandatoryTemplate.requestBodyAndHeader("typed-actor:tc?method=m2", "x", "test", "y") } } } feature("Communicate with an externally-registered typed actor using typed-actor endpoint URIs") { scenario("two-way communication with method returning String") { - val result = template.requestBody("typed-actor:ta?method=foo", "test") + val result = mandatoryTemplate.requestBody("typed-actor:ta?method=foo", "test") assert(result === "foo: test") } scenario("two-way communication with method returning String via custom route") { - val result = template.requestBody("direct:test", "test") + val result = mandatoryTemplate.requestBody("direct:test", "test") assert(result === "foo: test") } } diff --git a/akka-samples/akka-sample-camel/src/main/scala/Boot.scala b/akka-samples/akka-sample-camel/src/main/scala/Boot.scala index 98c7c34b7e..6ee82cd454 100644 --- a/akka-samples/akka-sample-camel/src/main/scala/Boot.scala +++ b/akka-samples/akka-sample-camel/src/main/scala/Boot.scala @@ -40,7 +40,7 @@ class Boot { // Use a custom Camel context and a custom touter builder CamelContextManager.init(new DefaultCamelContext(registry)) - CamelContextManager.context.addRoutes(new CustomRouteBuilder) + CamelContextManager.mandatoryContext.addRoutes(new CustomRouteBuilder) val producer = actorOf[Producer1] val mediator = actorOf(new Transformer(producer)) diff --git a/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala b/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala index 6a8aa461a8..5335c47664 100644 --- a/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala +++ b/akka-samples/akka-sample-camel/src/main/scala/StandaloneApplication.scala @@ -12,7 +12,7 @@ import se.scalablesolutions.akka.camel._ * @author Martin Krasser */ object StandaloneApplication extends Application { - import CamelContextManager.context + import CamelContextManager._ import CamelServiceManager._ // 'externally' register typed actors @@ -21,12 +21,12 @@ object StandaloneApplication extends Application { // customize CamelContext CamelContextManager.init(new DefaultCamelContext(registry)) - CamelContextManager.context.addRoutes(new StandaloneApplicationRoute) + CamelContextManager.mandatoryContext.addRoutes(new StandaloneApplicationRoute) startCamelService // access 'externally' registered typed actors - assert("hello msg1" == context.createProducerTemplate.requestBody("direct:test", "msg1")) + assert("hello msg1" == mandatoryContext.createProducerTemplate.requestBody("direct:test", "msg1")) // set expectations on upcoming endpoint activation val activation = service.get.expectEndpointActivationCount(1) @@ -39,7 +39,7 @@ object StandaloneApplication extends Application { // access 'internally' (automatically) registered typed-actors // (see @consume annotation value at TypedConsumer2.foo method) - assert("default: msg3" == context.createProducerTemplate.requestBody("direct:default", "msg3")) + assert("default: msg3" == mandatoryContext.createProducerTemplate.requestBody("direct:default", "msg3")) stopCamelService @@ -60,7 +60,7 @@ object StandaloneSpringApplication extends Application { val appctx = new ClassPathXmlApplicationContext("/context-standalone.xml") // access 'externally' registered typed actors with typed-actor component - assert("hello msg3" == template.requestBody("direct:test3", "msg3")) + assert("hello msg3" == mandatoryTemplate.requestBody("direct:test3", "msg3")) appctx.close @@ -104,7 +104,7 @@ object StandaloneJmsApplication extends Application { // Send 10 messages to JMS topic directly for(i <- 1 to 10) { - CamelContextManager.template.sendBody(jmsUri, "Camel rocks (%d)" format i) + CamelContextManager.mandatoryTemplate.sendBody(jmsUri, "Camel rocks (%d)" format i) } stopCamelService diff --git a/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala b/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala index e8b0d727c3..94b36b3192 100644 --- a/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala +++ b/akka-spring/src/test/scala/CamelServiceSpringFeatureTest.scala @@ -22,7 +22,7 @@ class CamelServiceSpringFeatureTest extends FeatureSpec with BeforeAndAfterEach scenario("with a custom CamelContext and access a registered typed actor") { val appctx = new ClassPathXmlApplicationContext("/appContextCamelServiceCustom.xml") assert(context.isInstanceOf[SpringCamelContext]) - assert("hello sample" === template.requestBody("direct:test", "sample")) + assert("hello sample" === mandatoryTemplate.requestBody("direct:test", "sample")) appctx.close } @@ -35,7 +35,7 @@ class CamelServiceSpringFeatureTest extends FeatureSpec with BeforeAndAfterEach assert(context.isInstanceOf[DefaultCamelContext]) context.asInstanceOf[DefaultCamelContext].setRegistry(registry) // access registered typed actor - assert("hello sample" === template.requestBody("typed-actor:custom?method=foo", "sample")) + assert("hello sample" === mandatoryTemplate.requestBody("typed-actor:custom?method=foo", "sample")) appctx.close } }