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