Author: davsclaus
Date: Wed Apr 24 08:43:13 2013
New Revision: 1471293

URL: http://svn.apache.org/r1471293
Log:
CAMEL-6308: Make calling startScheduler easier on ScheduledPollConsumers. Also 
from JMX.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSchedulePollConsumerMBean.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ScheduledPollConsumer.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSchedulePollConsumerMBean.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSchedulePollConsumerMBean.java?rev=1471293&r1=1471292&r2=1471293&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSchedulePollConsumerMBean.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSchedulePollConsumerMBean.java
 Wed Apr 24 08:43:13 2013
@@ -17,6 +17,7 @@
 package org.apache.camel.api.management.mbean;
 
 import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedOperation;
 
 public interface ManagedSchedulePollConsumerMBean extends ManagedConsumerMBean 
{
 
@@ -44,4 +45,10 @@ public interface ManagedSchedulePollCons
     @ManagedAttribute(description = "Scheduled TimeUnit")
     void setTimeUnit(String timeUnit);
 
+    @ManagedAttribute(description = "Is the scheduler started")
+    boolean isSchedulerStarted();
+
+    @ManagedOperation(description = "Starts the scheduler")
+    void startScheduler();
+
 }
\ No newline at end of file

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ScheduledPollConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ScheduledPollConsumer.java?rev=1471293&r1=1471292&r2=1471293&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ScheduledPollConsumer.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ScheduledPollConsumer.java
 Wed Apr 24 08:43:13 2013
@@ -44,7 +44,7 @@ public abstract class ScheduledPollConsu
 
     private ScheduledExecutorService scheduledExecutorService;
     private boolean shutdownExecutor;
-    private ScheduledFuture<?> future;
+    private volatile ScheduledFuture<?> future;
 
     // if adding more options then align with 
ScheduledPollEndpoint#configureScheduledPollConsumerProperties
     @UriParam
@@ -309,6 +309,17 @@ public abstract class ScheduledPollConsu
     }
 
     /**
+     * Whether the scheduler has been started.
+     * <p/>
+     * The scheduler can be started with the {@link #startScheduler()} method.
+     *
+     * @return <tt>true</tt> if started, <tt>false</tt> if not.
+     */
+    public boolean isSchedulerStarted() {
+        return future != null;
+    }
+
+    /**
      * Sets a custom shared {@link ScheduledExecutorService} to use as thread 
pool
      * <p/>
      * <b>Notice: </b> When using a custom thread pool, then the lifecycle of 
this thread
@@ -353,19 +364,27 @@ public abstract class ScheduledPollConsu
         }
     }
 
-    protected void startScheduler() {
-        if (isUseFixedDelay()) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Scheduling poll (fixed delay) with initialDelay: 
{}, delay: {} ({}) for: {}",
-                        new Object[]{getInitialDelay(), getDelay(), 
getTimeUnit().name().toLowerCase(Locale.ENGLISH), getEndpoint()});
-            }
-            future = scheduledExecutorService.scheduleWithFixedDelay(this, 
getInitialDelay(), getDelay(), getTimeUnit());
-        } else {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Scheduling poll (fixed rate) with initialDelay: {}, 
delay: {} ({}) for: {}",
-                        new Object[]{getInitialDelay(), getDelay(), 
getTimeUnit().name().toLowerCase(Locale.ENGLISH), getEndpoint()});
+    /**
+     * Starts the scheduler.
+     * <p/>
+     * If the scheduler is already started, then this is a noop method call.
+     */
+    public void startScheduler() {
+        // only schedule task if we have not already done that
+        if (future == null) {
+            if (isUseFixedDelay()) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Scheduling poll (fixed delay) with 
initialDelay: {}, delay: {} ({}) for: {}",
+                            new Object[]{getInitialDelay(), getDelay(), 
getTimeUnit().name().toLowerCase(Locale.ENGLISH), getEndpoint()});
+                }
+                future = scheduledExecutorService.scheduleWithFixedDelay(this, 
getInitialDelay(), getDelay(), getTimeUnit());
+            } else {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Scheduling poll (fixed rate) with initialDelay: 
{}, delay: {} ({}) for: {}",
+                            new Object[]{getInitialDelay(), getDelay(), 
getTimeUnit().name().toLowerCase(Locale.ENGLISH), getEndpoint()});
+                }
+                future = scheduledExecutorService.scheduleAtFixedRate(this, 
getInitialDelay(), getDelay(), getTimeUnit());
             }
-            future = scheduledExecutorService.scheduleAtFixedRate(this, 
getInitialDelay(), getDelay(), getTimeUnit());
         }
     }
 
@@ -374,6 +393,7 @@ public abstract class ScheduledPollConsu
         if (future != null) {
             LOG.debug("This consumer is stopping, so cancelling scheduled 
task: " + future);
             future.cancel(false);
+            future = null;
         }
         super.doStop();
     }

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java?rev=1471293&r1=1471292&r2=1471293&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java
 Wed Apr 24 08:43:13 2013
@@ -70,4 +70,12 @@ public class ManagedScheduledPollConsume
     public void setTimeUnit(String timeUnit) {
         getConsumer().setTimeUnit(TimeUnit.valueOf(timeUnit));
     }
+
+    public boolean isSchedulerStarted() {
+        return getConsumer().isSchedulerStarted();
+    }
+
+    public void startScheduler() {
+        getConsumer().startScheduler();
+    }
 }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java?rev=1471293&r1=1471292&r2=1471293&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java
 Wed Apr 24 08:43:13 2013
@@ -50,6 +50,9 @@ public class ManagedScheduledPollConsume
         Boolean fixedDelay = (Boolean) mbeanServer.getAttribute(on, 
"UseFixedDelay");
         assertEquals(Boolean.TRUE, fixedDelay);
 
+        Boolean schedulerStarted = (Boolean) mbeanServer.getAttribute(on, 
"SchedulerStarted");
+        assertEquals(Boolean.TRUE, schedulerStarted);
+
         String timeUnit = (String) mbeanServer.getAttribute(on, "TimeUnit");
         assertEquals(TimeUnit.MILLISECONDS.toString(), timeUnit);
 
@@ -59,6 +62,9 @@ public class ManagedScheduledPollConsume
         // stop it
         mbeanServer.invoke(on, "stop", null, null);
 
+        schedulerStarted = (Boolean) mbeanServer.getAttribute(on, 
"SchedulerStarted");
+        assertEquals(Boolean.FALSE, schedulerStarted);
+
         // change delay
         mbeanServer.setAttribute(on, new Attribute("Delay", 2000));
 


Reply via email to