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);