Repository: camel Updated Branches: refs/heads/camel-2.17.x 2cab1a1c2 -> a1a81ddd7
CAMEL-9769: camel-spring-javaconfig - Make the main class easier Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a1a81ddd Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a1a81ddd Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a1a81ddd Branch: refs/heads/camel-2.17.x Commit: a1a81ddd7b7949a989237040deebf4a98d0f1ec3 Parents: 2cab1a1 Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Mar 28 13:25:42 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Mar 28 13:28:56 2016 +0200 ---------------------------------------------------------------------- .../spring/javaconfig/CamelConfiguration.java | 16 ++-- .../apache/camel/spring/javaconfig/Main.java | 77 +++++++++++++++----- .../SingleRouteCamelConfiguration.java | 4 + 3 files changed, 71 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/a1a81ddd/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java index cf4d6e6..d8aaf23 100644 --- a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java +++ b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java @@ -42,15 +42,13 @@ import org.springframework.context.annotation.Configuration; * <a * href="http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-annotation-config"> * Spring annotation-based</a> configurations for working with Camel. Unless {@link #routes()} method is overridden, this configuration - * automagically load all the {@link org.apache.camel.builder.RouteBuilder} instances available in the Spring context. + * automatically load all the {@link org.apache.camel.builder.RouteBuilder} instances available in the Spring context. */ @Configuration public abstract class CamelConfiguration implements BeanFactoryAware, ApplicationContextAware { private BeanFactory beanFactory; - private AutowireCapableBeanFactory autowireCapableBeanFactory; - private ApplicationContext applicationContext; public void setBeanFactory(BeanFactory beanFactory) { @@ -134,7 +132,7 @@ public abstract class CamelConfiguration implements BeanFactoryAware, Applicatio } /** - * Returns the CamelContext + * Get's the {@link CamelContext} to be used. */ @Bean public CamelContext camelContext() throws Exception { @@ -143,13 +141,15 @@ public abstract class CamelConfiguration implements BeanFactoryAware, Applicatio List<RouteBuilder> routes = routes(); for (RoutesBuilder route : routes) { camelContext.addRoutes(route); - } + } return camelContext; } - - // Can register the camel component, language here + + /** + * Callback to setup {@link CamelContext} before its started + */ protected void setupCamelContext(CamelContext camelContext) throws Exception { - + // noop } /** http://git-wip-us.apache.org/repos/asf/camel/blob/a1a81ddd/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/Main.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/Main.java b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/Main.java index 0d63c4e..1d6997f 100644 --- a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/Main.java +++ b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/Main.java @@ -14,12 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.camel.spring.javaconfig; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; + import org.apache.camel.util.ObjectHelper; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -31,22 +31,22 @@ import org.springframework.context.support.AbstractApplicationContext; public class Main extends org.apache.camel.spring.Main { private String basedPackages; - - private String configClassesString; - + private String configClasses; + private Class[] configClass; + public Main() { addOption(new ParameterOption("bp", "basedPackages", - "Sets the based packages of spring java config ApplicationContext", "basedPackages") { + "Sets the based packages of Spring java config ApplicationContext", "basedPackages") { protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) { setBasedPackages(parameter); } }); addOption(new ParameterOption("cc", "configClasses", - "Sets the config Class of spring java config ApplicationContext", "configureClasses") { + "Sets the config of Spring java config ApplicationContext", "configureClasses") { protected void doProcess(String arg, String parameter, LinkedList<String> remainingArgs) { - setConfigClassesString(parameter); + setConfigClasses(parameter); } }); } @@ -56,27 +56,63 @@ public class Main extends org.apache.camel.spring.Main { instance = main; main.run(args); } - + + /** + * Sets the base packages where Spring annotation scanning is performed. + * You can separate multiple packages using comma or semi colon. + */ public void setBasedPackages(String config) { basedPackages = config; } - + public String getBasedPackages() { return basedPackages; } + + /** + * Sets the name of Spring <tt>@Configuration</tt> classes to use. + * You can separate multiple classes using comma or semi colon. + */ + public void setConfigClasses(String config) { + configClasses = config; + } + public String getConfigClasses() { + return configClasses; + } + + /** + * @deprecated use {@link #setConfigClasses(String)} + */ + @Deprecated public void setConfigClassesString(String config) { - configClassesString = config; + setConfigClasses(config); } - + + /** + * @deprecated use {@link #getConfigClasses()} + */ + @Deprecated public String getConfigClassesString() { - return configClassesString; + return getConfigClasses(); } - + + public Class[] getConfigClass() { + return configClass; + } + + /** + * Sets the Spring <tt>@Configuration</tt> classes to use. + */ + public void setConfigClass(Class... configClass) { + this.configClass = configClass; + } + private Class<?>[] getConfigClasses(String configureClasses) { List<Class<?>> answer = new ArrayList<Class<?>>(); - String[] classes = configureClasses.split(";"); + String[] classes = configureClasses.split("(;|,)"); for (String className : classes) { + className = className.trim(); Class<?> configClass = ObjectHelper.loadClass(className); if (configClass != null) { answer.add(configClass); @@ -91,21 +127,26 @@ public class Main extends org.apache.camel.spring.Main { if (parentContext != null) { acApplicationContext.setParent(parentContext); } - if (getConfigClassesString() != null) { - Class<?>[] configClasses = getConfigClasses(getConfigClassesString()); + if (getConfigClasses() != null) { + Class<?>[] configClasses = getConfigClasses(getConfigClasses()); for (Class<?> cls : configClasses) { acApplicationContext.register(cls); } } + if (getConfigClass() != null) { + for (Class<?> cls : getConfigClass()) { + acApplicationContext.register(cls); + } + } if (getBasedPackages() != null) { - String[] basePackages = getBasedPackages().split(";"); + String[] basePackages = getBasedPackages().split("(;|,)"); for (String basePackage : basePackages) { + basePackage = basePackage.trim(); acApplicationContext.scan(basePackage); } } acApplicationContext.refresh(); return acApplicationContext; - } } http://git-wip-us.apache.org/repos/asf/camel/blob/a1a81ddd/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/SingleRouteCamelConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/SingleRouteCamelConfiguration.java b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/SingleRouteCamelConfiguration.java index fd378ab..6be3d5a 100644 --- a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/SingleRouteCamelConfiguration.java +++ b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/SingleRouteCamelConfiguration.java @@ -28,6 +28,10 @@ import org.springframework.context.annotation.Bean; * href="http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-annotation-config"> * Spring annotation-based</a> configurations to configure a {@link org.apache.camel.CamelContext} with a single * {@link RouteBuilder} instance. + * <p/> + * You may want to use Spring's {@link org.springframework.stereotype.Component} annotation and mark your Camel + * {@link RouteBuilder} classes using this annotation and have it automatic discovered, if you are using + * Spring's annotation scanner. */ public abstract class SingleRouteCamelConfiguration extends CamelConfiguration {