CAMEL-6576: Improved initializaiton logic of ManagementStrategy to avoid contention as well a potential NPE.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/82419d20 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/82419d20 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/82419d20 Branch: refs/heads/master Commit: 82419d206c23c37882fa8786fe012c5b47240ddc Parents: 2c9ff01 Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Jul 30 13:00:05 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Jul 30 16:28:00 2013 +0200 ---------------------------------------------------------------------- .../main/java/org/apache/camel/impl/DefaultCamelContext.java | 6 +++--- .../org/apache/camel/management/DefaultManagementAgent.java | 3 --- .../org/apache/camel/management/ManagementStrategyFactory.java | 4 ++++ 3 files changed, 7 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/82419d20/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 385a920..70390f3 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -244,6 +244,7 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon // setup management strategy first since end users may use it to add event notifiers // using the management strategy before the CamelContext has been started this.managementStrategy = createManagementStrategy(); + this.managementMBeanAssembler = createManagementMBeanAssembler(); Container.Instance.manage(this); } @@ -1550,9 +1551,6 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon // use the classloader that loaded this class setApplicationContextClassLoader(this.getClass().getClassLoader()); } - if (managementMBeanAssembler == null) { - managementMBeanAssembler = createManagementMBeanAssembler(); - } if (log.isDebugEnabled()) { log.debug("Using ClassResolver={}, PackageScanClassResolver={}, ApplicationContextClassLoader={}", @@ -2484,6 +2482,8 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon throw new IllegalStateException("Disabling JMX can only be done when CamelContext has not been started"); } managementStrategy = new DefaultManagementStrategy(this); + // must clear lifecycle strategies as we add DefaultManagementLifecycleStrategy by default for JMX support + lifecycleStrategies.clear(); } public InflightRepository getInflightRepository() { http://git-wip-us.apache.org/repos/asf/camel/blob/82419d20/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java index eeda9c9..d2e57fb 100644 --- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java +++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java @@ -265,9 +265,6 @@ public class DefaultManagementAgent extends ServiceSupport implements Management protected void doStart() throws Exception { ObjectHelper.notNull(camelContext, "CamelContext"); - // must add management lifecycle strategy - camelContext.getLifecycleStrategies().add(0, new DefaultManagementLifecycleStrategy(camelContext)); - // create mbean server if is has not be injected. if (server == null) { finalizeSettings(); http://git-wip-us.apache.org/repos/asf/camel/blob/82419d20/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java b/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java index 50d55fa..814d5ac 100644 --- a/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java +++ b/camel-core/src/main/java/org/apache/camel/management/ManagementStrategyFactory.java @@ -35,6 +35,10 @@ public class ManagementStrategyFactory { } else { try { answer = new ManagedManagementStrategy(context, new DefaultManagementAgent(context)); + + // must add management lifecycle strategy + context.getLifecycleStrategies().add(0, new DefaultManagementLifecycleStrategy(context)); + } catch (Exception e) { log.warn("Cannot create JMX lifecycle strategy. Will fallback and disable JMX.", e); answer = new DefaultManagementStrategy(context);