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 2013/07/30 16:28:14 UTC

[1/8] git commit: CAMEL-6576: Improved initializaiton logic of ManagementStrategy to avoid contention as well a potential NPE.

Updated Branches:
  refs/heads/master 7b995ad9a -> abba6b312


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/c6620dba
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c6620dba
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c6620dba

Branch: refs/heads/master
Commit: c6620dbace9ae1e15981f4c31b1a97b4c396cde6
Parents: 7b995ad
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 30 12:18:53 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 30 16:27:59 2013 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/CamelContext.java     | 10 ++++--
 .../apache/camel/impl/DefaultCamelContext.java  | 29 ++++++----------
 .../management/DefaultManagementAgent.java      |  3 ++
 .../management/DefaultManagementStrategy.java   | 24 ++++++++------
 .../management/ManagedManagementStrategy.java   |  6 ++++
 .../management/ManagementStrategyFactory.java   | 17 +++-------
 .../management/CamelContextDisableJmxTest.java  | 35 ++++++++++++++++++++
 .../xml/AbstractCamelContextFactoryBean.java    |  3 --
 8 files changed, 80 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c6620dba/camel-core/src/main/java/org/apache/camel/CamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/CamelContext.java b/camel-core/src/main/java/org/apache/camel/CamelContext.java
index 6db32ba..839b00d 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -18,7 +18,9 @@ package org.apache.camel;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.*;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -1019,8 +1021,12 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
 
     /**
      * Disables using JMX as {@link org.apache.camel.spi.ManagementStrategy}.
+     * <p/>
+     * <b>Important:</b> This method must be called <b>before</b> the {@link CamelContext} is started.
+     *
+     * @throws IllegalStateException is thrown if the {@link CamelContext} is not in stopped state.
      */
-    void disableJMX();
+    void disableJMX() throws IllegalStateException;
 
     /**
      * Gets the inflight repository

http://git-wip-us.apache.org/repos/asf/camel/blob/c6620dba/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 fdd238a..385a920 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
@@ -34,7 +34,6 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.naming.Context;
 import javax.xml.bind.JAXBContext;
@@ -74,6 +73,7 @@ import org.apache.camel.impl.converter.BaseTypeConverterRegistry;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.impl.converter.LazyLoadingTypeConverter;
 import org.apache.camel.management.DefaultManagementMBeanAssembler;
+import org.apache.camel.management.DefaultManagementStrategy;
 import org.apache.camel.management.JmxSystemPropertyKeys;
 import org.apache.camel.management.ManagementStrategyFactory;
 import org.apache.camel.model.Constants;
@@ -167,7 +167,6 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
     private List<LifecycleStrategy> lifecycleStrategies = new ArrayList<LifecycleStrategy>();
     private ManagementStrategy managementStrategy;
     private ManagementMBeanAssembler managementMBeanAssembler;
-    private final AtomicBoolean managementStrategyInitialized = new AtomicBoolean(false);
     private final List<RouteDefinition> routeDefinitions = new ArrayList<RouteDefinition>();
     private List<InterceptStrategy> interceptStrategies = new ArrayList<InterceptStrategy>();
 
@@ -242,6 +241,10 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
             packageScanClassResolver = new DefaultPackageScanClassResolver();
         }
 
+        // 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();
+
         Container.Instance.manage(this);
     }
 
@@ -2436,26 +2439,11 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
     }
 
     public ManagementStrategy getManagementStrategy() {
-        synchronized (managementStrategyInitialized) {
-            if (!managementStrategyInitialized.get()) {
-                if (managementStrategyInitialized.compareAndSet(false, true)) {
-                    managementStrategy = createManagementStrategy();
-                }
-            }
-        }
-
         return managementStrategy;
     }
 
     public void setManagementStrategy(ManagementStrategy managementStrategy) {
-        synchronized (managementStrategyInitialized) {
-            if (managementStrategyInitialized.get()) {
-                log.warn("Resetting ManagementStrategy for CamelContext: " + getName());
-            }
-
-            this.managementStrategy = managementStrategy;
-            managementStrategyInitialized.set(true);
-        }
+        this.managementStrategy = managementStrategy;
     }
 
     public InterceptStrategy getDefaultTracer() {
@@ -2492,7 +2480,10 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
     }
 
     public void disableJMX() {
-        disableJMX = true;
+        if (isStarting() || isStarted()) {
+            throw new IllegalStateException("Disabling JMX can only be done when CamelContext has not been started");
+        }
+        managementStrategy = new DefaultManagementStrategy(this);
     }
 
     public InflightRepository getInflightRepository() {

http://git-wip-us.apache.org/repos/asf/camel/blob/c6620dba/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 d2e57fb..eeda9c9 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,6 +265,9 @@ 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/c6620dba/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
index f71f9ba..63aa132 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
@@ -32,8 +32,11 @@ import org.apache.camel.spi.ManagementAgent;
 import org.apache.camel.spi.ManagementNamingStrategy;
 import org.apache.camel.spi.ManagementObjectStrategy;
 import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ServiceHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A default management strategy that does <b>not</b> manage.
@@ -48,8 +51,9 @@ import org.apache.camel.util.ServiceHelper;
  * @see ManagedManagementStrategy
  * @version 
  */
-public class DefaultManagementStrategy implements ManagementStrategy, CamelContextAware {
+public class DefaultManagementStrategy extends ServiceSupport implements ManagementStrategy, CamelContextAware {
 
+    private static final transient Logger LOG = LoggerFactory.getLogger(DefaultManagementStrategy.class);
     private List<EventNotifier> eventNotifiers = new CopyOnWriteArrayList<EventNotifier>();
     private EventFactory eventFactory = new DefaultEventFactory();
     private ManagementNamingStrategy managementNamingStrategy;
@@ -198,7 +202,12 @@ public class DefaultManagementStrategy implements ManagementStrategy, CamelConte
         this.loadStatisticsEnabled = loadStatisticsEnabled;
     }
 
-    public void start() throws Exception {
+    protected void doStart() throws Exception {
+        LOG.info("JMX is disabled");
+        doStartManagementStrategy();
+    }
+
+    protected void doStartManagementStrategy() throws Exception {
         ObjectHelper.notNull(camelContext, "CamelContext");
 
         if (eventNotifiers != null) {
@@ -215,7 +224,7 @@ public class DefaultManagementStrategy implements ManagementStrategy, CamelConte
         }
 
         if (managementAgent != null) {
-            managementAgent.start();
+            ServiceHelper.startService(managementAgent);
             // set the naming strategy using the domain name from the agent
             if (managementNamingStrategy == null) {
                 setManagementNamingStrategy(new DefaultManagementNamingStrategy(managementAgent.getMBeanObjectDomainName()));
@@ -226,13 +235,8 @@ public class DefaultManagementStrategy implements ManagementStrategy, CamelConte
         }
     }
 
-    public void stop() throws Exception {
-        if (managementAgent != null) {
-            managementAgent.stop();
-        }
-        if (eventNotifiers != null) {
-            ServiceHelper.stopServices(eventNotifiers);
-        }
+    protected void doStop() throws Exception {
+        ServiceHelper.stopServices(managementAgent, eventNotifiers);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/c6620dba/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
index c16e5c1..f89ffb4 100644
--- a/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
@@ -182,4 +182,10 @@ public class ManagedManagementStrategy extends DefaultManagementStrategy {
         return objectName;
     }
 
+    @Override
+    protected void doStart() throws Exception {
+        LOG.info("JMX is enabled");
+        doStartManagementStrategy();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/c6620dba/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 44b7602..50d55fa 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
@@ -18,7 +18,6 @@ package org.apache.camel.management;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.ManagementStrategy;
-import org.apache.camel.util.ServiceHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,27 +28,19 @@ public class ManagementStrategyFactory {
     private final transient Logger log = LoggerFactory.getLogger(getClass());
 
     public ManagementStrategy create(CamelContext context, boolean disableJMX) {
-        ManagementStrategy answer = null;
+        ManagementStrategy answer;
 
         if (disableJMX || Boolean.getBoolean(JmxSystemPropertyKeys.DISABLED)) {
-            log.info("JMX is disabled.");
+            answer = new DefaultManagementStrategy(context);
         } else {
             try {
                 answer = new ManagedManagementStrategy(context, new DefaultManagementAgent(context));
-                // must start it to ensure JMX works and can load needed Spring JARs
-                ServiceHelper.startService(answer);
-                // prefer to have it at first strategy
-                context.getLifecycleStrategies().add(0, new DefaultManagementLifecycleStrategy(context));
-                log.info("JMX enabled.");
             } catch (Exception e) {
-                answer = null;
                 log.warn("Cannot create JMX lifecycle strategy. Will fallback and disable JMX.", e);
+                answer = new DefaultManagementStrategy(context);
             }
         }
-
-        if (answer == null) {
-            answer = new DefaultManagementStrategy(context);
-        }
         return answer;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/c6620dba/camel-core/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java b/camel-core/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java
new file mode 100644
index 0000000..2946e3c
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import junit.framework.TestCase;
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.DefaultCamelContext;
+
+public class CamelContextDisableJmxTest extends TestCase {
+
+    public void testDisableJmx() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        context.disableJMX();
+        context.start();
+
+        // JMX should be disabled and therefore not a ManagedManagementStrategy instance
+        assertFalse(context.getManagementStrategy() instanceof ManagedManagementStrategy);
+
+        context.stop();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/c6620dba/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 05e6568..76b0c69 100644
--- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -370,9 +370,6 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             ManagementStrategy managementStrategy = new ManagedManagementStrategy(getContext(), agent);
             getContext().setManagementStrategy(managementStrategy);
 
-            // clear the existing lifecycle strategies define by the DefaultCamelContext constructor
-            getContext().getLifecycleStrategies().clear();
-            getContext().addLifecycleStrategy(new DefaultManagementLifecycleStrategy(getContext()));
             // set additional configuration from camelJMXAgent
             boolean onlyId = agent.getOnlyRegisterProcessorWithCustomId() != null && agent.getOnlyRegisterProcessorWithCustomId();
             getContext().getManagementStrategy().onlyManageProcessorWithCustomId(onlyId);


[6/8] git commit: Fixed test as it should indicate to use JMX for testing

Posted by da...@apache.org.
Fixed test as it should indicate to use JMX for testing


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4b07f911
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4b07f911
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4b07f911

Branch: refs/heads/master
Commit: 4b07f9115d4671c5af20b07b02393fe578ec618e
Parents: 423d2e8
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 30 13:51:00 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 30 16:28:00 2013 +0200

----------------------------------------------------------------------
 .../test/blueprint/management/ManagedNamePatternFixedTest.java  | 5 +++++
 .../camel-test-blueprint/src/test/resources/log4j.properties    | 1 +
 2 files changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/4b07f911/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedNamePatternFixedTest.java
----------------------------------------------------------------------
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedNamePatternFixedTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedNamePatternFixedTest.java
index f08f243..1a10189 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedNamePatternFixedTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedNamePatternFixedTest.java
@@ -25,6 +25,11 @@ import org.junit.Test;
 public class ManagedNamePatternFixedTest extends CamelBlueprintTestSupport {
 
     @Override
+    protected boolean useJmx() {
+        return true;
+    }
+
+    @Override
     protected String getBlueprintDescriptor() {
         return "org/apache/camel/test/blueprint/management/managedNamePatternFixedTest.xml";
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/4b07f911/components/camel-test-blueprint/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-test-blueprint/src/test/resources/log4j.properties b/components/camel-test-blueprint/src/test/resources/log4j.properties
index 8d8dd6b..39dbf51 100644
--- a/components/camel-test-blueprint/src/test/resources/log4j.properties
+++ b/components/camel-test-blueprint/src/test/resources/log4j.properties
@@ -23,6 +23,7 @@ log4j.rootLogger=INFO, file
 #log4j.logger.de.kalpatec.pojosr=DEBUG
 #log4j.logger.org.apache.camel.test.blueprint=DEBUG
 #log4j.logger.org.apache.camel=DEBUG
+#log4j.logger.org.apache.camel.management=DEBUG
 #log4j.logger.org.apache.camel.impl.osgi.Activator=DEBUG
 #log4j.logger.org.apache.camel.blueprint=TRACE
 #log4j.logger.org.apache.camel.core.osgi=TRACE


[8/8] git commit: CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.

Posted by da...@apache.org.
CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/abba6b31
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/abba6b31
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/abba6b31

Branch: refs/heads/master
Commit: abba6b3124f61bf759632424208e55905514166a
Parents: e1d57c3
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 30 16:27:41 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 30 16:28:01 2013 +0200

----------------------------------------------------------------------
 .../DefaultManagementMBeanAssembler.java        | 12 ++-
 .../management/DefaultRequiredModelMBean.java   | 97 --------------------
 .../management/SanitizeRequiredModelMBean.java  | 94 +++++++++++++++++++
 3 files changed, 103 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/abba6b31/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
index fe23006..b50b006 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
@@ -22,6 +22,7 @@ import javax.management.ObjectName;
 import javax.management.modelmbean.InvalidTargetObjectTypeException;
 import javax.management.modelmbean.ModelMBean;
 import javax.management.modelmbean.ModelMBeanInfo;
+import javax.management.modelmbean.RequiredModelMBean;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.api.management.ManagedInstance;
@@ -75,9 +76,14 @@ public class DefaultManagementMBeanAssembler implements ManagementMBeanAssembler
             return null;
         }
 
-        boolean santizie = camelContext.getManagementStrategy().getManagementAgent().getSanitize() != null && camelContext.getManagementStrategy().getManagementAgent().getSanitize();
-        DefaultRequiredModelMBean mbean = new DefaultRequiredModelMBean(mbi);
-        mbean.setSanitize(santizie);
+        RequiredModelMBean mbean;
+        boolean sanitize = camelContext.getManagementStrategy().getManagementAgent().getSanitize() != null && camelContext.getManagementStrategy().getManagementAgent().getSanitize();
+        if (sanitize) {
+            mbean = new SanitizeRequiredModelMBean(mbi, sanitize);
+        } else {
+            mbean = (RequiredModelMBean) mBeanServer.instantiate(RequiredModelMBean.class.getName());
+            mbean.setModelMBeanInfo(mbi);
+        }
 
         try {
             mbean.setManagedResource(obj, "ObjectReference");

http://git-wip-us.apache.org/repos/asf/camel/blob/abba6b31/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java b/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java
deleted file mode 100644
index 5664e17..0000000
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.management;
-
-import javax.management.Descriptor;
-import javax.management.MBeanException;
-import javax.management.MBeanOperationInfo;
-import javax.management.ReflectionException;
-import javax.management.RuntimeOperationsException;
-import javax.management.modelmbean.ModelMBeanInfo;
-import javax.management.modelmbean.RequiredModelMBean;
-
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.URISupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A {@link RequiredModelMBean} which allows us to intercept invoking operations on the MBean.
- * <p/>
- * For example if sanitize has been enabled on JMX, then we use this implementation
- * to hide sensitive information from the returned JMX attributes / operations.
- */
-public class DefaultRequiredModelMBean extends RequiredModelMBean {
-
-    private static final Logger LOG = LoggerFactory.getLogger(DefaultRequiredModelMBean.class);
-    private boolean sanitize;
-
-    public DefaultRequiredModelMBean() throws MBeanException, RuntimeOperationsException {
-        // must have default no-arg constructor
-    }
-
-    public DefaultRequiredModelMBean(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException {
-        super(mbi);
-    }
-
-    public boolean isSanitize() {
-        return sanitize;
-    }
-
-    public void setSanitize(boolean sanitize) {
-        this.sanitize = sanitize;
-    }
-
-    @Override
-    public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException {
-        Object answer = super.invoke(opName, opArgs, sig);
-        // sanitize the answer if enabled and it was a String type (we cannot sanitize other types)
-        if (sanitize && answer instanceof String && ObjectHelper.isNotEmpty(answer) && isSanitizedOperation(opName)) {
-            answer = sanitize(opName, (String) answer);
-        }
-        return answer;
-    }
-
-    protected boolean isSanitizedOperation(String opName) {
-        for (MBeanOperationInfo info : getMBeanInfo().getOperations()) {
-            if (info.getName().equals(opName)) {
-                Descriptor desc = info.getDescriptor();
-                if (desc != null) {
-                    Object val = desc.getFieldValue("sanitize");
-                    return val != null && "true".equals(val);
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Sanitizes the returned value from invoking the operation
-     *
-     * @param opName  the operation name invoked
-     * @param value   the current value
-     * @return the sanitized value
-     */
-    protected String sanitize(String opName, String value) {
-        String answer = URISupport.sanitizeUri(value);
-        if (LOG.isTraceEnabled()) {
-            LOG.trace("Sanitizing JMX operation: {}.{} value: {} -> {}",
-                    new Object[]{getMBeanInfo().getClassName(), opName, value, answer});
-        }
-        return answer;
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/abba6b31/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java b/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java
new file mode 100644
index 0000000..6d34e75
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import javax.management.Descriptor;
+import javax.management.MBeanException;
+import javax.management.MBeanOperationInfo;
+import javax.management.ReflectionException;
+import javax.management.RuntimeOperationsException;
+import javax.management.modelmbean.ModelMBeanInfo;
+import javax.management.modelmbean.RequiredModelMBean;
+
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A {@link RequiredModelMBean} which allows us to intercept invoking operations on the MBean.
+ * <p/>
+ * For example if sanitize has been enabled on JMX, then we use this implementation
+ * to hide sensitive information from the returned JMX attributes / operations.
+ */
+public class SanitizeRequiredModelMBean extends RequiredModelMBean {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SanitizeRequiredModelMBean.class);
+    private boolean sanitize;
+
+    public SanitizeRequiredModelMBean() throws MBeanException, RuntimeOperationsException {
+        // must have default no-arg constructor
+    }
+
+    public SanitizeRequiredModelMBean(ModelMBeanInfo mbi, boolean sanitize) throws MBeanException, RuntimeOperationsException {
+        super(mbi);
+        this.sanitize = sanitize;
+    }
+
+    public boolean isSanitize() {
+        return sanitize;
+    }
+
+    @Override
+    public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException {
+        Object answer = super.invoke(opName, opArgs, sig);
+        // sanitize the answer if enabled and it was a String type (we cannot sanitize other types)
+        if (sanitize && answer instanceof String && ObjectHelper.isNotEmpty(answer) && isSanitizedOperation(opName)) {
+            answer = sanitize(opName, (String) answer);
+        }
+        return answer;
+    }
+
+    protected boolean isSanitizedOperation(String opName) {
+        for (MBeanOperationInfo info : getMBeanInfo().getOperations()) {
+            if (info.getName().equals(opName)) {
+                Descriptor desc = info.getDescriptor();
+                if (desc != null) {
+                    Object val = desc.getFieldValue("sanitize");
+                    return val != null && "true".equals(val);
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Sanitizes the returned value from invoking the operation
+     *
+     * @param opName  the operation name invoked
+     * @param value   the current value
+     * @return the sanitized value
+     */
+    protected String sanitize(String opName, String value) {
+        String answer = URISupport.sanitizeUri(value);
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Sanitizing JMX operation: {}.{} value: {} -> {}",
+                    new Object[]{getMBeanInfo().getClassName(), opName, value, answer});
+        }
+        return answer;
+    }
+}


[7/8] git commit: Fixed NPE in rabbitmq and polished the component.

Posted by da...@apache.org.
Fixed NPE in rabbitmq and polished the component.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e1d57c38
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e1d57c38
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e1d57c38

Branch: refs/heads/master
Commit: e1d57c38cc14e7ce508390a619f2e11497238dcc
Parents: 3d15766
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 30 16:12:25 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 30 16:28:01 2013 +0200

----------------------------------------------------------------------
 .../org/apache/camel/component/rabbitmq/RabbitMQComponent.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e1d57c38/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
index 03cf896..f8dbd85 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
@@ -53,7 +53,7 @@ public class RabbitMQComponent extends DefaultComponent {
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("Creating RabbitMQEndpoint with host {}:{} and exchangeName: {}",
-                    endpoint.getHostname(), endpoint.getPortNumber(), endpoint.getExchangeName())
+                    new Object[]{endpoint.getHostname(), endpoint.getPortNumber(), endpoint.getExchangeName()});
         }
 
         return endpoint;


[3/8] git commit: CAMEL-6436: Fixed rss feed to include feeds with same pubtimestamp.

Posted by da...@apache.org.
CAMEL-6436: Fixed rss feed to include feeds with same pubtimestamp.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2c9ff017
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2c9ff017
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2c9ff017

Branch: refs/heads/master
Commit: 2c9ff0172980aea8a359d78f1190b33317dd3d8e
Parents: c6620db
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 30 12:20:23 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 30 16:28:00 2013 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/component/atom/UpdatedDateFilter.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/2c9ff017/components/camel-atom/src/main/java/org/apache/camel/component/atom/UpdatedDateFilter.java
----------------------------------------------------------------------
diff --git a/components/camel-atom/src/main/java/org/apache/camel/component/atom/UpdatedDateFilter.java b/components/camel-atom/src/main/java/org/apache/camel/component/atom/UpdatedDateFilter.java
index 2d5fbb9..547b5ff 100644
--- a/components/camel-atom/src/main/java/org/apache/camel/component/atom/UpdatedDateFilter.java
+++ b/components/camel-atom/src/main/java/org/apache/camel/component/atom/UpdatedDateFilter.java
@@ -41,7 +41,8 @@ public class UpdatedDateFilter implements EntryFilter {
 
     public boolean isValidEntry(FeedEndpoint endpoint, Object feed, Object entry) {        
         Date updated = ((Entry)entry).getUpdated();
-        if (updated == null) { // never been updated so get published date
+        if (updated == null) {
+            // never been updated so get published date
             updated = ((Entry)entry).getPublished();
         }        
         if (updated == null) {
@@ -49,7 +50,7 @@ public class UpdatedDateFilter implements EntryFilter {
             return true;
         }        
         if (lastUpdate != null) {
-            if (lastUpdate.after(updated) || lastUpdate.equals(updated)) {
+            if (lastUpdate.after(updated)) {
                 LOG.debug("Entry is older than lastupdate=[{}], no valid entry=[{}]", lastUpdate, entry);
                 return false;
             }


[5/8] git commit: Fixed NPE in rabbitmq and polished the component.

Posted by da...@apache.org.
Fixed NPE in rabbitmq and polished the component.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/423d2e8f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/423d2e8f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/423d2e8f

Branch: refs/heads/master
Commit: 423d2e8f26eb1bd7c69900aaa603b897c55c144a
Parents: 82419d2
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 30 13:36:33 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 30 16:28:00 2013 +0200

----------------------------------------------------------------------
 components/camel-rabbitmq/pom.xml               | 130 ++++++++-------
 .../component/rabbitmq/RabbitMQComponent.java   |  23 ++-
 .../component/rabbitmq/RabbitMQConstants.java   |   2 -
 .../component/rabbitmq/RabbitMQConsumer.java    |  14 +-
 .../component/rabbitmq/RabbitMQEndpoint.java    | 165 ++++++++++---------
 .../component/rabbitmq/RabbitMQProducer.java    |  26 +--
 .../rabbitmq/RabbitMQComponentTest.java         |   2 +-
 .../rabbitmq/RabbitMQEndpointTest.java          |  25 ++-
 .../src/test/resources/log4j.properties         |   4 +-
 9 files changed, 211 insertions(+), 180 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/pom.xml b/components/camel-rabbitmq/pom.xml
index 4218b03..d3dd493 100644
--- a/components/camel-rabbitmq/pom.xml
+++ b/components/camel-rabbitmq/pom.xml
@@ -15,7 +15,8 @@
     See the License for the specific language governing permissions and
     limitations under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
@@ -29,70 +30,75 @@
   <packaging>bundle</packaging>
   <name>Camel :: RabbitMQ</name>
   <description>Camel RabbitMQ Component</description>
-  
+
   <properties>
-        <camel.osgi.export.pkg>
-            org.apache.camel.component.rabbitmq.*
-        </camel.osgi.export.pkg>
-        <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=rabbitmq</camel.osgi.export.service>
+    <camel.osgi.export.pkg>
+      org.apache.camel.component.rabbitmq.*
+    </camel.osgi.export.pkg>
+    <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=rabbitmq</camel.osgi.export.service>
   </properties>
 
-    <dependencies>
-        <dependency>
-            <groupId>com.rabbitmq</groupId>
-            <artifactId>amqp-client</artifactId>
-            <version>${rabbitmq-amqp-client-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core</artifactId>
-        </dependency>
-        
-        <!-- testing -->
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-test</artifactId>
- 	    <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    
-    <build>
-         <plugins>
-             <plugin>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>**/*IntTest*</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
+  <dependencies>
+    <dependency>
+      <groupId>com.rabbitmq</groupId>
+      <artifactId>amqp-client</artifactId>
+      <version>${rabbitmq-amqp-client-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+    </dependency>
 
-    <profiles>
-        <profile>
-            <id>itest</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <excludes>
-                                <exclude>None</exclude>
-                            </excludes>
-                            <includes>
-                                <include>**/*IntTest*</include>
-                            </includes>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
+    <!-- testing -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/*IntTest*</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>itest</id>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <excludes>
+                <exclude>None</exclude>
+              </excludes>
+              <includes>
+                <include>**/*IntTest*</include>
+              </includes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
 
 </project>

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
index 859a86d..03cf896 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
@@ -14,16 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.rabbitmq;
 
+import java.net.URI;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultComponent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class RabbitMQComponent extends DefaultComponent {
 
+    private static final transient Logger LOG = LoggerFactory.getLogger(RabbitMQComponent.class);
+
     public RabbitMQComponent() {
     }
 
@@ -35,8 +39,23 @@ public class RabbitMQComponent extends DefaultComponent {
     protected RabbitMQEndpoint createEndpoint(String uri,
                                               String remaining,
                                               Map<String, Object> params) throws Exception {
-        RabbitMQEndpoint endpoint = new RabbitMQEndpoint(uri, remaining, this);
+        URI host = new URI("http://" + remaining);
+        String hostname = host.getHost();
+        int portNumber = host.getPort();
+        String exchangeName = host.getPath().substring(1);
+
+        RabbitMQEndpoint endpoint = new RabbitMQEndpoint(uri, this);
+        endpoint.setHostname(hostname);
+        endpoint.setPortNumber(portNumber);
+        endpoint.setExchangeName(exchangeName);
+
         setProperties(endpoint, params);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Creating RabbitMQEndpoint with host {}:{} and exchangeName: {}",
+                    endpoint.getHostname(), endpoint.getPortNumber(), endpoint.getExchangeName())
+        }
+
         return endpoint;
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConstants.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConstants.java
index 0fc1642..f57f561 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConstants.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConstants.java
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.rabbitmq;
 
-
 public final class RabbitMQConstants {
     
     public static final String ROUTING_KEY = "rabbitmq.ROUTING_KEY";

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConsumer.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConsumer.java
index 2f78d00..0927f81 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConsumer.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQConsumer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.rabbitmq;
 
 import java.io.IOException;
@@ -25,13 +24,10 @@ import com.rabbitmq.client.AMQP;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
 import com.rabbitmq.client.Envelope;
-
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.DefaultConsumer;
 
-
 public class RabbitMQConsumer extends DefaultConsumer {
     
     ExecutorService executor;
@@ -86,7 +82,13 @@ public class RabbitMQConsumer extends DefaultConsumer {
 
         channel = null;
         conn = null;
-        executor.shutdown();
+        if (executor != null) {
+            if (getEndpoint() != null && getEndpoint().getCamelContext() != null) {
+                getEndpoint().getCamelContext().getExecutorServiceManager().shutdownNow(executor);
+            } else {
+                executor.shutdownNow();
+            }
+        }
         executor = null;
     }
 
@@ -123,7 +125,7 @@ public class RabbitMQConsumer extends DefaultConsumer {
                 channel.basicAck(deliveryTag, false);
 
             } catch (Exception e) {
-                e.printStackTrace();
+                getExceptionHandler().handleException("Error processing exchange", exchange, e);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java
index a62ad9c..2a7e2d6 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java
@@ -14,11 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.rabbitmq;
 
 import java.io.IOException;
-import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.UUID;
 import java.util.concurrent.ExecutorService;
@@ -27,7 +25,6 @@ import java.util.concurrent.Executors;
 import com.rabbitmq.client.Connection;
 import com.rabbitmq.client.ConnectionFactory;
 import com.rabbitmq.client.Envelope;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -55,70 +52,10 @@ public class RabbitMQEndpoint extends DefaultEndpoint {
     public RabbitMQEndpoint() {
     }
 
-    public RabbitMQEndpoint(String endpointUri,
-                            String remaining,
-                            RabbitMQComponent component) throws URISyntaxException {
+    public RabbitMQEndpoint(String endpointUri, RabbitMQComponent component) throws URISyntaxException {
         super(endpointUri, component);
-
-        URI uri = new URI("http://" + remaining);
-        hostname = uri.getHost();
-        portNumber = uri.getPort();
-        exchangeName = uri.getPath().substring(1);
-    }
-
-
-    public String getExchangeName() {
-        return exchangeName;
-    }
-
-    public void setQueue(String queue) {
-        this.queue = queue;
-    }
-
-    public int getThreadPoolSize() {
-        return threadPoolSize;
-    }
-
-    public void setThreadPoolSize(int threadPoolSize) {
-        this.threadPoolSize = threadPoolSize;
-    }
-
-    public boolean isAutoAck() {
-        return autoAck;
-    }
-
-    public void setAutoAck(boolean autoAck) {
-        this.autoAck = autoAck;
-    }
-
-    public String getQueue() {
-        return queue;
-    }
-    
-    public boolean isAutoDelete() {
-        return autoDelete;
     }
 
-    public void setAutoDelete(boolean autoDelete) {
-        this.autoDelete = autoDelete;
-    }
-
-    public boolean isDurable() {
-        return durable;
-    }
-
-    public void setDurable(boolean durable) {
-        this.durable = durable;
-    }
-
-    public String getRoutingKey() {
-        return routingKey;
-    }
-
-    public void setRoutingKey(String routingKey) {
-        this.routingKey = routingKey;
-    }
-    
     public Exchange createRabbitExchange(Envelope envelope) {
         Exchange exchange = new DefaultExchange(getCamelContext(), getExchangePattern());
 
@@ -163,20 +100,12 @@ public class RabbitMQEndpoint extends DefaultEndpoint {
         return true;
     }
 
-    public int getPortNumber() {
-        return portNumber;
-    }
-
-    public String getHostname() {
-        return hostname;
-    }
-
-    public String getVhost() {
-        return vhost;
-    }
-
-    public String getPassword() {
-        return password;
+    protected ExecutorService createExecutor() {
+        if (getCamelContext() != null) {
+            return getCamelContext().getExecutorServiceManager().newFixedThreadPool(this, "RabbitMQConsumer", getThreadPoolSize());
+        } else {
+            return Executors.newFixedThreadPool(getThreadPoolSize());
+        }
     }
 
     public String getUsername() {
@@ -187,15 +116,91 @@ public class RabbitMQEndpoint extends DefaultEndpoint {
         this.username = username;
     }
 
+    public String getPassword() {
+        return password;
+    }
+
     public void setPassword(String password) {
         this.password = password;
     }
 
+    public String getVhost() {
+        return vhost;
+    }
+
     public void setVhost(String vhost) {
         this.vhost = vhost;
     }
 
-    public ExecutorService createExecutor() {
-        return Executors.newFixedThreadPool(getThreadPoolSize());
+    public String getHostname() {
+        return hostname;
+    }
+
+    public void setHostname(String hostname) {
+        this.hostname = hostname;
+    }
+
+    public int getThreadPoolSize() {
+        return threadPoolSize;
+    }
+
+    public void setThreadPoolSize(int threadPoolSize) {
+        this.threadPoolSize = threadPoolSize;
+    }
+
+    public int getPortNumber() {
+        return portNumber;
+    }
+
+    public void setPortNumber(int portNumber) {
+        this.portNumber = portNumber;
+    }
+
+    public boolean isAutoAck() {
+        return autoAck;
+    }
+
+    public void setAutoAck(boolean autoAck) {
+        this.autoAck = autoAck;
+    }
+
+    public boolean isAutoDelete() {
+        return autoDelete;
+    }
+
+    public void setAutoDelete(boolean autoDelete) {
+        this.autoDelete = autoDelete;
+    }
+
+    public boolean isDurable() {
+        return durable;
+    }
+
+    public void setDurable(boolean durable) {
+        this.durable = durable;
+    }
+
+    public String getQueue() {
+        return queue;
+    }
+
+    public void setQueue(String queue) {
+        this.queue = queue;
+    }
+
+    public String getExchangeName() {
+        return exchangeName;
+    }
+
+    public void setExchangeName(String exchangeName) {
+        this.exchangeName = exchangeName;
+    }
+
+    public String getRoutingKey() {
+        return routingKey;
+    }
+
+    public void setRoutingKey(String routingKey) {
+        this.routingKey = routingKey;
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java
index 3cf7233..1336de9 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.rabbitmq;
 
 import java.io.IOException;
@@ -24,10 +23,9 @@ import java.util.concurrent.Executors;
 import com.rabbitmq.client.AMQP;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultProducer;
-
+import org.apache.camel.util.ObjectHelper;
 
 public class RabbitMQProducer extends DefaultProducer {
 
@@ -40,22 +38,30 @@ public class RabbitMQProducer extends DefaultProducer {
         this.channel = conn.createChannel();
     }
 
+    @Override
+    public RabbitMQEndpoint getEndpoint() {
+        return (RabbitMQEndpoint) super.getEndpoint();
+    }
+
     public void shutdown() throws IOException {
         conn.close();
     }
 
     @Override
     public void process(Exchange exchange) throws Exception {
+        String exchangeName = exchange.getIn().getHeader(RabbitMQConstants.EXCHANGE_NAME, String.class);
+        if (exchangeName == null) {
+            exchangeName = getEndpoint().getExchangeName();
+        }
+        if (ObjectHelper.isEmpty(exchangeName)) {
+            throw new IllegalArgumentException("ExchangeName is not provided in header " + RabbitMQConstants.EXCHANGE_NAME);
+        }
 
-        Object key = exchange.getIn().getHeader(RabbitMQConstants.ROUTING_KEY);
-        String exchangeName = exchange.getIn().getHeader(RabbitMQConstants.EXCHANGE_NAME).toString();
-        byte[] messageBodyBytes = exchange.getIn().getBody(byte[].class);
+        String key = exchange.getIn().getHeader(RabbitMQConstants.ROUTING_KEY, "", String.class);
+        byte[] messageBodyBytes = exchange.getIn().getMandatoryBody(byte[].class);
         AMQP.BasicProperties.Builder properties = buildProperties(exchange);
 
-        channel.basicPublish(exchangeName,
-                key == null ? "" : key.toString(),
-                properties.build(),
-                messageBodyBytes);
+        channel.basicPublish(exchangeName, key, properties.build(), messageBodyBytes);
     }
 
     AMQP.BasicProperties.Builder buildProperties(Exchange exchange) {

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQComponentTest.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQComponentTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQComponentTest.java
index 7bf707f..244bc29 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQComponentTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQComponentTest.java
@@ -50,7 +50,7 @@ public class RabbitMQComponentTest {
         assertEquals("queuey", endpoint.getQueue());
         assertEquals("vman", endpoint.getVhost());
         assertEquals("special.host", endpoint.getHostname());
-        assertEquals(14, endpoint.getPortNumber());
+        assertEquals(14123, endpoint.getPortNumber());
         assertEquals(515, endpoint.getThreadPoolSize());
         assertEquals(true, endpoint.isAutoAck());
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQEndpointTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQEndpointTest.java
index 7db87ea..f66ab85 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQEndpointTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQEndpointTest.java
@@ -16,25 +16,22 @@
  */
 package org.apache.camel.component.rabbitmq;
 
-import java.net.URISyntaxException;
 import java.util.UUID;
 import java.util.concurrent.ThreadPoolExecutor;
 
 import com.rabbitmq.client.Envelope;
-
 import org.apache.camel.Exchange;
-import org.apache.camel.test.junit4.TestSupport;
+import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-public class RabbitMQEndpointTest extends TestSupport {
+public class RabbitMQEndpointTest extends CamelTestSupport {
 
     private Envelope envelope = Mockito.mock(Envelope.class);
 
     @Test
-    public void testCreatingRabbitExchangeSetsHeaders() throws URISyntaxException {
-        RabbitMQEndpoint endpoint =
-                new RabbitMQEndpoint("rabbitmq:localhost/exchange", "localhost/exchange", new RabbitMQComponent());
+    public void testCreatingRabbitExchangeSetsHeaders() throws Exception {
+        RabbitMQEndpoint endpoint = context.getEndpoint("rabbitmq:localhost/exchange", RabbitMQEndpoint.class);
 
         String routingKey = UUID.randomUUID().toString();
         String exchangeName = UUID.randomUUID().toString();
@@ -52,19 +49,17 @@ public class RabbitMQEndpointTest extends TestSupport {
 
     @Test
     public void creatingExecutorUsesThreadPoolSettings() throws Exception {
-
-        RabbitMQEndpoint endpoint =
-                new RabbitMQEndpoint("rabbitmq:localhost/exchange", "localhost/exchange", new RabbitMQComponent());
-        endpoint.setThreadPoolSize(400);
+        RabbitMQEndpoint endpoint = context.getEndpoint("rabbitmq:localhost/exchange?threadPoolSize=20", RabbitMQEndpoint.class);
+        assertEquals(20, endpoint.getThreadPoolSize());
 
         ThreadPoolExecutor executor = assertIsInstanceOf(ThreadPoolExecutor.class,  endpoint.createExecutor());
-        assertEquals(400, executor.getCorePoolSize());
+        assertEquals(20, executor.getCorePoolSize());
     }
 
     @Test
-    public void assertSingleton() throws URISyntaxException {
-        RabbitMQEndpoint endpoint =
-                new RabbitMQEndpoint("rabbitmq:localhost/exchange", "localhost/exchange", new RabbitMQComponent());
+    public void assertSingleton() throws Exception {
+        RabbitMQEndpoint endpoint = context.getEndpoint("rabbitmq:localhost/exchange", RabbitMQEndpoint.class);
+
         assertTrue(endpoint.isSingleton());
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/423d2e8f/components/camel-rabbitmq/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-rabbitmq/src/test/resources/log4j.properties b/components/camel-rabbitmq/src/test/resources/log4j.properties
index 9e72bd9..6e75a1b 100644
--- a/components/camel-rabbitmq/src/test/resources/log4j.properties
+++ b/components/camel-rabbitmq/src/test/resources/log4j.properties
@@ -16,13 +16,13 @@
 ## ------------------------------------------------------------------------
 
 #
-# The logging properties used for eclipse testing, We want to see debug output on the console.
+# The logging properties used for testing.
 #
 log4j.rootLogger=INFO, file
 
 # uncomment the following to enable camel debugging
 #log4j.logger.org.apache.camel=DEBUG
-#log4j.logger.org.apache.camel.component.quickfixj=DEBUG
+#log4j.logger.org.apache.camel.component.rabbitmq=DEBUG
 
 # CONSOLE appender not used by default
 log4j.appender.out=org.apache.log4j.ConsoleAppender


[4/8] git commit: CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.

Posted by da...@apache.org.
CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3d157664
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3d157664
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3d157664

Branch: refs/heads/master
Commit: 3d15766435d90cc1b3c1805b10ea713400a06b8b
Parents: 4b07f91
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 30 14:10:57 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 30 16:28:00 2013 +0200

----------------------------------------------------------------------
 .../camel/management/DefaultManagementMBeanAssembler.java       | 3 +--
 .../org/apache/camel/management/DefaultRequiredModelMBean.java  | 5 +++++
 2 files changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3d157664/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
index 45969fe..fe23006 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java
@@ -76,9 +76,8 @@ public class DefaultManagementMBeanAssembler implements ManagementMBeanAssembler
         }
 
         boolean santizie = camelContext.getManagementStrategy().getManagementAgent().getSanitize() != null && camelContext.getManagementStrategy().getManagementAgent().getSanitize();
-        DefaultRequiredModelMBean mbean = (DefaultRequiredModelMBean) mBeanServer.instantiate(DefaultRequiredModelMBean.class.getName());
+        DefaultRequiredModelMBean mbean = new DefaultRequiredModelMBean(mbi);
         mbean.setSanitize(santizie);
-        mbean.setModelMBeanInfo(mbi);
 
         try {
             mbean.setManagedResource(obj, "ObjectReference");

http://git-wip-us.apache.org/repos/asf/camel/blob/3d157664/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java b/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java
index fd6fdad..5664e17 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultRequiredModelMBean.java
@@ -21,6 +21,7 @@ import javax.management.MBeanException;
 import javax.management.MBeanOperationInfo;
 import javax.management.ReflectionException;
 import javax.management.RuntimeOperationsException;
+import javax.management.modelmbean.ModelMBeanInfo;
 import javax.management.modelmbean.RequiredModelMBean;
 
 import org.apache.camel.util.ObjectHelper;
@@ -43,6 +44,10 @@ public class DefaultRequiredModelMBean extends RequiredModelMBean {
         // must have default no-arg constructor
     }
 
+    public DefaultRequiredModelMBean(ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException {
+        super(mbi);
+    }
+
     public boolean isSanitize() {
         return sanitize;
     }


[2/8] git commit: CAMEL-6576: Improved initializaiton logic of ManagementStrategy to avoid contention as well a potential NPE.

Posted by da...@apache.org.
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 <da...@apache.org>
Authored: Tue Jul 30 13:00:05 2013 +0200
Committer: Claus Ibsen <da...@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);