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/28 14:07:13 UTC

[1/4] git commit: CAMEL-6377: Optimize routing engine for delayer to avoid wrapping.

Updated Branches:
  refs/heads/camel-2.11.x d37b8fa19 -> 51369fbc5
  refs/heads/master d3c07055a -> 96270b365


CAMEL-6377: Optimize routing engine for delayer to avoid wrapping.


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

Branch: refs/heads/master
Commit: 357f6deb4f9b4a891b5446e3942ac5b842127fcc
Parents: d3c0705
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Jul 28 10:16:55 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Jul 28 10:16:55 2013 +0200

----------------------------------------------------------------------
 .../apache/camel/impl/DefaultCamelContext.java  |  7 +----
 .../org/apache/camel/model/RouteDefinition.java |  1 -
 .../camel/processor/CamelInternalProcessor.java | 30 ++++++++++++++++++++
 .../processor/interceptor/DefaultChannel.java   |  4 +++
 .../processor/interceptor/DelayInterceptor.java |  3 ++
 .../camel/processor/interceptor/Delayer.java    |  3 ++
 .../camel/processor/DelayInterceptorTest.java   |  8 ++----
 7 files changed, 44 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/357f6deb/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 8a3091f..c7e7851 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
@@ -1579,12 +1579,7 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
         }
 
         if (getDelayer() != null && getDelayer() > 0) {
-            // only add a new delayer if not already configured
-            if (Delayer.getDelayer(this) == null) {
-                long millis = getDelayer();
-                log.info("Delayer is enabled with: {} ms. on CamelContext: {}", millis, getName());
-                addInterceptStrategy(new Delayer(millis));
-            }
+            log.info("Delayer is enabled with: {} ms. on CamelContext: {}", getDelayer(), getName());
         }
         
         // register debugger

http://git-wip-us.apache.org/repos/asf/camel/blob/357f6deb/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java b/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
index 9af2d2e..4022b0b 100644
--- a/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
@@ -844,7 +844,6 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> {
                 routeContext.setDelayer(delayer);
                 if (delayer > 0) {
                     log.debug("Delayer is enabled with: {} ms. on route: {}", delayer, getId());
-                    addInterceptStrategy(new Delayer(delayer));
                 } else {
                     log.debug("Delayer is disabled on route: {}", getId());
                 }

http://git-wip-us.apache.org/repos/asf/camel/blob/357f6deb/camel-core/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
index b93496e..343eed6 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
@@ -759,4 +759,34 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
         }
     }
 
+    /**
+     * Advice for delaying
+     */
+    public static class DelayerAdvice implements CamelInternalProcessorAdvice {
+
+        private final long delay;
+
+        public DelayerAdvice(long delay) {
+            this.delay = delay;
+        }
+
+        @Override
+        public Object before(Exchange exchange) throws Exception {
+            try {
+                LOG.trace("Sleeping for: {} millis", delay);
+                Thread.sleep(delay);
+            } catch (InterruptedException e) {
+                LOG.debug("Sleep interrupted");
+                Thread.currentThread().interrupt();
+                throw e;
+            }
+            return null;
+        }
+
+        @Override
+        public void after(Exchange exchange, Object data) throws Exception {
+            // noop
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/357f6deb/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
index 6af5e96..7ebe5b0 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
@@ -278,6 +278,10 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
             addAdvice(new StreamCachingAdvice(camelContext.getStreamCachingStrategy()));
         }
 
+        if (routeContext.getDelayer() != null && routeContext.getDelayer() > 0) {
+            addAdvice(new DelayerAdvice(routeContext.getDelayer()));
+        }
+
         // sets the delegate to our wrapped output
         output = target;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/357f6deb/camel-core/src/main/java/org/apache/camel/processor/interceptor/DelayInterceptor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DelayInterceptor.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DelayInterceptor.java
index b65a4d8..a5a65a1 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DelayInterceptor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DelayInterceptor.java
@@ -24,7 +24,10 @@ import org.apache.camel.processor.DelayProcessorSupport;
 
 /**
  * An interceptor for delaying routes.
+ *
+ * @deprecated no longer in use, will be removed in next Camel release.
  */
+@Deprecated
 public class DelayInterceptor extends DelayProcessorSupport {
 
     private final ProcessorDefinition<?> node;

http://git-wip-us.apache.org/repos/asf/camel/blob/357f6deb/camel-core/src/main/java/org/apache/camel/processor/interceptor/Delayer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/Delayer.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/Delayer.java
index 6e833ad..8e8bf4e 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/Delayer.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/Delayer.java
@@ -25,7 +25,10 @@ import org.apache.camel.spi.InterceptStrategy;
 
 /**
  * An interceptor strategy for delaying routes.
+ *
+ * @deprecated no longer in use, will be removed in next Camel release.
  */
+@Deprecated
 public class Delayer implements InterceptStrategy {
 
     private volatile boolean enabled = true;

http://git-wip-us.apache.org/repos/asf/camel/blob/357f6deb/camel-core/src/test/java/org/apache/camel/processor/DelayInterceptorTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/DelayInterceptorTest.java b/camel-core/src/test/java/org/apache/camel/processor/DelayInterceptorTest.java
index cc2ef09..1ea6eea 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/DelayInterceptorTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/DelayInterceptorTest.java
@@ -20,7 +20,6 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.processor.interceptor.Delayer;
 
 /**
  * Delay interceptor unit test.
@@ -50,11 +49,10 @@ public class DelayInterceptorTest extends ContextTestSupport {
         return new RouteBuilder() {
             // START SNIPPET: e1
             public void configure() throws Exception {
-                // add the delay interceptor to delay each step 200 millis
-                getContext().addInterceptStrategy(new Delayer(200));
-                
+                // configure delayer for each step 200 millis
+                getContext().setDelayer(200L);
+
                 // regular routes here
-            // END SNIPPET: e1
 
                 from("direct:start").
                         process(new Processor() {


[3/4] git commit: CAMEL-6583: Added option includeAllJMSXProperties to camel-jms.

Posted by da...@apache.org.
CAMEL-6583: Added option includeAllJMSXProperties to camel-jms.


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

Branch: refs/heads/master
Commit: 96270b365572bd2194b3d9551b422e15b3a69299
Parents: 9433bf1
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Jul 28 14:05:52 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Jul 28 14:05:52 2013 +0200

----------------------------------------------------------------------
 .../apache/camel/component/jms/JmsBinding.java  |  4 +-
 .../camel/component/jms/JmsComponent.java       | 16 ++++-
 .../camel/component/jms/JmsConfiguration.java   | 16 +++++
 .../apache/camel/component/jms/JmsEndpoint.java | 12 +++-
 .../component/jms/JmsHeaderFilterStrategy.java  |  8 ++-
 .../component/jms/JmsHeaderFilteringTest.java   | 19 ++++--
 .../jms/JmsIncludeAllJMSXPropertiesTest.java    | 71 ++++++++++++++++++++
 .../jms/JmsNotIncludeAllJMSXPropertiesTest.java | 71 ++++++++++++++++++++
 8 files changed, 206 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
index 4fca604..ed666df 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
@@ -77,7 +77,7 @@ public class JmsBinding {
 
     public JmsBinding() {
         this.endpoint = null;
-        headerFilterStrategy = new JmsHeaderFilterStrategy();
+        headerFilterStrategy = new JmsHeaderFilterStrategy(false);
         jmsKeyFormatStrategy = new DefaultJmsKeyFormatStrategy();
     }
 
@@ -86,7 +86,7 @@ public class JmsBinding {
         if (endpoint.getHeaderFilterStrategy() != null) {
             headerFilterStrategy = endpoint.getHeaderFilterStrategy();
         } else {
-            headerFilterStrategy = new JmsHeaderFilterStrategy();
+            headerFilterStrategy = new JmsHeaderFilterStrategy(endpoint.isIncludeAllJMSXProperties());
         }
         if (endpoint.getJmsKeyFormatStrategy() != null) {
             jmsKeyFormatStrategy = endpoint.getJmsKeyFormatStrategy();

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
index b31d504..2576946 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
@@ -53,7 +53,7 @@ public class JmsComponent extends UriEndpointComponent implements ApplicationCon
     private JmsConfiguration configuration;
     private ApplicationContext applicationContext;
     private QueueBrowseStrategy queueBrowseStrategy;
-    private HeaderFilterStrategy headerFilterStrategy = new JmsHeaderFilterStrategy();
+    private HeaderFilterStrategy headerFilterStrategy;
     private ExecutorService asyncStartStopExecutorService;
     private MessageListenerContainerFactory messageListenerContainerFactory;
 
@@ -382,7 +382,11 @@ public class JmsComponent extends UriEndpointComponent implements ApplicationCon
     public void setIncludeSentJMSMessageID(boolean includeSentJMSMessageID) {
         getConfiguration().setIncludeSentJMSMessageID(includeSentJMSMessageID);
     }
-    
+
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        getConfiguration().setIncludeAllJMSXProperties(includeAllJMSXProperties);
+    }
+
     public void setDefaultTaskExecutorType(DefaultTaskExecutorType type) {
         getConfiguration().setDefaultTaskExecutorType(type);
     }
@@ -427,6 +431,14 @@ public class JmsComponent extends UriEndpointComponent implements ApplicationCon
     // Implementation methods
     // -------------------------------------------------------------------------
 
+
+    @Override
+    protected void doStart() throws Exception {
+        if (headerFilterStrategy == null) {
+            headerFilterStrategy = new JmsHeaderFilterStrategy(getConfiguration().isIncludeAllJMSXProperties());
+        }
+    }
+
     @Override
     protected void doShutdown() throws Exception {
         if (asyncStartStopExecutorService != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
index ae22f94..1ae25fa 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
@@ -191,6 +191,8 @@ public class JmsConfiguration implements Cloneable {
     @UriParam
     private boolean includeSentJMSMessageID;
     private DefaultTaskExecutorType defaultTaskExecutorType;
+    @UriParam
+    private boolean includeAllJMSXProperties;
 
     public JmsConfiguration() {
     }
@@ -1379,4 +1381,18 @@ public class JmsConfiguration implements Cloneable {
     public void setDefaultTaskExecutorType(DefaultTaskExecutorType defaultTaskExecutorType) {
         this.defaultTaskExecutorType = defaultTaskExecutorType;
     }
+
+    public boolean isIncludeAllJMSXProperties() {
+        return includeAllJMSXProperties;
+    }
+
+    /**
+     * Whether to include all <tt>JMSX</tt> properties as Camel headers when binding from JMS to Camel Message.
+     * <p/>
+     * By default a number of properties is excluded accordingly to the table of JMS properties in the JMS 1.1 spec,
+     * on page 39.
+     */
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        this.includeAllJMSXProperties = includeAllJMSXProperties;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
index d941af7..0b1741a 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
@@ -313,7 +313,7 @@ public class JmsEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
 
     public HeaderFilterStrategy getHeaderFilterStrategy() {
         if (headerFilterStrategy == null) {
-            headerFilterStrategy = new JmsHeaderFilterStrategy();
+            headerFilterStrategy = new JmsHeaderFilterStrategy(isIncludeAllJMSXProperties());
         }
         return headerFilterStrategy;
     }
@@ -1083,6 +1083,16 @@ public class JmsEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
     }
 
     @ManagedAttribute
+    public boolean isIncludeAllJMSXProperties() {
+        return configuration.isIncludeAllJMSXProperties();
+    }
+
+    @ManagedAttribute
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        configuration.setIncludeAllJMSXProperties(includeAllJMSXProperties);
+    }
+
+    @ManagedAttribute
     public DefaultTaskExecutorType getDefaultTaskExecutorType() {
         return configuration.getDefaultTaskExecutorType();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
index 9f65159..12c7f04 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
@@ -24,7 +24,13 @@ import org.apache.camel.impl.DefaultHeaderFilterStrategy;
 public class JmsHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
 
     public JmsHeaderFilterStrategy() {
-        initialize();
+        this(false);
+    }
+
+    public JmsHeaderFilterStrategy(boolean includeAllJMSXProperties) {
+        if (!includeAllJMSXProperties) {
+            initialize();
+        }
     }
 
     protected void initialize() {

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
index 8ab24fe..fa7dc4f 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
@@ -59,6 +59,7 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
                 exchange.getIn().setHeader("org.apache.camel.test.jms", 20000);
                 exchange.getIn().setHeader("testheader", 1020);
                 exchange.getIn().setHeader("anotherheader", 1030);
+                exchange.getIn().setHeader("JMSXAppID", "myApp");
             }
 
         });
@@ -75,13 +76,15 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
         ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
         camelContext.addComponent(componentName, jmsComponentAutoAcknowledge(connectionFactory));
 
-        // add "testheader" to in filter set
         JmsComponent component = camelContext.getComponent(componentName, JmsComponent.class);
-        ((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).getInFilter().add("testheader");
-        // add "anotherheader" to out filter set
-        ((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).getOutFilter().add("anotherheader");
+
+        JmsHeaderFilterStrategy filter = new JmsHeaderFilterStrategy();
+        filter.getInFilter().add("testheader");
+        filter.getOutFilter().add("anotherheader");
         // add a regular expression pattern filter, notice that dots are encoded to '_DOT_' in jms headers
-        ((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).setInFilterPattern(IN_FILTER_PATTERN);
+        filter.setInFilterPattern(IN_FILTER_PATTERN);
+
+        component.setHeaderFilterStrategy(filter);
 
         return camelContext;
     }
@@ -116,6 +119,9 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
             // like testheader, org.apache.camel.test.jms will be filtered by the "in" filter
             assertEquals(20000, message.getJmsMessage().getObjectProperty("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
 
+            // should be filtered by default
+            assertNull(message.getJmsMessage().getStringProperty("JMSXAppID"));
+
             latch.countDown();
         }
 
@@ -137,6 +143,9 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
             // filtered out by "in" filter
             assertNull(exchange.getIn().getHeader("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
 
+            // should be filtered by default
+            assertNull(exchange.getIn().getHeader("JMSXAppID"));
+
             latch.countDown();
         }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
new file mode 100644
index 0000000..bd11175
--- /dev/null
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
@@ -0,0 +1,71 @@
+/**
+ * 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.component.jms;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+
+/**
+ *
+ * @version 
+ */
+public class JmsIncludeAllJMSXPropertiesTest extends CamelTestSupport {
+
+    @Test
+    public void testIncludeAll() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "bar");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXUserID", "Donald");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXAppID", "MyApp");
+
+        Map headers = new HashMap();
+        headers.put("foo", "bar");
+        headers.put("JMSXUserID", "Donald");
+        headers.put("JMSXAppID", "MyApp");
+
+        template.sendBodyAndHeaders("activemq:queue:in", "Hello World", headers);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
+        JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
+        jms.setIncludeAllJMSXProperties(true);
+        camelContext.addComponent("activemq", jms);
+        return camelContext;
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("activemq:queue:in")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/96270b36/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
new file mode 100644
index 0000000..4bb8695
--- /dev/null
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
@@ -0,0 +1,71 @@
+/**
+ * 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.component.jms;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+
+/**
+ *
+ * @version 
+ */
+public class JmsNotIncludeAllJMSXPropertiesTest extends CamelTestSupport {
+
+    @Test
+    public void testNotIncludeAll() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "bar");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXUserID", null);
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXAppID", null);
+
+        Map headers = new HashMap();
+        headers.put("foo", "bar");
+        headers.put("JMSXUserID", "Donald");
+        headers.put("JMSXAppID", "MyApp");
+
+        template.sendBodyAndHeaders("activemq:queue:in", "Hello World", headers);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
+        JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
+        jms.setIncludeAllJMSXProperties(false);
+        camelContext.addComponent("activemq", jms);
+        return camelContext;
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("activemq:queue:in")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}


[2/4] git commit: CAMEL-6581: Changing destination using JMX on SendProcessor not longer supported, to aid optimizing routing engine.

Posted by da...@apache.org.
CAMEL-6581: Changing destination using JMX on SendProcessor not longer supported, to aid optimizing routing engine.


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

Branch: refs/heads/master
Commit: 9433bf1347544f9acad8b0c2a74e4e480de20dc7
Parents: 357f6de
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Jul 28 10:42:27 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Jul 28 10:42:27 2013 +0200

----------------------------------------------------------------------
 .../mbean/ManagedSendProcessorMBean.java        |  4 ++++
 .../management/mbean/ManagedSendProcessor.java  |  4 +---
 .../apache/camel/processor/SendProcessor.java   |  9 ++++-----
 .../management/ManagedSendProcessorTest.java    | 21 --------------------
 4 files changed, 9 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/9433bf13/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
index e35e468..a99a49f 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java
@@ -23,7 +23,11 @@ public interface ManagedSendProcessorMBean extends ManagedProcessorMBean {
     @ManagedAttribute(description = "Destination as Endpoint URI")
     String getDestination();
 
+    /**
+     * @deprecated no longer in use. Will be removed in a future Camel release.
+     */
     @ManagedAttribute(description = "Destination as Endpoint URI")
+    @Deprecated
     void setDestination(String uri);
 
     @ManagedAttribute(description = "Message Exchange Pattern")

http://git-wip-us.apache.org/repos/asf/camel/blob/9433bf13/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
index 43688e8..668d963 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
@@ -17,7 +17,6 @@
 package org.apache.camel.management.mbean;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedSendProcessorMBean;
 import org.apache.camel.model.ProcessorDefinition;
@@ -44,8 +43,7 @@ public class ManagedSendProcessor extends ManagedProcessor implements ManagedSen
     }
 
     public void setDestination(String uri) {
-        Endpoint endpoint = getContext().getEndpoint(uri);
-        processor.setDestination(endpoint);
+        // noop
     }
 
     public String getMessageExchangePattern() {

http://git-wip-us.apache.org/repos/asf/camel/blob/9433bf13/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
index 56f1f6e..c197aa5 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
@@ -66,12 +66,11 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
         return "sendTo(" + destination + (pattern != null ? " " + pattern : "") + ")";
     }
 
+    /**
+     * @deprecated not longer supported.
+     */
+    @Deprecated
     public void setDestination(Endpoint destination) {
-        this.destination = destination;
-        // destination changed so purge the cache
-        if (producerCache != null) {
-            producerCache.purge();
-        }
     }
 
     public String getTraceLabel() {

http://git-wip-us.apache.org/repos/asf/camel/blob/9433bf13/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
index 3f01465..6113790 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedSendProcessorTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.management;
 
-import javax.management.Attribute;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -60,26 +59,6 @@ public class ManagedSendProcessorTest extends ManagementTestSupport {
 
         String pattern = (String) mbeanServer.getAttribute(on, "MessageExchangePattern");
         assertNull(pattern);
-
-        // we must stop it to change the destination
-        mbeanServer.invoke(on, "stop", null, null);
-
-        // send it somewhere else
-        mbeanServer.setAttribute(on, new Attribute("Destination", "direct:foo"));
-
-        // start it
-        mbeanServer.invoke(on, "start", null, null);
-
-        // prepare mocks
-        result.reset();
-        result.expectedMessageCount(0);
-        foo.reset();
-        foo.expectedMessageCount(1);
-
-        // send in another message that should be sent to mock:foo
-        template.sendBody("direct:start", "Bye World");
-
-        assertMockEndpointsSatisfied();
     }
 
     @Override


[4/4] git commit: CAMEL-6583: Added option includeAllJMSXProperties to camel-jms.

Posted by da...@apache.org.
CAMEL-6583: Added option includeAllJMSXProperties to camel-jms.


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

Branch: refs/heads/camel-2.11.x
Commit: 51369fbc5bdb5d4787666cfb3c6f735e0753d20f
Parents: d37b8fa
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Jul 28 14:05:52 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Jul 28 14:06:51 2013 +0200

----------------------------------------------------------------------
 .../apache/camel/component/jms/JmsBinding.java  |  4 +-
 .../camel/component/jms/JmsComponent.java       | 16 ++++-
 .../camel/component/jms/JmsConfiguration.java   | 16 +++++
 .../apache/camel/component/jms/JmsEndpoint.java | 12 +++-
 .../component/jms/JmsHeaderFilterStrategy.java  |  8 ++-
 .../component/jms/JmsHeaderFilteringTest.java   | 19 ++++--
 .../jms/JmsIncludeAllJMSXPropertiesTest.java    | 71 ++++++++++++++++++++
 .../jms/JmsNotIncludeAllJMSXPropertiesTest.java | 71 ++++++++++++++++++++
 8 files changed, 206 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
index 4fca604..ed666df 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
@@ -77,7 +77,7 @@ public class JmsBinding {
 
     public JmsBinding() {
         this.endpoint = null;
-        headerFilterStrategy = new JmsHeaderFilterStrategy();
+        headerFilterStrategy = new JmsHeaderFilterStrategy(false);
         jmsKeyFormatStrategy = new DefaultJmsKeyFormatStrategy();
     }
 
@@ -86,7 +86,7 @@ public class JmsBinding {
         if (endpoint.getHeaderFilterStrategy() != null) {
             headerFilterStrategy = endpoint.getHeaderFilterStrategy();
         } else {
-            headerFilterStrategy = new JmsHeaderFilterStrategy();
+            headerFilterStrategy = new JmsHeaderFilterStrategy(endpoint.isIncludeAllJMSXProperties());
         }
         if (endpoint.getJmsKeyFormatStrategy() != null) {
             jmsKeyFormatStrategy = endpoint.getJmsKeyFormatStrategy();

http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
index a8e0fc6..b85a075 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
@@ -53,7 +53,7 @@ public class JmsComponent extends DefaultComponent implements ApplicationContext
     private JmsConfiguration configuration;
     private ApplicationContext applicationContext;
     private QueueBrowseStrategy queueBrowseStrategy;
-    private HeaderFilterStrategy headerFilterStrategy = new JmsHeaderFilterStrategy();
+    private HeaderFilterStrategy headerFilterStrategy;
     private ExecutorService asyncStartStopExecutorService;
     private MessageListenerContainerFactory messageListenerContainerFactory;
 
@@ -380,7 +380,11 @@ public class JmsComponent extends DefaultComponent implements ApplicationContext
     public void setIncludeSentJMSMessageID(boolean includeSentJMSMessageID) {
         getConfiguration().setIncludeSentJMSMessageID(includeSentJMSMessageID);
     }
-    
+
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        getConfiguration().setIncludeAllJMSXProperties(includeAllJMSXProperties);
+    }
+
     public void setDefaultTaskExecutorType(DefaultTaskExecutorType type) {
         getConfiguration().setDefaultTaskExecutorType(type);
     }
@@ -425,6 +429,14 @@ public class JmsComponent extends DefaultComponent implements ApplicationContext
     // Implementation methods
     // -------------------------------------------------------------------------
 
+
+    @Override
+    protected void doStart() throws Exception {
+        if (headerFilterStrategy == null) {
+            headerFilterStrategy = new JmsHeaderFilterStrategy(getConfiguration().isIncludeAllJMSXProperties());
+        }
+    }
+
     @Override
     protected void doShutdown() throws Exception {
         if (asyncStartStopExecutorService != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
index 838fc52..349bef0 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
@@ -138,6 +138,8 @@ public class JmsConfiguration implements Cloneable {
     private MessageListenerContainerFactory messageListenerContainerFactory;
     private boolean includeSentJMSMessageID;
     private DefaultTaskExecutorType defaultTaskExecutorType;
+    @UriParam
+    private boolean includeAllJMSXProperties;
 
     public JmsConfiguration() {
     }
@@ -1326,4 +1328,18 @@ public class JmsConfiguration implements Cloneable {
     public void setDefaultTaskExecutorType(DefaultTaskExecutorType defaultTaskExecutorType) {
         this.defaultTaskExecutorType = defaultTaskExecutorType;
     }
+
+    public boolean isIncludeAllJMSXProperties() {
+        return includeAllJMSXProperties;
+    }
+
+    /**
+     * Whether to include all <tt>JMSX</tt> properties as Camel headers when binding from JMS to Camel Message.
+     * <p/>
+     * By default a number of properties is excluded accordingly to the table of JMS properties in the JMS 1.1 spec,
+     * on page 39.
+     */
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        this.includeAllJMSXProperties = includeAllJMSXProperties;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
index df53ef8..45828f4 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
@@ -305,7 +305,7 @@ public class JmsEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
 
     public HeaderFilterStrategy getHeaderFilterStrategy() {
         if (headerFilterStrategy == null) {
-            headerFilterStrategy = new JmsHeaderFilterStrategy();
+            headerFilterStrategy = new JmsHeaderFilterStrategy(isIncludeAllJMSXProperties());
         }
         return headerFilterStrategy;
     }
@@ -1075,6 +1075,16 @@ public class JmsEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
     }
 
     @ManagedAttribute
+    public boolean isIncludeAllJMSXProperties() {
+        return configuration.isIncludeAllJMSXProperties();
+    }
+
+    @ManagedAttribute
+    public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
+        configuration.setIncludeAllJMSXProperties(includeAllJMSXProperties);
+    }
+
+    @ManagedAttribute
     public DefaultTaskExecutorType getDefaultTaskExecutorType() {
         return configuration.getDefaultTaskExecutorType();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
index 9f65159..12c7f04 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
@@ -24,7 +24,13 @@ import org.apache.camel.impl.DefaultHeaderFilterStrategy;
 public class JmsHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
 
     public JmsHeaderFilterStrategy() {
-        initialize();
+        this(false);
+    }
+
+    public JmsHeaderFilterStrategy(boolean includeAllJMSXProperties) {
+        if (!includeAllJMSXProperties) {
+            initialize();
+        }
     }
 
     protected void initialize() {

http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
index 8ab24fe..fa7dc4f 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
@@ -59,6 +59,7 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
                 exchange.getIn().setHeader("org.apache.camel.test.jms", 20000);
                 exchange.getIn().setHeader("testheader", 1020);
                 exchange.getIn().setHeader("anotherheader", 1030);
+                exchange.getIn().setHeader("JMSXAppID", "myApp");
             }
 
         });
@@ -75,13 +76,15 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
         ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
         camelContext.addComponent(componentName, jmsComponentAutoAcknowledge(connectionFactory));
 
-        // add "testheader" to in filter set
         JmsComponent component = camelContext.getComponent(componentName, JmsComponent.class);
-        ((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).getInFilter().add("testheader");
-        // add "anotherheader" to out filter set
-        ((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).getOutFilter().add("anotherheader");
+
+        JmsHeaderFilterStrategy filter = new JmsHeaderFilterStrategy();
+        filter.getInFilter().add("testheader");
+        filter.getOutFilter().add("anotherheader");
         // add a regular expression pattern filter, notice that dots are encoded to '_DOT_' in jms headers
-        ((DefaultHeaderFilterStrategy)component.getHeaderFilterStrategy()).setInFilterPattern(IN_FILTER_PATTERN);
+        filter.setInFilterPattern(IN_FILTER_PATTERN);
+
+        component.setHeaderFilterStrategy(filter);
 
         return camelContext;
     }
@@ -116,6 +119,9 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
             // like testheader, org.apache.camel.test.jms will be filtered by the "in" filter
             assertEquals(20000, message.getJmsMessage().getObjectProperty("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
 
+            // should be filtered by default
+            assertNull(message.getJmsMessage().getStringProperty("JMSXAppID"));
+
             latch.countDown();
         }
 
@@ -137,6 +143,9 @@ public class JmsHeaderFilteringTest extends CamelTestSupport {
             // filtered out by "in" filter
             assertNull(exchange.getIn().getHeader("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
 
+            // should be filtered by default
+            assertNull(exchange.getIn().getHeader("JMSXAppID"));
+
             latch.countDown();
         }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
new file mode 100644
index 0000000..bd11175
--- /dev/null
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsIncludeAllJMSXPropertiesTest.java
@@ -0,0 +1,71 @@
+/**
+ * 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.component.jms;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+
+/**
+ *
+ * @version 
+ */
+public class JmsIncludeAllJMSXPropertiesTest extends CamelTestSupport {
+
+    @Test
+    public void testIncludeAll() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "bar");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXUserID", "Donald");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXAppID", "MyApp");
+
+        Map headers = new HashMap();
+        headers.put("foo", "bar");
+        headers.put("JMSXUserID", "Donald");
+        headers.put("JMSXAppID", "MyApp");
+
+        template.sendBodyAndHeaders("activemq:queue:in", "Hello World", headers);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
+        JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
+        jms.setIncludeAllJMSXProperties(true);
+        camelContext.addComponent("activemq", jms);
+        return camelContext;
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("activemq:queue:in")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/51369fbc/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
new file mode 100644
index 0000000..4bb8695
--- /dev/null
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotIncludeAllJMSXPropertiesTest.java
@@ -0,0 +1,71 @@
+/**
+ * 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.component.jms;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+
+/**
+ *
+ * @version 
+ */
+public class JmsNotIncludeAllJMSXPropertiesTest extends CamelTestSupport {
+
+    @Test
+    public void testNotIncludeAll() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:result").expectedHeaderReceived("foo", "bar");
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXUserID", null);
+        getMockEndpoint("mock:result").expectedHeaderReceived("JMSXAppID", null);
+
+        Map headers = new HashMap();
+        headers.put("foo", "bar");
+        headers.put("JMSXUserID", "Donald");
+        headers.put("JMSXAppID", "MyApp");
+
+        template.sendBodyAndHeaders("activemq:queue:in", "Hello World", headers);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
+        JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
+        jms.setIncludeAllJMSXProperties(false);
+        camelContext.addComponent("activemq", jms);
+        return camelContext;
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("activemq:queue:in")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}