diff --git a/components/camel-cdi/pom.xml b/components/camel-cdi/pom.xml index cafc652537f01..de1ec6d22ddf5 100644 --- a/components/camel-cdi/pom.xml +++ b/components/camel-cdi/pom.xml @@ -15,7 +15,8 @@ See the License for the specific language governing permissions and limitations under the License. --> - + 4.0.0 @@ -43,12 +44,22 @@ org.apache.camel.cdi.component.*;${camel.osgi.version} - org.ops4j.pax.cdi.extension; extension=camel-cdi-extension + org.ops4j.pax.cdi.extension; extension=camel-cdi-extension + 1.1.7 + 0.5 + 1.0-SP4 + + javax.enterprise + cdi-api + ${cdi-api.version} + provided + + org.apache.camel @@ -65,6 +76,7 @@ org.apache.deltaspike.core deltaspike-core-impl ${deltaspike-version} + runtime @@ -74,21 +86,6 @@ ${deltaspike-version} - - org.apache.geronimo.specs - geronimo-atinject_1.0_spec - ${geronimo-atinject-1.0-spec-version} - - - org.apache.geronimo.specs - geronimo-jcdi_1.0_spec - ${geronimo-jcdi-1.0-spec-version} - - - org.apache.geronimo.specs - geronimo-interceptor_1.1_spec - ${geronimo-interceptor-1.1-spec-version} - @@ -137,15 +134,55 @@ ${openwebbeans-version} test + + org.apache.geronimo.specs + geronimo-atinject_1.0_spec + ${geronimo-atinject-1.0-spec-version} + test + + + org.apache.geronimo.specs + geronimo-jcdi_1.0_spec + ${geronimo-jcdi-1.0-spec-version} + test + + + org.apache.geronimo.specs + geronimo-interceptor_1.1_spec + ${geronimo-interceptor-1.1-spec-version} + test + - weld + weld-1 true + + + org.apache.deltaspike.cdictrl + deltaspike-cdictrl-weld + ${deltaspike-version} + test + + + org.jboss.weld.se + weld-se-core + ${weld-version} + test + + + + + + weld-2 + + 2.1.0.Final + 1.1 + org.apache.deltaspike.cdictrl @@ -159,6 +196,7 @@ ${weld-version} provided + diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java index 44a44b588633c..955fd0946ddce 100644 --- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java +++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java @@ -16,15 +16,20 @@ */ package org.apache.camel.cdi.internal; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import org.apache.camel.CamelContext; +import org.apache.camel.CamelContextAware; +import org.apache.camel.Consume; +import org.apache.camel.EndpointInject; +import org.apache.camel.Produce; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.cdi.CdiCamelContext; +import org.apache.camel.cdi.ContextName; +import org.apache.camel.impl.DefaultCamelBeanPostProcessor; +import org.apache.camel.model.RouteContainer; +import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.ReflectionHelper; +import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.event.Observes; @@ -42,22 +47,15 @@ import javax.enterprise.inject.spi.ProcessProducerMethod; import javax.enterprise.util.AnnotationLiteral; import javax.inject.Inject; - -import org.apache.camel.CamelContext; -import org.apache.camel.CamelContextAware; -import org.apache.camel.Consume; -import org.apache.camel.EndpointInject; -import org.apache.camel.Produce; -import org.apache.camel.RoutesBuilder; -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.cdi.CdiCamelContext; -import org.apache.camel.cdi.ContextName; -import org.apache.camel.impl.DefaultCamelBeanPostProcessor; -import org.apache.camel.model.RouteContainer; -import org.apache.camel.util.ObjectHelper; -import org.apache.camel.util.ReflectionHelper; -import org.apache.deltaspike.core.api.provider.BeanProvider; -import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Set of camel specific hooks for CDI. @@ -71,7 +69,9 @@ private static class InjectLiteral extends AnnotationLiteral implements CamelContextMap camelContextMap; private final Set> eagerBeans = new HashSet>(); + private final Map camelContextConfigMap = new HashMap(); + private final List camelContextBeans = new ArrayList(); public CamelExtension() { @@ -94,24 +94,23 @@ public static String getCamelContextName(String context, ContextName annotation) * @param process Annotated type. * @throws Exception In case of exceptions. */ - protected void contextAwareness(@Observes ProcessAnnotatedType process) - throws Exception { - AnnotatedType annotatedType = process.getAnnotatedType(); - Class javaClass = annotatedType.getJavaClass(); - if (CamelContextAware.class.isAssignableFrom(javaClass)) { - Method method = javaClass.getMethod("setCamelContext", CamelContext.class); - AnnotatedTypeBuilder builder = new AnnotatedTypeBuilder() - .readFromType(javaClass) - .addToMethod(method, new InjectLiteral()); - process.setAnnotatedType(builder.create()); - } + protected void contextAwareness(@Observes ProcessAnnotatedType process) + throws Exception { + AnnotatedType at = process.getAnnotatedType(); + + Method method = at.getJavaClass().getMethod("setCamelContext", CamelContext.class); + AnnotatedTypeBuilder builder = new AnnotatedTypeBuilder() + .readFromType(at) + .addToMethod(method, new InjectLiteral()); + process.setAnnotatedType(builder.create()); + } - protected void detectRouteBuilders(@Observes ProcessAnnotatedType process) - throws Exception { - AnnotatedType annotatedType = process.getAnnotatedType(); + protected void detectRouteBuilders(@Observes ProcessAnnotatedType process) + throws Exception { + AnnotatedType annotatedType = process.getAnnotatedType(); ContextName annotation = annotatedType.getAnnotation(ContextName.class); - Class javaClass = annotatedType.getJavaClass(); + Class javaClass = annotatedType.getJavaClass(); if (annotation != null && isRoutesBean(javaClass)) { addRouteBuilderBean(process, annotation); } @@ -128,7 +127,7 @@ private void addRouteBuilderBean(final ProcessAnnotatedType process, ContextN * * @param process Annotated type. */ - protected void disableDefaultContext(@Observes ProcessAnnotatedType process) { + protected void disableDefaultContext(@Observes ProcessAnnotatedType process) { process.veto(); } @@ -205,7 +204,8 @@ private CamelContextConfig getCamelConfig(final String contextName) { } /** - * Lets detect all producer methods createing instances of {@link RouteBuilder} which are annotated with {@link org.apache.camel.cdi.ContextName} + * Lets detect all producer methods createing instances of {@link RouteBuilder} which are annotated with {@link org + * .apache.camel.cdi.ContextName} * so they can be auto-registered */ public void detectProducerRoutes(@Observes ProcessProducerMethod event) { @@ -221,7 +221,7 @@ public void detectProducerRoutes(@Observes ProcessProducerMethod event) { * Lets force the CDI container to create all beans annotated with @Consume so that the consumer becomes active */ public void startConsumeBeans(@Observes AfterDeploymentValidation event, BeanManager beanManager) - throws Exception { + throws Exception { for (CamelContextBean bean : camelContextBeans) { String name = bean.getCamelContextName(); CamelContext context = getCamelContext(name, beanManager); @@ -229,7 +229,7 @@ public void startConsumeBeans(@Observes AfterDeploymentValidation event, BeanMan throw new IllegalStateException( "CamelContext '" + name + "' has not been injected into the CamelContextMap"); } - bean.configureCamelContext((CdiCamelContext)context); + bean.configureCamelContext((CdiCamelContext) context); } for (Bean bean : eagerBeans) { @@ -243,9 +243,9 @@ public void startConsumeBeans(@Observes AfterDeploymentValidation event, BeanMan /** * Lets perform injection of all beans which use Camel annotations */ - public void onInjectionTarget(@Observes ProcessInjectionTarget event) { - final InjectionTarget injectionTarget = event.getInjectionTarget(); - AnnotatedType annotatedType = event.getAnnotatedType(); + public void onInjectionTarget(@Observes ProcessInjectionTarget event) { + final InjectionTarget injectionTarget = event.getInjectionTarget(); + AnnotatedType annotatedType = event.getAnnotatedType(); final Class beanClass = annotatedType.getJavaClass(); // TODO this is a bit of a hack - what should the bean name be? final String beanName = injectionTarget.toString(); @@ -347,6 +347,7 @@ protected static boolean injectAnnotatedField(Field field) { } protected boolean isRoutesBean(Class returnType) { - return (RoutesBuilder.class.isAssignableFrom(returnType) || RouteContainer.class.isAssignableFrom(returnType)) && !Modifier.isAbstract(returnType.getModifiers()); + return (RoutesBuilder.class.isAssignableFrom(returnType) || RouteContainer.class.isAssignableFrom(returnType)) && + !Modifier.isAbstract(returnType.getModifiers()); } } diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/DelegateInjectionTarget.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/DelegateInjectionTarget.java index e8e267febd943..dbd97d19101a2 100644 --- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/DelegateInjectionTarget.java +++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/DelegateInjectionTarget.java @@ -16,16 +16,16 @@ */ package org.apache.camel.cdi.internal; -import java.util.Set; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.InjectionPoint; import javax.enterprise.inject.spi.InjectionTarget; +import java.util.Set; /** * A helper class for creating delegate implementations of {@link InjectionTarget} */ -public abstract class DelegateInjectionTarget implements InjectionTarget { - private final InjectionTarget delegate; +public abstract class DelegateInjectionTarget implements InjectionTarget { + private final InjectionTarget delegate; public DelegateInjectionTarget(InjectionTarget delegate) { this.delegate = delegate; @@ -42,7 +42,7 @@ public Set getInjectionPoints() { } @Override - public void inject(Object instance, CreationalContext ctx) { + public void inject(Object instance, CreationalContext ctx) { delegate.inject(instance, ctx); } @@ -57,7 +57,7 @@ public void preDestroy(Object instance) { } @Override - public Object produce(CreationalContext creationalContext) { + public Object produce(CreationalContext creationalContext) { return delegate.produce(creationalContext); } } diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/EndpointDefinedUsingConfigPropertyTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/EndpointDefinedUsingConfigPropertyTest.java index 52496c2ae6fcc..17d596a0fc3ee 100644 --- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/EndpointDefinedUsingConfigPropertyTest.java +++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/EndpointDefinedUsingConfigPropertyTest.java @@ -16,10 +16,6 @@ */ package org.apache.camel.cdi; -import java.util.ArrayList; -import java.util.List; -import javax.inject.Inject; - import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; import org.apache.camel.Produce; @@ -27,9 +23,13 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.cdi.store.Item; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.deltaspike.core.api.config.annotation.ConfigProperty; +import org.apache.deltaspike.core.api.config.ConfigProperty; import org.junit.Test; +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; + public class EndpointDefinedUsingConfigPropertyTest extends CdiContextTestSupport { @Inject @ConfigProperty(name = "directEndpoint")