Author: davsclaus Date: Mon Jul 16 11:25:37 2012 New Revision: 1361973 URL: http://svn.apache.org/viewvc?rev=1361973&view=rev Log: CAMEL-5445: TimerManagerLoadTask thread name is now using the same name pattern as all the other threads. Have to defer starting it until CamelContext fully started.
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java?rev=1361973&r1=1361972&r2=1361973&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java Mon Jul 16 11:25:37 2012 @@ -42,6 +42,7 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.Route; import org.apache.camel.Service; +import org.apache.camel.StartupListener; import org.apache.camel.TimerListener; import org.apache.camel.VetoCamelContextStartException; import org.apache.camel.api.management.PerformanceCounter; @@ -105,6 +106,7 @@ public class DefaultManagementLifecycleS new HashMap<Processor, KeyValueHolder<ProcessorDefinition<?>, InstrumentationProcessor>>(); private final List<PreRegisterService> preServices = new ArrayList<PreRegisterService>(); private final TimerListenerManager timerListenerManager = new TimerListenerManager(); + private final TimerListenerManagerStartupListener timerManagerStartupListener = new TimerListenerManagerStartupListener(); private volatile CamelContext camelContext; private volatile ManagedCamelContext camelContextMBean; private volatile boolean initialized; @@ -844,14 +846,24 @@ public class DefaultManagementLifecycleS protected void doStart() throws Exception { ObjectHelper.notNull(camelContext, "CamelContext"); - boolean enabled = camelContext.getManagementStrategy().getStatisticsLevel() != ManagementStatisticsLevel.Off; - if (enabled) { - LOG.info("StatisticsLevel at {} so enabling load performance statistics", camelContext.getManagementStrategy().getStatisticsLevel()); - ScheduledExecutorService executorService = camelContext.getExecutorServiceManager().newSingleThreadScheduledExecutor(this, "ManagementLoadTask"); - timerListenerManager.setExecutorService(executorService); - // must use 1 sec interval as the load statistics is based on 1 sec calculations - timerListenerManager.setInterval(1000); - ServiceHelper.startService(timerListenerManager); + // defer starting the timer manager until CamelContext has been fully started + camelContext.addStartupListener(timerManagerStartupListener); + } + + private final class TimerListenerManagerStartupListener implements StartupListener { + + @Override + public void onCamelContextStarted(CamelContext context, boolean alreadyStarted) throws Exception { + boolean enabled = camelContext.getManagementStrategy().getStatisticsLevel() != ManagementStatisticsLevel.Off; + if (enabled) { + LOG.info("StatisticsLevel at {} so enabling load performance statistics", camelContext.getManagementStrategy().getStatisticsLevel()); + // we have to defer creating this until CamelContext has been started + ScheduledExecutorService executorService = camelContext.getExecutorServiceManager().newSingleThreadScheduledExecutor(this, "ManagementLoadTask"); + timerListenerManager.setExecutorService(executorService); + // must use 1 sec interval as the load statistics is based on 1 sec calculations + timerListenerManager.setInterval(1000); + ServiceHelper.startService(timerListenerManager); + } } }