Add @Default qualifier to @ContextName context bean if there is only one
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b8924bb3 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b8924bb3 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b8924bb3 Branch: refs/heads/master Commit: b8924bb31b7125a03fa7d44e8852c874e5ab8b8a Parents: bca893f Author: Antonin Stefanutti <anto...@stefanutti.fr> Authored: Fri Jan 22 15:15:36 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Jan 22 15:57:19 2016 +0100 ---------------------------------------------------------------------- .../org/apache/camel/cdi/CdiCamelExtension.java | 16 ++-- .../test/RouteBuilderWithContextNameTest.java | 93 ++++++++++++++++++++ 2 files changed, 103 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/b8924bb3/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 6177370..9f80a0f 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 @@ -210,15 +210,19 @@ public class CdiCamelExtension implements Extension { } private void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager manager) { - // Add @ContextName Camel context beans if missing + // Missing @ContextName Camel context qualifiers contextNames.removeAll(contextQualifiers); - for (ContextName name : contextNames) { - abd.addBean(camelContextBean(manager, AnyLiteral.INSTANCE, name)); - } - - // Add a default Camel context bean if any if (contextQualifiers.isEmpty() && contextNames.isEmpty()) { + // Add a @Default Camel context bean if any abd.addBean(camelContextBean(manager, AnyLiteral.INSTANCE, DefaultLiteral.INSTANCE)); + } else if (contextQualifiers.isEmpty() && contextNames.size() == 1) { + // Add a @ContextName and @Default Camel context bean if only one + abd.addBean(camelContextBean(manager, AnyLiteral.INSTANCE, DefaultLiteral.INSTANCE, contextNames.iterator().next())); + } else { + // Add missing @ContextName Camel context beans + for (ContextName name : contextNames) { + abd.addBean(camelContextBean(manager, AnyLiteral.INSTANCE, name)); + } } // Update @ContextName Camel context qualifiers http://git-wip-us.apache.org/repos/asf/camel/blob/b8924bb3/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteBuilderWithContextNameTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteBuilderWithContextNameTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteBuilderWithContextNameTest.java new file mode 100644 index 0000000..4510fb5 --- /dev/null +++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteBuilderWithContextNameTest.java @@ -0,0 +1,93 @@ +/** + * 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.enterprise.inject.Any; +import javax.enterprise.inject.Instance; + +import org.apache.camel.CamelContext; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.ServiceStatus; +import org.apache.camel.cdi.CdiCamelExtension; +import org.apache.camel.cdi.ContextName; +import org.apache.camel.cdi.Uri; +import org.apache.camel.cdi.bean.FirstCamelContextEndpointInjectRoute; +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; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(Arquillian.class) +public class RouteBuilderWithContextNameTest { + + @Deployment + public static Archive<?> deployment() { + return ShrinkWrap.create(JavaArchive.class) + // Camel CDI + .addPackage(CdiCamelExtension.class.getPackage()) + // Test class + .addClass(FirstCamelContextEndpointInjectRoute.class) + // Bean archive deployment descriptor + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); + } + + @Test + public void verifyCamelContexts(@Any Instance<CamelContext> contexts) { + assertThat("Context instances are incorrect!", contexts, + contains( + hasProperty("name", is(equalTo("first"))))); + } + + @Test + public void verifyNamedCamelContext(@ContextName("first") CamelContext first) { + assertThat("Context name is incorrect!", first.getName(), is(equalTo("first"))); + assertThat("Number of routes is incorrect!", first.getRoutes().size(), is(equalTo(1))); + assertThat("Context status is incorrect!", first.getStatus(), is(equalTo(ServiceStatus.Started))); + } + + @Test + public void verifyDefaultCamelContext(CamelContext context) { + assertThat("Context name is incorrect!", context.getName(), is(equalTo("first"))); + assertThat("Number of routes is incorrect!", context.getRoutes().size(), is(equalTo(1))); + assertThat("Context status is incorrect!", context.getStatus(), is(equalTo(ServiceStatus.Started))); + } + + @Test + public void sendMessageToInbound(@Uri("direct:inbound") ProducerTemplate inbound, + @Uri("mock:outbound") MockEndpoint outbound) throws InterruptedException { + outbound.expectedMessageCount(1); + outbound.expectedBodiesReceived("test"); + outbound.expectedHeaderReceived("context", "first"); + + inbound.sendBody("test"); + + assertIsSatisfied(2L, TimeUnit.SECONDS, outbound); + } +}