diff --git a/akka-camel/src/main/resources/META-INF/services/org/apache/camel/component/active-object b/akka-camel/src/main/resources/META-INF/services/org/apache/camel/component/active-object
new file mode 100644
index 0000000000..5dd88a0671
--- /dev/null
+++ b/akka-camel/src/main/resources/META-INF/services/org/apache/camel/component/active-object
@@ -0,0 +1 @@
+class=se.scalablesolutions.akka.camel.component.ActiveObjectComponent
\ No newline at end of file
diff --git a/akka-camel/src/main/scala/CamelContextLifecycle.scala b/akka-camel/src/main/scala/CamelContextLifecycle.scala
index 61e45d435f..66646eed57 100644
--- a/akka-camel/src/main/scala/CamelContextLifecycle.scala
+++ b/akka-camel/src/main/scala/CamelContextLifecycle.scala
@@ -94,14 +94,14 @@ trait CamelContextLifecycle extends Logging {
* caching they can do so after this method returned and prior to calling start.
* This method also registers a new
* {@link se.scalablesolutions.akka.camel.component.ActiveObjectComponent} at
- * context under the name actobj.
+ * context under a name defined by ActiveObjectComponent.InternalSchema.
*/
def init(context: CamelContext) {
this.activeObjectComponent = new ActiveObjectComponent
this.activeObjectRegistry = activeObjectComponent.activeObjectRegistry
this.context = context
this.context.setStreamCaching(true)
- this.context.addComponent(ActiveObjectComponent.DefaultSchema, activeObjectComponent)
+ this.context.addComponent(ActiveObjectComponent.InternalSchema, activeObjectComponent)
this.template = context.createProducerTemplate
_initialized = true
log.info("Camel context initialized")
diff --git a/akka-camel/src/main/scala/ConsumerPublisher.scala b/akka-camel/src/main/scala/ConsumerPublisher.scala
index 723c41fff3..9df41a7d92 100644
--- a/akka-camel/src/main/scala/ConsumerPublisher.scala
+++ b/akka-camel/src/main/scala/ConsumerPublisher.scala
@@ -144,7 +144,7 @@ private[camel] class ConsumerActorRoute(endpointUri: String, id: String, uuid: B
* @author Martin Krasser
*/
private[camel] class ConsumerMethodRoute(val endpointUri: String, id: String, method: String) extends ConsumerRoute(endpointUri, id) {
- protected override def targetUri = "%s:%s?method=%s" format (ActiveObjectComponent.DefaultSchema, id, method)
+ protected override def targetUri = "%s:%s?method=%s" format (ActiveObjectComponent.InternalSchema, id, method)
}
/**
diff --git a/akka-camel/src/main/scala/component/ActiveObjectComponent.scala b/akka-camel/src/main/scala/component/ActiveObjectComponent.scala
index 2be93c404c..d65c7e6528 100644
--- a/akka-camel/src/main/scala/component/ActiveObjectComponent.scala
+++ b/akka-camel/src/main/scala/component/ActiveObjectComponent.scala
@@ -16,15 +16,14 @@ object ActiveObjectComponent {
/**
* Default schema name for active object endpoint URIs.
*/
- val DefaultSchema = "actobj"
+ val InternalSchema = "active-object-internal"
}
/**
* Camel component for exchanging messages with active objects. This component
- * requires that active objects are added to activeObjectRegistry
- * before creating routes that access these objects. The registry key is the bean
- * name of the active object used in the endpoint URI.
- *
+ * tries to obtain the active object from the activeObjectRegistry
+ * first. If it's not there it tries to obtain it from the CamelContext's registry.
+ *
* @see org.apache.camel.component.bean.BeanComponent
*
* @author Martin Krasser
@@ -69,8 +68,10 @@ class ActiveObjectHolder(activeObjectRegistry: Map[String, AnyRef], context: Cam
/**
* Obtains an active object from activeObjectRegistry.
*/
- override def getBean: AnyRef =
- activeObjectRegistry.get(getName)
+ override def getBean: AnyRef = {
+ val bean = activeObjectRegistry.get(getName)
+ if (bean eq null) super.getBean else bean
+ }
}
/**
diff --git a/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala b/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala
index 9239673df2..1decc24eef 100644
--- a/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala
+++ b/akka-camel/src/test/scala/component/ActiveObjectComponentFeatureTest.scala
@@ -28,27 +28,27 @@ class ActiveObjectComponentFeatureTest extends FeatureSpec with BeforeAndAfterAl
}
feature("Communicate with an active object from a Camel application using active object endpoint URIs") {
- import ActiveObjectComponent.DefaultSchema
+ import ActiveObjectComponent.InternalSchema
import CamelContextManager.template
import ExchangePattern._
scenario("in-out exchange with proxy created from interface and method returning String") {
- val result = template.requestBodyAndHeader("%s:intf?method=m2" format DefaultSchema, "x", "test", "y")
+ val result = template.requestBodyAndHeader("%s:intf?method=m2" format InternalSchema, "x", "test", "y")
assert(result === "m2impl: x y")
}
scenario("in-out exchange with proxy created from class and method returning String") {
- val result = template.requestBodyAndHeader("%s:base?method=m2" format DefaultSchema, "x", "test", "y")
+ val result = template.requestBodyAndHeader("%s:base?method=m2" format InternalSchema, "x", "test", "y")
assert(result === "m2base: x y")
}
scenario("in-out exchange with proxy created from class and method returning void") {
- val result = template.requestBodyAndHeader("%s:base?method=m5" format DefaultSchema, "x", "test", "y")
+ val result = template.requestBodyAndHeader("%s:base?method=m5" format InternalSchema, "x", "test", "y")
assert(result === "x") // returns initial body
}
scenario("in-only exchange with proxy created from class and method returning String") {
- val result = template.send("%s:base?method=m2" format DefaultSchema, InOnly, new Processor {
+ val result = template.send("%s:base?method=m2" format InternalSchema, InOnly, new Processor {
def process(exchange: Exchange) = {
exchange.getIn.setBody("x")
exchange.getIn.setHeader("test", "y")
@@ -60,7 +60,7 @@ class ActiveObjectComponentFeatureTest extends FeatureSpec with BeforeAndAfterAl
}
scenario("in-only exchange with proxy created from class and method returning void") {
- val result = template.send("%s:base?method=m5" format DefaultSchema, InOnly, new Processor {
+ val result = template.send("%s:base?method=m5" format InternalSchema, InOnly, new Processor {
def process(exchange: Exchange) = {
exchange.getIn.setBody("x")
exchange.getIn.setHeader("test", "y")