Author: cmoulliard
Date: Sat Oct 13 14:37:00 2012
New Revision: 1397841

URL: http://svn.apache.org/viewvc?rev=1397841&view=rev
Log:
camel-5700: Apply patch

Modified:
    
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
    
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelContextConfig.java
    
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java
    
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/InjectLiteral.java

Modified: 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java?rev=1397841&r1=1397840&r2=1397841&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java 
(original)
+++ 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java 
Sat Oct 13 14:37:00 2012
@@ -16,36 +16,34 @@
  */
 package org.apache.camel.cdi;
 
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.main.MainSupport;
 import org.apache.camel.view.ModelFileGenerator;
-import org.apache.deltaspike.cdise.api.CdiContainer;
-import org.apache.deltaspike.cdise.api.CdiContainerLoader;
 import org.apache.deltaspike.core.api.provider.BeanProvider;
 
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * Allows Camel and CDI applications to be booted up on the command line as a 
Java Application
  */
-public class Main extends MainSupport {
+public abstract class Main extends MainSupport { // abstract to prevent cdi 
management
     private static Main instance;
     private JAXBContext jaxbContext;
-    private CdiContainer cdiContainer;
+    private Object cdiContainer; // we don't want to need cdictrl API in OSGi
 
     public Main() {
         // add options...
     }
 
     public static void main(String... args) throws Exception {
-        Main main = new Main();
+        Main main = new Main() {};
         instance = main;
         main.enableHangupSupport();
         main.run(args);
@@ -123,16 +121,17 @@ public class Main extends MainSupport {
 
     @Override
     protected void doStart() throws Exception {
-        cdiContainer = CdiContainerLoader.getCdiContainer();
-        cdiContainer.boot();
-        cdiContainer.getContextControl().startContexts();
-
+        org.apache.deltaspike.cdise.api.CdiContainer container = 
org.apache.deltaspike.cdise.api.CdiContainerLoader.getCdiContainer();
+        container.boot();
+        container.getContextControl().startContexts();
+        cdiContainer = container;
         super.doStart();
     }
 
+
     @Override
     protected void doStop() throws Exception {
         super.doStop();
-        cdiContainer.shutdown();
+        ((org.apache.deltaspike.cdise.api.CdiContainer) 
cdiContainer).shutdown();
     }
 }

Modified: 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelContextConfig.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelContextConfig.java?rev=1397841&r1=1397840&r2=1397841&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelContextConfig.java
 (original)
+++ 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelContextConfig.java
 Sat Oct 13 14:37:00 2012
@@ -24,6 +24,7 @@ import java.util.Set;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
 
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.RuntimeCamelException;
@@ -36,12 +37,20 @@ import org.apache.camel.util.ObjectHelpe
  */
 public class CamelContextConfig {
     private final List<Bean<?>> routeBuilderBeans = new ArrayList<Bean<?>>();
+    private final List<ProcessAnnotatedType<?>> patRouteBuilders = new 
ArrayList<ProcessAnnotatedType<?>>();
 
     public void addRouteBuilderBean(Bean<?> bean) {
         routeBuilderBeans.add(bean);
     }
 
     public void configure(CdiCamelContext camelContext, BeanManager 
beanManager) {
+        for (ProcessAnnotatedType<?> pat : patRouteBuilders) {
+            final Set<Bean<?>> beans = 
beanManager.getBeans(pat.getAnnotatedType().getJavaClass());
+            final Bean<?> bean = beanManager.resolve(beans);
+            routeBuilderBeans.add(bean);
+        }
+        patRouteBuilders.clear();
+
         for (Bean<?> bean : routeBuilderBeans) {
             CreationalContext<?> createContext = 
beanManager.createCreationalContext(bean);
             Class<?> beanClass = bean.getBeanClass();
@@ -74,4 +83,8 @@ public class CamelContextConfig {
             }
         }
     }
+
+    public void addRouteBuilderBean(final ProcessAnnotatedType<?> process) {
+        patRouteBuilders.add(process);
+    }
 }

Modified: 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java?rev=1397841&r1=1397840&r2=1397841&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java
 (original)
+++ 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/CamelExtension.java
 Sat Oct 13 14:37:00 2012
@@ -16,14 +16,21 @@
  */
 package org.apache.camel.cdi.internal;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-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.api.provider.BeanProvider;
+import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder;
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.event.Observes;
@@ -39,34 +46,31 @@ import javax.enterprise.inject.spi.Proce
 import javax.enterprise.inject.spi.ProcessBean;
 import javax.enterprise.inject.spi.ProcessInjectionTarget;
 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.Collection;
+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.
  */
 public class CamelExtension implements Extension {
+    private static class InjectLiteral extends AnnotationLiteral<Inject> 
implements Inject {}
 
     CamelContextMap camelContextMap;
 
-    private Set<Bean<?>> eagerBeans = new HashSet<Bean<?>>();
-    private Map<String, CamelContextConfig> camelContextConfigMap = new 
HashMap<String, CamelContextConfig>();
-    private List<CamelContextBean> camelContextBeans = new 
ArrayList<CamelContextBean>();
+    private final Set<Bean<?>> eagerBeans = new HashSet<Bean<?>>();
+    private final Map<String, CamelContextConfig> camelContextConfigMap = new 
HashMap<String, CamelContextConfig>();
+    private final List<CamelContextBean> camelContextBeans = new 
ArrayList<CamelContextBean>();
+    private final Collection<ProcessAnnotatedType<?>> routeBuilders = new 
ArrayList<ProcessAnnotatedType<?>>();
 
     public CamelExtension() {
     }
@@ -101,6 +105,21 @@ public class CamelExtension implements E
         }
     }
 
+    protected <T> void detectRouteBuilders(@Observes ProcessAnnotatedType<T> 
process)
+            throws Exception {
+        AnnotatedType<T> annotatedType = process.getAnnotatedType();
+        ContextName annotation = 
annotatedType.getAnnotation(ContextName.class);
+        Class<T> javaClass = annotatedType.getJavaClass();
+        if (annotation != null && isRoutesBean(javaClass)) {
+            addRouteBuilderBean(process, annotation);
+        }
+    }
+
+    private void addRouteBuilderBean(final ProcessAnnotatedType<?> process, 
ContextName annotation) {
+        final CamelContextConfig config = getCamelConfig(annotation.value());
+        config.addRouteBuilderBean(process);
+    }
+
     /**
      * Disable creation of default CamelContext bean and rely on context 
created
      * and managed by extension.
@@ -169,15 +188,20 @@ public class CamelExtension implements E
     private void addRouteBuilderBean(Bean<?> bean, ContextName annotation) {
         if (annotation != null) {
             String contextName = annotation.value();
-            CamelContextConfig config = camelContextConfigMap.get(contextName);
-            if (config == null) {
-                config = new CamelContextConfig();
-                camelContextConfigMap.put(contextName, config);
-            }
+            CamelContextConfig config = getCamelConfig(contextName);
             config.addRouteBuilderBean(bean);
         }
     }
 
+    private CamelContextConfig getCamelConfig(final String contextName) {
+        CamelContextConfig config = camelContextConfigMap.get(contextName);
+        if (config == null) {
+            config = new CamelContextConfig();
+            camelContextConfigMap.put(contextName, config);
+        }
+        return config;
+    }
+
     /**
      * 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
@@ -317,6 +341,6 @@ public class CamelExtension implements E
     }
 
     protected boolean isRoutesBean(Class<?> returnType) {
-        return RoutesBuilder.class.isAssignableFrom(returnType) || 
RouteContainer.class.isAssignableFrom(returnType);
+        return (RoutesBuilder.class.isAssignableFrom(returnType) || 
RouteContainer.class.isAssignableFrom(returnType)) && 
!Modifier.isAbstract(returnType.getModifiers());
     }
 }

Modified: 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/InjectLiteral.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/InjectLiteral.java?rev=1397841&r1=1397840&r2=1397841&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/InjectLiteral.java
 (original)
+++ 
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/cdi/internal/InjectLiteral.java
 Sat Oct 13 14:37:00 2012
@@ -1,28 +0,0 @@
-/**
- * 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.internal;
-
-import javax.enterprise.util.AnnotationLiteral;
-import javax.inject.Inject;
-
-/**
- * Literal used to mark method as injectable.
- */
-@SuppressWarnings("all")
-class InjectLiteral extends AnnotationLiteral<Inject> implements Inject {
-
-}
\ No newline at end of file


Reply via email to