You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2016/04/04 14:12:45 UTC
[1/4] camel git commit: CAMEL-9798: Add support for injecting default
ProducerTemplate in Camel CDI
Repository: camel
Updated Branches:
refs/heads/camel-2.17.x ff198f23a -> fbb0b8c7e
CAMEL-9798: Add support for injecting default ProducerTemplate in Camel CDI
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/eab03dd9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/eab03dd9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/eab03dd9
Branch: refs/heads/camel-2.17.x
Commit: eab03dd9df300feb7b7e3e115297ca8e99389f08
Parents: ff198f2
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Mon Apr 4 10:24:52 2016 +0200
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Mon Apr 4 14:10:44 2016 +0200
----------------------------------------------------------------------
.../org/apache/camel/cdi/CdiCamelFactory.java | 25 +++-
.../cdi/test/DefaultProducerTemplateTest.java | 68 +++++++++
.../test/MultiContextProducerTemplateTest.java | 137 +++++++++++++++++++
3 files changed, 227 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/eab03dd9/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
index cdb2336..ecd309c 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
@@ -28,6 +28,7 @@ import java.util.Iterator;
import java.util.Set;
import javax.enterprise.event.Event;
import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Default;
import javax.enterprise.inject.InjectionException;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
@@ -49,15 +50,24 @@ final class CdiCamelFactory {
return selectContext(ip, instance, extension).getTypeConverter();
}
- @Uri("")
@Produces
+ @Default @Uri("")
// Qualifiers are dynamically added in CdiCamelExtension
private static ProducerTemplate producerTemplate(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
Uri uri = CdiSpiHelper.getQualifierByType(ip, Uri.class);
+ if (uri != null) {
+ return producerTemplateFromUri(ip, instance, extension, uri);
+ } else {
+ return defaultProducerTemplate(ip, instance, extension);
+ }
+ }
+
+ private static ProducerTemplate producerTemplateFromUri(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension, Uri uri) {
try {
- CamelContext context = uri.context().isEmpty() ? selectContext(ip, instance, extension) : selectContext(uri.context(), instance);
+ CamelContext context = uri.context().isEmpty()
+ ? selectContext(ip, instance, extension)
+ : selectContext(uri.context(), instance);
ProducerTemplate producerTemplate = context.createProducerTemplate();
- // FIXME: avoid NPE caused by missing @Uri qualifier when injection point is @ContextName qualified
Endpoint endpoint = context.getEndpoint(uri.value(), Endpoint.class);
producerTemplate.setDefaultEndpoint(endpoint);
return producerTemplate;
@@ -66,6 +76,15 @@ final class CdiCamelFactory {
}
}
+ private static ProducerTemplate defaultProducerTemplate(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
+ try {
+ CamelContext context = selectContext(ip, instance, extension);
+ return context.createProducerTemplate();
+ } catch (Exception cause) {
+ throw new InjectionException("Error injecting producer template into " + ip, cause);
+ }
+ }
+
@Produces
@Typed(MockEndpoint.class)
// Qualifiers are dynamically added in CdiCamelExtension
http://git-wip-us.apache.org/repos/asf/camel/blob/eab03dd9/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java
new file mode 100644
index 0000000..6191b8d
--- /dev/null
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.UriEndpointRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class DefaultProducerTemplateTest {
+
+ @Inject
+ private ProducerTemplate producer;
+
+ @Inject
+ @Uri("mock:outbound")
+ private MockEndpoint out;
+
+ @Deployment
+ public static Archive<?> deployment() {
+ return ShrinkWrap.create(JavaArchive.class)
+ // Camel CDI
+ .addPackage(CdiCamelExtension.class.getPackage())
+ // Test class
+ .addClass(UriEndpointRoute.class)
+ // Bean archive deployment descriptor
+ .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+ }
+
+ @Test
+ public void sendMessageToInbound() throws InterruptedException {
+ out.expectedMessageCount(1);
+ out.expectedBodiesReceived("test");
+
+ producer.sendBody("direct:inbound", "test");
+
+ assertIsSatisfied(2L, TimeUnit.SECONDS, out);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/eab03dd9/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextProducerTemplateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextProducerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextProducerTemplateTest.java
new file mode 100644
index 0000000..03550fc
--- /dev/null
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextProducerTemplateTest.java
@@ -0,0 +1,137 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ContextName;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.DefaultCamelContextBean;
+import org.apache.camel.cdi.bean.EndpointInjectRoute;
+import org.apache.camel.cdi.bean.FirstCamelContextBean;
+import org.apache.camel.cdi.bean.FirstCamelContextEndpointInjectRoute;
+import org.apache.camel.cdi.bean.SecondCamelContextBean;
+import org.apache.camel.cdi.bean.SecondCamelContextEndpointInjectRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.cdi.expression.ExchangeExpression.fromCamelContext;
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class MultiContextProducerTemplateTest {
+
+ @Inject
+ private CamelContext defaultCamelContext;
+
+ @Inject
+ private ProducerTemplate defaultInbound;
+
+ @Inject @Uri("mock:outbound")
+ private MockEndpoint defaultOutbound;
+
+ @Inject @ContextName("first")
+ private CamelContext firstCamelContext;
+
+ @Inject @ContextName("first")
+ private ProducerTemplate firstInbound;
+
+ @Inject @ContextName("first") @Uri("mock:outbound")
+ private MockEndpoint firstOutbound;
+
+ @Inject @ContextName("second")
+ private CamelContext secondCamelContext;
+
+ @Inject @ContextName("second")
+ private ProducerTemplate secondInbound;
+
+ @Inject @ContextName("second") @Uri("mock:outbound")
+ private MockEndpoint secondOutbound;
+
+ @Deployment
+ public static Archive<?> deployment() {
+ return ShrinkWrap.create(JavaArchive.class)
+ // Camel CDI
+ .addPackage(CdiCamelExtension.class.getPackage())
+ // Test classes
+ .addClasses(
+ DefaultCamelContextBean.class,
+ EndpointInjectRoute.class,
+ FirstCamelContextBean.class,
+ FirstCamelContextEndpointInjectRoute.class,
+ SecondCamelContextBean.class,
+ SecondCamelContextEndpointInjectRoute.class)
+ // Bean archive deployment descriptor
+ .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+ }
+
+ @Test
+ @InSequence(1)
+ public void configureCamelContexts() throws Exception {
+ secondCamelContext.startAllRoutes();
+ }
+
+ @Test
+ @InSequence(2)
+ public void sendMessageToDefaultCamelContextInbound() throws InterruptedException {
+ defaultOutbound.expectedMessageCount(1);
+ defaultOutbound.expectedBodiesReceived("test-default");
+ defaultOutbound.message(0).exchange().matches(fromCamelContext("camel-cdi"));
+
+ defaultInbound.sendBody("direct:inbound", "test-default");
+
+ assertIsSatisfied(2L, TimeUnit.SECONDS, defaultOutbound);
+ }
+
+ @Test
+ @InSequence(3)
+ public void sendMessageToFirstCamelContextInbound() throws InterruptedException {
+ firstOutbound.expectedMessageCount(1);
+ firstOutbound.expectedBodiesReceived("test-first");
+ firstOutbound.expectedHeaderReceived("context", "first");
+ firstOutbound.message(0).exchange().matches(fromCamelContext("first"));
+
+ firstInbound.sendBody("direct:inbound", "test-first");
+
+ assertIsSatisfied(2L, TimeUnit.SECONDS, firstOutbound);
+ }
+
+ @Test
+ @InSequence(4)
+ public void sendMessageToSecondCamelContextInbound() throws InterruptedException {
+ secondOutbound.expectedMessageCount(1);
+ secondOutbound.expectedBodiesReceived("test-second");
+ secondOutbound.expectedHeaderReceived("context", "second");
+ secondOutbound.message(0).exchange().matches(fromCamelContext("second"));
+
+ secondInbound.sendBody("direct:inbound", "test-second");
+
+ assertIsSatisfied(2L, TimeUnit.SECONDS, secondOutbound);
+ }
+}
[3/4] camel git commit: Polish formatting in CdiCamelFactory
Posted by as...@apache.org.
Polish formatting in CdiCamelFactory
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ca202198
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ca202198
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ca202198
Branch: refs/heads/camel-2.17.x
Commit: ca202198472c20236efd3bb4f9c9ac933183719f
Parents: 1d28792
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Mon Apr 4 10:38:34 2016 +0200
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Mon Apr 4 14:11:12 2016 +0200
----------------------------------------------------------------------
.../main/java/org/apache/camel/cdi/CdiCamelFactory.java | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ca202198/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
index 29e9227..9ee9f84 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
@@ -104,7 +104,9 @@ final class CdiCamelFactory {
private static MockEndpoint mockEndpointFromUri(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
Uri uri = CdiSpiHelper.getQualifierByType(ip, Uri.class);
try {
- CamelContext context = uri.context().isEmpty() ? selectContext(ip, instance, extension) : selectContext(uri.context(), instance);
+ CamelContext context = uri.context().isEmpty()
+ ? selectContext(ip, instance, extension)
+ : selectContext(uri.context(), instance);
return context.getEndpoint(uri.value(), MockEndpoint.class);
} catch (Exception cause) {
throw new InjectionException("Error injecting mock endpoint annotated with " + uri
@@ -121,7 +123,9 @@ final class CdiCamelFactory {
private static MockEndpoint createMockEndpoint(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
Mock mock = CdiSpiHelper.getQualifierByType(ip, Mock.class);
try {
- CamelContext context = mock.context().isEmpty() ? selectContext(ip, instance, extension) : selectContext(mock.context(), instance);
+ CamelContext context = mock.context().isEmpty()
+ ? selectContext(ip, instance, extension)
+ : selectContext(mock.context(), instance);
return context.getEndpoint(mock.value(), MockEndpoint.class);
} catch (Exception cause) {
throw new InjectionException("Error injecting mock endpoint annotated with " + mock + " into " + ip, cause);
@@ -134,7 +138,9 @@ final class CdiCamelFactory {
private static Endpoint endpoint(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
Uri uri = CdiSpiHelper.getQualifierByType(ip, Uri.class);
try {
- CamelContext context = uri.context().isEmpty() ? selectContext(ip, instance, extension) : selectContext(uri.context(), instance);
+ CamelContext context = uri.context().isEmpty()
+ ? selectContext(ip, instance, extension)
+ : selectContext(uri.context(), instance);
return context.getEndpoint(uri.value(), Endpoint.class);
} catch (Exception cause) {
throw new InjectionException("Error injecting endpoint annotated with " + uri + " into " + ip, cause);
[2/4] camel git commit: Remove redundant default parameter value
Posted by as...@apache.org.
Remove redundant default parameter value
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1d28792a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1d28792a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1d28792a
Branch: refs/heads/camel-2.17.x
Commit: 1d28792a86b1af3ed1df2881f9910e2bfd9a10da
Parents: eab03dd
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Mon Apr 4 10:34:50 2016 +0200
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Mon Apr 4 14:11:00 2016 +0200
----------------------------------------------------------------------
.../src/main/java/org/apache/camel/cdi/CdiCamelFactory.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/1d28792a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
index ecd309c..29e9227 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
@@ -114,7 +114,7 @@ final class CdiCamelFactory {
// Maintained for backward compatibility reason though this is redundant with @Uri
// see https://issues.apache.org/jira/browse/CAMEL-5553?focusedCommentId=13445936&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13445936
- @Mock("")
+ @Mock
@Produces
@Typed(MockEndpoint.class)
// Qualifiers are dynamically added in CdiCamelExtension
[4/4] camel git commit: CAMEL-9811: Add support for consumer template
injection
Posted by as...@apache.org.
CAMEL-9811: Add support for consumer template injection
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/fbb0b8c7
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/fbb0b8c7
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/fbb0b8c7
Branch: refs/heads/camel-2.17.x
Commit: fbb0b8c7e05d065b0ad818c476895cb5c9ebda60
Parents: ca20219
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Mon Apr 4 14:05:24 2016 +0200
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Mon Apr 4 14:11:24 2016 +0200
----------------------------------------------------------------------
.../org/apache/camel/cdi/CdiCamelExtension.java | 13 +-
.../org/apache/camel/cdi/CdiCamelFactory.java | 7 ++
.../camel/cdi/test/ConsumerTemplateTest.java | 64 ++++++++++
.../test/MultiContextConsumerTemplateTest.java | 123 +++++++++++++++++++
4 files changed, 205 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/fbb0b8c7/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index 5d79f46..19e3eba 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -55,6 +55,7 @@ import org.apache.camel.BeanInject;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.Consume;
+import org.apache.camel.ConsumerTemplate;
import org.apache.camel.Converter;
import org.apache.camel.Endpoint;
import org.apache.camel.EndpointInject;
@@ -157,6 +158,10 @@ public class CdiCamelExtension implements Extension {
producerBeans.put(ppm.getAnnotatedProducerMethod().getJavaMember(), ppm.getBean());
}
+ private void consumerTemplateBeans(@Observes ProcessProducerMethod<ConsumerTemplate, CdiCamelFactory> ppm) {
+ producerBeans.put(ppm.getAnnotatedProducerMethod().getJavaMember(), ppm.getBean());
+ }
+
private void producerTemplateBeans(@Observes ProcessProducerMethod<ProducerTemplate, CdiCamelFactory> ppm) {
producerBeans.put(ppm.getAnnotatedProducerMethod().getJavaMember(), ppm.getBean());
}
@@ -169,7 +174,9 @@ public class CdiCamelExtension implements Extension {
continue;
}
Class<?> type = CdiSpiHelper.getRawType(am.getBaseType());
- if (Endpoint.class.isAssignableFrom(type) || ProducerTemplate.class.equals(type)) {
+ if (Endpoint.class.isAssignableFrom(type)
+ || ConsumerTemplate.class.equals(type)
+ || ProducerTemplate.class.equals(type)) {
Set<Annotation> qualifiers = CdiSpiHelper.getQualifiers(am, manager);
producerQualifiers.put(am.getJavaMember(), qualifiers);
Set<Annotation> annotations = new HashSet<>(am.getAnnotations());
@@ -237,7 +244,9 @@ public class CdiCamelExtension implements Extension {
qualifiers.addAll(ip.getQualifiers());
}
} else {
- if (Endpoint.class.isAssignableFrom(type) || ProducerTemplate.class.isAssignableFrom(type)) {
+ if (Endpoint.class.isAssignableFrom(type)
+ || ConsumerTemplate.class.equals(type)
+ || ProducerTemplate.class.equals(type)) {
qualifiers.addAll(CdiSpiHelper.excludeElementOfTypes(contextQualifiers, Default.class, Named.class));
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/fbb0b8c7/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
index 9ee9f84..965da41 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
@@ -38,6 +38,7 @@ import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.util.TypeLiteral;
import org.apache.camel.CamelContext;
+import org.apache.camel.ConsumerTemplate;
import org.apache.camel.Endpoint;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.TypeConverter;
@@ -51,6 +52,12 @@ final class CdiCamelFactory {
}
@Produces
+ // Qualifiers are dynamically added in CdiCamelExtension
+ private static ConsumerTemplate consumerTemplate(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
+ return selectContext(ip, instance, extension).createConsumerTemplate();
+ }
+
+ @Produces
@Default @Uri("")
// Qualifiers are dynamically added in CdiCamelExtension
private static ProducerTemplate producerTemplate(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
http://git-wip-us.apache.org/repos/asf/camel/blob/fbb0b8c7/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java
new file mode 100644
index 0000000..98e0c10
--- /dev/null
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class ConsumerTemplateTest {
+
+ @Inject
+ private ProducerTemplate producer;
+
+ @Inject
+ private ConsumerTemplate consumer;
+
+ @Deployment
+ public static Archive<?> deployment() {
+ return ShrinkWrap.create(JavaArchive.class)
+ // Camel CDI
+ .addPackage(CdiCamelExtension.class.getPackage())
+ // Bean archive deployment descriptor
+ .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+ }
+
+ @Test
+ public void sendThenReceiveBody() {
+ producer.sendBody("seda:foo", "test");
+
+ String body = consumer.receiveBody("seda:foo", TimeUnit.SECONDS.toMillis(1L), String.class);
+
+ assertThat("Body is incorrect!", body, is(equalTo("test")));
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/fbb0b8c7/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextConsumerTemplateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextConsumerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextConsumerTemplateTest.java
new file mode 100644
index 0000000..e5940ea
--- /dev/null
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextConsumerTemplateTest.java
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ContextName;
+import org.apache.camel.cdi.bean.DefaultCamelContextBean;
+import org.apache.camel.cdi.bean.FirstCamelContextBean;
+import org.apache.camel.cdi.bean.SecondCamelContextBean;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class MultiContextConsumerTemplateTest {
+
+ @Inject
+ private CamelContext defaultCamelContext;
+
+ @Inject
+ private ConsumerTemplate defaultConsumer;
+
+ @Inject
+ private ProducerTemplate defaultProducer;
+
+ @Inject @ContextName("first")
+ private CamelContext firstCamelContext;
+
+ @Inject @ContextName("first")
+ private ConsumerTemplate firstConsumer;
+
+ @Inject @ContextName("first")
+ private ProducerTemplate firstProducer;
+
+ @Inject @ContextName("second")
+ private CamelContext secondCamelContext;
+
+ @Inject @ContextName("second")
+ private ConsumerTemplate secondConsumer;
+
+ @Inject @ContextName("second")
+ private ProducerTemplate secondProducer;
+
+ @Deployment
+ public static Archive<?> deployment() {
+ return ShrinkWrap.create(JavaArchive.class)
+ // Camel CDI
+ .addPackage(CdiCamelExtension.class.getPackage())
+ // Test classes
+ .addClasses(
+ DefaultCamelContextBean.class,
+ FirstCamelContextBean.class,
+ SecondCamelContextBean.class)
+ // Bean archive deployment descriptor
+ .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+ }
+
+ @Test
+ @InSequence(1)
+ public void configureCamelContexts() throws Exception {
+ secondCamelContext.startAllRoutes();
+ }
+
+ @Test
+ @InSequence(2)
+ public void receiveBodyFromDefaultCamelContext() {
+ defaultProducer.sendBody("seda:foo", "foo");
+
+ String body = defaultConsumer.receiveBody("seda:foo", TimeUnit.SECONDS.toMillis(1L), String.class);
+
+ assertThat("Body is incorrect!", body, is(equalTo("foo")));
+ }
+
+ @Test
+ @InSequence(3)
+ public void receiveBodyFromFirstCamelContext() {
+ firstProducer.sendBody("seda:bar", "bar");
+
+ String body = firstConsumer.receiveBody("seda:bar", TimeUnit.SECONDS.toMillis(1L), String.class);
+
+ assertThat("Body is incorrect!", body, is(equalTo("bar")));
+ }
+
+ @Test
+ @InSequence(4)
+ public void receiveBodyFromSecondCamelContext() {
+ secondProducer.sendBody("seda:baz", "baz");
+
+ String body = secondConsumer.receiveBody("seda:baz", TimeUnit.SECONDS.toMillis(1L), String.class);
+
+ assertThat("Body is incorrect!", body, is(equalTo("baz")));
+ }
+}