camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From davscl...@apache.org
Subject svn commit: r957866 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/test/java/org/apache/camel/impl/ components/camel-quartz/src/main/java/org/apache/camel/component/quartz/
Date Fri, 25 Jun 2010 09:44:15 GMT
Author: davsclaus
Date: Fri Jun 25 09:44:14 2010
New Revision: 957866

URL: http://svn.apache.org/viewvc?rev=957866&view=rev
Log:
CAMEL-2855: Polished StartupListener a bit.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/StartupListener.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentFromRegistryTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerTest.java
    camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=957866&r1=957865&r2=957866&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Fri Jun 25 09:44:14
2010
@@ -106,10 +106,14 @@ public interface CamelContext extends Se
      * Adds the given listener to be invoked when {@link CamelContext} have just been started.
      * <p/>
      * This allows listeners to do any custom work after the routes and other services have
been started and are running.
+     * <p/><b>Important:</b> The listener will always be invoked, also
if the {@link CamelContext} has already been
+     * started, see the {@link org.apache.camel.StartupListener#onCamelContextStarted(CamelContext,
boolean)} method.
      *
      * @param listener the listener
+     * @throws Exception can be thrown if {@link CamelContext} is already started and the
listener is invoked
+     *                   and cause an exception to be thrown
      */
-    void addStartupListener(StartupListener listener);
+    void addStartupListener(StartupListener listener) throws Exception;
 
     // Component Management Methods
     //-----------------------------------------------------------------------

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/StartupListener.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/StartupListener.java?rev=957866&r1=957865&r2=957866&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/StartupListener.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/StartupListener.java Fri Jun 25
09:44:14 2010
@@ -33,9 +33,12 @@ public interface StartupListener {
     /**
      * Callback invoked when the {@link org.apache.camel.CamelContext} has just been started.
      *
-     * @param context the camel context
+     * @param context        the Camel context
+     * @param alreadyStarted whether or not the Camel context already has been started. For
example the Camel context
+     *                       could already have been started, and then a service is added/started
later which still
+     *                       triggers this callback to be invoked.
      * @throws Exception can be thrown in case of errors to fail the startup process and
have the application
-     * fail on startup.
+     *                   fail on startup.
      */
-    void onCamelContextStarted(CamelContext context) throws Exception;
+    void onCamelContextStarted(CamelContext context, boolean alreadyStarted) throws Exception;
 }

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=957866&r1=957865&r2=957866&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 Fri
Jun 25 09:44:14 2010
@@ -615,13 +615,20 @@ public class DefaultCamelContext extends
 
     public boolean hasService(Object object) {
         if (object instanceof Service) {
-            return servicesToClose.contains(object);
+            Service service = (Service) object;
+            return servicesToClose.contains(service);
         }
         return false;
     }
 
-    public void addStartupListener(StartupListener listener) {
-        startupListeners.add(listener);
+    public void addStartupListener(StartupListener listener) throws Exception {
+        // either add to listener so we can invoke then later when CamelContext has been
started
+        // or invoke the callback right now
+        if (isStarted()) {
+            listener.onCamelContextStarted(this, true);
+        } else {
+            startupListeners.add(listener);
+        }
     }
 
     // Helper methods
@@ -949,8 +956,10 @@ public class DefaultCamelContext extends
 
         // now notify any startup aware listeners as all the routes etc has been started.
         for (StartupListener startup : startupListeners) {
-            startup.onCamelContextStarted(this);
+            startup.onCamelContextStarted(this, false);
         }
+        // and then get rid of the list as we dont need it anymore
+        startupListeners.clear();
 
         stopWatch.stop();
         if (LOG.isInfoEnabled()) {
@@ -1157,7 +1166,8 @@ public class DefaultCamelContext extends
         // and register startup aware so they can be notified when
         // camel context has been started
         if (service instanceof StartupListener) {
-            startupListeners.add((StartupListener) service);
+            StartupListener listener = (StartupListener) service;
+            addStartupListener(listener);
         }
 
         // and then start the service

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentFromRegistryTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentFromRegistryTest.java?rev=957866&r1=957865&r2=957866&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentFromRegistryTest.java
(original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentFromRegistryTest.java
Fri Jun 25 09:44:14 2010
@@ -52,7 +52,7 @@ public class StartupListenerComponentFro
 
         private int invoked;
 
-        public void onCamelContextStarted(CamelContext context) throws Exception {
+        public void onCamelContextStarted(CamelContext context, boolean alreadyStarted) throws
Exception {
             invoked++;
 
             // the routes should have been started

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentTest.java?rev=957866&r1=957865&r2=957866&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentTest.java
(original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerComponentTest.java
Fri Jun 25 09:44:14 2010
@@ -43,7 +43,7 @@ public class StartupListenerComponentTes
 
         private int invoked;
 
-        public void onCamelContextStarted(CamelContext context) throws Exception {
+        public void onCamelContextStarted(CamelContext context, boolean alreadyStarted) throws
Exception {
             invoked++;
 
             // the routes should have been started

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerTest.java?rev=957866&r1=957865&r2=957866&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/StartupListenerTest.java Fri
Jun 25 09:44:14 2010
@@ -38,9 +38,11 @@ public class StartupListenerTest extends
     private class MyStartupListener implements StartupListener {
 
         private int invoked;
+        private boolean alreadyStarted;
 
-        public void onCamelContextStarted(CamelContext context) throws Exception {
+        public void onCamelContextStarted(CamelContext context, boolean alreadyStarted) throws
Exception {
             invoked++;
+            this.alreadyStarted = alreadyStarted;
 
             // the route should have been started
             assertTrue(context.getRouteStatus("foo").isStarted());
@@ -49,6 +51,10 @@ public class StartupListenerTest extends
         public int getInvoked() {
             return invoked;
         }
+
+        public boolean isAlreadyStarted() {
+            return alreadyStarted;
+        }
     }
 
     public void testStartupListenerComponent() throws Exception {
@@ -59,6 +65,21 @@ public class StartupListenerTest extends
         assertMockEndpointsSatisfied();
 
         assertEquals(1, my.getInvoked());
+        assertFalse(my.isAlreadyStarted());
+    }
+
+    public void testStartupListenerComponentAlreadyStarted() throws Exception {
+        MyStartupListener other = new MyStartupListener();
+        context.addStartupListener(other);
+
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:foo", "Hello World");
+
+        assertMockEndpointsSatisfied();
+
+        assertEquals(1, other.getInvoked());
+        assertTrue(other.isAlreadyStarted());
     }
 
     @Override

Modified: camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java?rev=957866&r1=957865&r2=957866&view=diff
==============================================================================
--- camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
(original)
+++ camel/trunk/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
Fri Jun 25 09:44:14 2010
@@ -124,7 +124,7 @@ public class QuartzComponent extends Def
         return cron;
     }
 
-    public void onCamelContextStarted(CamelContext camelContext) throws Exception {
+    public void onCamelContextStarted(CamelContext camelContext, boolean alreadyStarted)
throws Exception {
         // if not configure to auto start then don't start it
         if (!isAutoStartScheduler()) {
             LOG.info("QuartzComponent configured to not auto start Quartz scheduler.");
@@ -228,7 +228,7 @@ public class QuartzComponent extends Def
      * @throws SchedulerException can be thrown if error starting
      */
     public void startScheduler() throws SchedulerException {
-        if (!scheduler.isStarted()) {
+        if (scheduler != null && !scheduler.isStarted()) {
             if (getStartDelayedSeconds() > 0) {
                 LOG.info("Starting Quartz scheduler: " + scheduler.getSchedulerName() + "
delayed: " + getStartDelayedSeconds() + " seconds.");
                 scheduler.startDelayed(getStartDelayedSeconds());



Mime
View raw message