You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by on...@apache.org on 2020/05/18 20:27:14 UTC
[camel] 02/15: CAMEL-15078: camel-core - Registry.bind should
inject context into CamelContextAware beans
This is an automated email from the ASF dual-hosted git repository.
onders pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit ff79f30890a79065ce62e0839968dfff08587012
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon May 18 14:27:11 2020 +0200
CAMEL-15078: camel-core - Registry.bind should inject context into CamelContextAware beans
---
.../main/java/org/apache/camel/spi/Registry.java | 7 ++++
.../apache/camel/support/DefaultRegistryTest.java | 44 ++++++++++++++++++++++
.../org/apache/camel/support/DefaultRegistry.java | 4 ++
3 files changed, 55 insertions(+)
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Registry.java b/core/camel-api/src/main/java/org/apache/camel/spi/Registry.java
index a7d7e86..c62b21b 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Registry.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Registry.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.spi;
+import org.apache.camel.CamelContextAware;
import org.apache.camel.RuntimeCamelException;
/**
@@ -26,6 +27,9 @@ public interface Registry extends BeanRepository {
/**
* Binds the bean to the repository (if possible).
+ *
+ * If the bean is {@link CamelContextAware} then the registry
+ * will automatic inject the context if possible.
*
* @param id the id of the bean
* @param bean the bean
@@ -41,6 +45,9 @@ public interface Registry extends BeanRepository {
* Binding by id and type allows to bind multiple entries with the same
* id but with different type.
*
+ * If the bean is {@link CamelContextAware} then the registry
+ * will automatic inject the context if possible.
+ *
* @param id the id of the bean
* @param type the type of the bean to associate the binding
* @param bean the bean
diff --git a/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java b/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java
index b98ca49..e24c06d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java
@@ -20,6 +20,9 @@ import java.util.Iterator;
import junit.framework.TestCase;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.FooBar;
import org.junit.Test;
@@ -86,4 +89,45 @@ public class DefaultRegistryTest extends TestCase {
assertEquals("myFooBar", it.next());
}
+ @Test
+ public void testBindCamelContextAwareInject() throws Exception {
+ CamelContext context = new DefaultCamelContext();
+ registry.setCamelContext(context);
+
+ MyBean my = new MyBean("Tiger");
+ registry.bind("tiger", my);
+
+ MyBean lookup = (MyBean) registry.lookupByName("tiger");
+ assertSame(my, lookup);
+
+ assertNotNull(lookup.getCamelContext());
+ assertSame(context, lookup.getCamelContext());
+ }
+
+ private class MyBean implements CamelContextAware {
+
+ private CamelContext camelContext;
+
+ private String name;
+
+ public MyBean(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public CamelContext getCamelContext() {
+ return camelContext;
+ }
+
+ @Override
+ public void setCamelContext(CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java
index ccee7b1..6704bca 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultRegistry.java
@@ -119,6 +119,10 @@ public class DefaultRegistry implements Registry, CamelContextAware {
@Override
public void bind(String id, Class<?> type, Object bean) throws RuntimeCamelException {
+ // automatic inject camel context in bean if its aware
+ if (camelContext != null && bean instanceof CamelContextAware) {
+ ((CamelContextAware) bean).setCamelContext(camelContext);
+ }
fallbackRegistry.bind(id, type, bean);
}