You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/06/17 13:54:25 UTC

svn commit: r785564 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/impl/ components/camel-spring/ components/camel-spring/src/main/java/org/apache/camel/spring/

Author: davsclaus
Date: Wed Jun 17 11:54:25 2009
New Revision: 785564

URL: http://svn.apache.org/viewvc?rev=785564&view=rev
Log:
CAMEL-1711: Fixed bug where the Camel routes will be started more than once if spring sends multiple refresh events.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/components/camel-spring/pom.xml
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=785564&r1=785563&r2=785564&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Wed Jun 17 11:54:25 2009
@@ -855,6 +855,7 @@
     public void start() throws Exception {
         super.start();
         
+        LOG.debug("Starting routes");
         // the context is now considered started (i.e. isStarted() == true))
         // starting routes is done after, not during context startup
         synchronized (this) {
@@ -862,8 +863,7 @@
                 routeService.start();
             }
         }
-
-        producerServicePool.stop();
+        LOG.debug("Started routes");
 
         LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") started");
     }
@@ -874,7 +874,7 @@
     protected void doStart() throws Exception {
         LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") is starting");
 
-        producerServicePool.start();
+        startServices(producerServicePool);
 
         if (isStreamCacheEnabled()) {
             // only add a new stream cache if not already configured
@@ -941,6 +941,21 @@
         }        
     }
 
+    protected synchronized void doStop() throws Exception {
+        LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") is stopping");
+        stopServices(routeServices.values());
+        stopServices(servicesToClose);
+        if (components != null) {
+            for (Component component : components.values()) {
+                stopServices(component);
+            }
+        }
+        servicesToClose.clear();
+        stopServices(producerServicePool);
+
+        LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") stopped");
+    }
+
     protected void startRouteDefinitions(Collection<RouteDefinition> list) throws Exception {
         if (list != null) {
             for (RouteDefinition route : list) {
@@ -961,20 +976,6 @@
         }
     }
 
-    protected synchronized void doStop() throws Exception {
-        LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") is stopping");
-        stopServices(routeServices.values());
-        stopServices(servicesToClose);
-        if (components != null) {
-            for (Component component : components.values()) {
-                stopServices(component);
-            }
-        }
-        
-        servicesToClose.clear();
-        LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") stopped");
-    }
-
     /**
      * Lets force some lazy initialization to occur upfront before we start any
      * components and create routes
@@ -1161,4 +1162,9 @@
         return routeServices;
     }
 
+    @Override
+    public String toString() {
+        return "DefaultCamelContext(" + getName() + ")";
+    }
+
 }

Modified: camel/trunk/components/camel-spring/pom.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/pom.xml?rev=785564&r1=785563&r2=785564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/pom.xml (original)
+++ camel/trunk/components/camel-spring/pom.xml Wed Jun 17 11:54:25 2009
@@ -40,7 +40,6 @@
     org.apache.camel.spring.*;${camel.osgi.version},
     org.apache.camel.component;${camel.osgi.split.pkg};${camel.osgi.version},
     org.apache.camel.component.event;${camel.osgi.split.pkg};${camel.osgi.version},
-    org.apache.camel.component.file;${camel.osgi.split.pkg};${camel.osgi.version},
     org.apache.camel.component.test;${camel.osgi.split.pkg};${camel.osgi.version},
     org.apache.camel.component.validator;${camel.osgi.split.pkg};${camel.osgi.version},
     org.apache.camel.component.xslt;${camel.osgi.split.pkg};${camel.osgi.version}

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=785564&r1=785563&r2=785564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java Wed Jun 17 11:54:25 2009
@@ -816,7 +816,7 @@
         PackageScanDefinition packageScanDef = getPackageScan();
 
         if (getPackages() != null && getPackages().length > 0) {
-            LOG.warn("Using a packages element to specify packages to search has been deprecated. Please use a package-scan element instead.");
+            LOG.warn("Using a packages element to specify packages to search has been deprecated. Please use a packageScan element instead.");
             if (packageScanDef == null) {
                 packageScanDef = new PackageScanDefinition();
                 setPackageScan(packageScanDef);

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java?rev=785564&r1=785563&r2=785564&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java Wed Jun 17 11:54:25 2009
@@ -53,7 +53,8 @@
  * @version $Revision$
  */
 public class SpringCamelContext extends DefaultCamelContext implements InitializingBean, DisposableBean,
-    ApplicationContextAware, ApplicationListener {
+        ApplicationContextAware, ApplicationListener {
+
     private static final transient Log LOG = LogFactory.getLog(SpringCamelContext.class);
     private ApplicationContext applicationContext;
     private EventEndpoint eventEndpoint;
@@ -78,7 +79,6 @@
         return answer;
     }
 
-
     public static SpringCamelContext springCamelContext(String configLocations) throws Exception {
         return springCamelContext(new ClassPathXmlApplicationContext(configLocations));
     }
@@ -88,11 +88,17 @@
     }
 
     private void maybeStart() throws Exception {
-        if (getShouldStartContext()) {
-            LOG.debug("Starting the CamelContext now that the ApplicationContext has started");
+        if (!getShouldStartContext()) {
+            LOG.info("Not starting Apache Camel as property ShouldStartContext is false");
+            return;
+        }
+
+        if (!isStarted()) {
+            LOG.info("Starting Apache Camel as property ShouldStartContext is true");
             start();
         } else {
-            LOG.debug("Not starting the CamelContext since shouldStartContext property was false.");
+            // ignore as Camel is already started
+            LOG.trace("Ignoring maybeStart() as Apache Camel is already started");
         }
     }
 
@@ -102,7 +108,7 @@
 
     public void onApplicationEvent(ApplicationEvent event) {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("Publishing spring-event: " + event);
+            LOG.debug("onApplicationEvent: " + event);
         }
 
         if (event instanceof ContextRefreshedEvent) {
@@ -113,15 +119,12 @@
             } catch (Exception e) {
                 throw wrapRuntimeCamelException(e);
             }
-            if (eventEndpoint != null) {
-                eventEndpoint.onApplicationEvent(event);
-            }
+        }
+
+        if (eventEndpoint != null) {
+            eventEndpoint.onApplicationEvent(event);
         } else {
-            if (eventEndpoint != null) {
-                eventEndpoint.onApplicationEvent(event);
-            } else {
-                LOG.warn("No spring-event endpoint enabled for: " + event);
-            }
+            LOG.warn("No spring-event endpoint enabled to handle event: " + event);
         }
     }
 
@@ -177,8 +180,7 @@
     }
 
     protected EventEndpoint createEventEndpoint() {
-        EventEndpoint endpoint = getEndpoint("spring-event:default", EventEndpoint.class);
-        return endpoint;
+        return getEndpoint("spring-event:default", EventEndpoint.class);
     }
 
     protected Endpoint convertBeanToEndpoint(String uri, Object bean) {
@@ -203,6 +205,16 @@
 
     public boolean getShouldStartContext() {
         return shouldStartContext;
-    }    
-    
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("SpringCamelContext(").append(getName()).append(")");
+        if (applicationContext != null) {
+            sb.append(" with spring id ").append(applicationContext.getId());
+        }
+        return sb.toString();
+    }
+
 }