You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2008/05/14 06:57:25 UTC

svn commit: r656103 - in /activemq/camel/trunk/components/camel-spring/src: main/java/org/apache/camel/spring/ main/java/org/apache/camel/spring/handler/ test/java/org/apache/camel/spring/config/scan/route/ test/resources/org/apache/camel/spring/config...

Author: ningjiang
Date: Tue May 13 21:57:24 2008
New Revision: 656103

URL: http://svn.apache.org/viewvc?rev=656103&view=rev
Log:
CAMEL-361 Get CamelProcessor work with RouterBuilder

Modified:
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/RouteBuilderFinder.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/route/MyRouteBuilder.java
    activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/scan/componentScan.xml

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java?rev=656103&r1=656102&r2=656103&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java Tue May 13 21:57:24 2008
@@ -69,6 +69,7 @@
     }
 
     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+
         injectFields(bean);
         injectMethods(bean);
         if (bean instanceof CamelContextAware) {

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=656103&r1=656102&r2=656103&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java Tue May 13 21:57:24 2008
@@ -43,6 +43,7 @@
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.ApplicationEvent;
@@ -96,6 +97,8 @@
     private ClassLoader contextClassLoaderOnStart;
     @XmlTransient
     private InstrumentationAgent instrumentationAgent;
+    @XmlTransient
+    private BeanPostProcessor beanPostProcessor;
 
     public CamelContextFactoryBean() {
 
@@ -116,6 +119,16 @@
     }
 
     public void afterPropertiesSet() throws Exception {
+        // Set the application context and camelContext for the beanPostProcessor
+        if (beanPostProcessor != null) {
+            if (beanPostProcessor instanceof ApplicationContextAware) {
+                ((ApplicationContextAware)beanPostProcessor).setApplicationContext(applicationContext);
+            }
+            if (beanPostProcessor instanceof CamelBeanPostProcessor) {
+                ((CamelBeanPostProcessor)beanPostProcessor).setCamelContext(getContext());
+            }
+
+        }
         // lets force any lazy creation
         getContext().addRouteDefinitions(routes);
 
@@ -239,6 +252,14 @@
         this.mbeanServer = mbeanServer;
     }
 
+    public void setBeanPostProcessor(BeanPostProcessor postProcessor) {
+        this.beanPostProcessor = postProcessor;
+    }
+
+    public BeanPostProcessor getBeanPostProcessor() {
+        return beanPostProcessor;
+    }
+
     public boolean isJmxEnabled() {
         return useJmx != null && useJmx.booleanValue();
     }
@@ -313,7 +334,7 @@
      */
     protected void findRouteBuiders() throws Exception, InstantiationException {
         if (packages != null && packages.length > 0) {
-            RouteBuilderFinder finder = new RouteBuilderFinder(getContext(), packages, contextClassLoaderOnStart);
+            RouteBuilderFinder finder = new RouteBuilderFinder(getContext(), packages, contextClassLoaderOnStart, getBeanPostProcessor());
             finder.appendBuilders(additionalBuilders);
         }
     }

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/RouteBuilderFinder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/RouteBuilderFinder.java?rev=656103&r1=656102&r2=656103&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/RouteBuilderFinder.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/RouteBuilderFinder.java Tue May 13 21:57:24 2008
@@ -25,6 +25,7 @@
 import org.apache.camel.util.ResolverUtil;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.context.ApplicationContext;
 
 /**
@@ -38,13 +39,15 @@
     private final String[] packages;
     private ApplicationContext applicationContext;
     private ResolverUtil resolver = new ResolverUtil();
+    private BeanPostProcessor beanPostProcessor;
 
-    public RouteBuilderFinder(SpringCamelContext camelContext, String[] packages, ClassLoader classLoader) {
+    public RouteBuilderFinder(SpringCamelContext camelContext, String[] packages, ClassLoader classLoader, BeanPostProcessor postProcessor) {
         this.camelContext = camelContext;
         this.applicationContext = camelContext.getApplicationContext();
         this.packages = packages;
+        this.beanPostProcessor = postProcessor;
 
-        // lets add all the available class loaders just in case of wierdness
+        // lets add all the available class loaders just in case of weirdness
         // we could make this more strict once we've worked out all the gremlins
         // in servicemix-camel
         Set set = resolver.getClassLoaders();
@@ -57,6 +60,7 @@
 */
     }
 
+
     public String[] getPackages() {
         return packages;
     }
@@ -78,6 +82,10 @@
             }
             if (isValidClass(aClass)) {
                 RouteBuilder builder = instantiateBuilder(aClass);
+                if (beanPostProcessor != null) {
+                    // Inject the annotated resource
+                    beanPostProcessor.postProcessBeforeInitialization(builder, builder.toString());
+                }
                 list.add(builder);
             }
         }

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java?rev=656103&r1=656102&r2=656103&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java Tue May 13 21:57:24 2008
@@ -96,11 +96,12 @@
         parserMap.put(elementName, parser);
     }
 
-    protected void createBeanPostProcessor(ParserContext parserContext, String contextId, Element childElement) {
+    protected void createBeanPostProcessor(ParserContext parserContext, String contextId, Element childElement, BeanDefinitionBuilder parentBuilder) {
         String beanPostProcessorId = contextId + ":beanPostProcessor";
         childElement.setAttribute("id", beanPostProcessorId);
         BeanDefinition definition = beanPostProcessorParser.parse(childElement, parserContext);
         definition.getPropertyValues().addPropertyValue("camelContext", new RuntimeBeanReference(contextId));
+        parentBuilder.addPropertyReference("beanPostProcessor", beanPostProcessorId);
     }
 
     protected void registerScriptParser(String elementName, String engineName) {
@@ -182,7 +183,7 @@
                     Element childElement = (Element)child;
                     String localName = child.getLocalName();
                     if (localName.equals("beanPostProcessor")) {
-                        createBeanPostProcessor(parserContext, contextId, childElement);
+                        createBeanPostProcessor(parserContext, contextId, childElement, builder);
                         createdBeanPostProcessor = true;
                     } else if (localName.equals("endpoint")) {
                         BeanDefinition definition = endpointParser.parse(childElement, parserContext);
@@ -210,10 +211,10 @@
             // lets inject the namespaces into any namespace aware POJOs
             injectNamespaces(element);
             if (!createdBeanPostProcessor) {
-                // no bean processor element so lets add a fake one
+                // no bean processor element so lets create it by ourself
                 Element childElement = element.getOwnerDocument().createElement("beanPostProcessor");
                 element.appendChild(childElement);
-                createBeanPostProcessor(parserContext, contextId, childElement);
+                createBeanPostProcessor(parserContext, contextId, childElement, builder);
             }
         }
     }

Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/route/MyRouteBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/route/MyRouteBuilder.java?rev=656103&r1=656102&r2=656103&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/route/MyRouteBuilder.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/route/MyRouteBuilder.java Tue May 13 21:57:24 2008
@@ -27,13 +27,15 @@
 
     MyProcessor component;
 
-    @Autowired
+    @EndpointInject(name = "start")
+    Endpoint startEndpoint;
+
     @EndpointInject(name = "result")
     Endpoint resultEndpoint;
 
     @Override
     public void configure() throws Exception {
-        from("direct:start").process(component).to(resultEndpoint);
+        from(startEndpoint).process(component).to(resultEndpoint);
     }
 
     @Autowired

Modified: activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/scan/componentScan.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/scan/componentScan.xml?rev=656103&r1=656102&r2=656103&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/scan/componentScan.xml (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/scan/componentScan.xml Tue May 13 21:57:24 2008
@@ -27,6 +27,7 @@
 
   <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
     <package>org.apache.camel.spring.config.scan.route</package>
+    <endpoint id="start" uri="direct:start"/>
     <endpoint id="result" uri="mock:end"/>
   </camelContext>