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 2012/01/16 15:56:28 UTC

svn commit: r1232013 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/impl/ main/java/org/apache/camel/spi/ main/java/org/apache/camel/util/concurrent/ test/java/org/apache/camel/impl/ test/java/org/apache/camel/processor/

Author: davsclaus
Date: Mon Jan 16 14:56:28 2012
New Revision: 1232013

URL: http://svn.apache.org/viewvc?rev=1232013&view=rev
Log:
CAMEL-4093: Changed thread name pattern tokens to not clash with property placeholder tokens.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceManager.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ThreadHelper.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelAggregateThreadPoolIssueTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java?rev=1232013&r1=1232012&r2=1232013&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java Mon Jan 16 14:56:28 2012
@@ -123,7 +123,7 @@ public class DefaultExecutorServiceManag
     @Override
     public void setThreadNamePattern(String threadNamePattern) {
         // must set camel id here in the pattern and let the other placeholders be resolved on demand
-        String name = threadNamePattern.replaceFirst("\\$\\{camelId\\}", this.camelContext.getName());
+        String name = threadNamePattern.replaceFirst("#camelId#", this.camelContext.getName());
         this.threadNamePattern = name;
     }
     
@@ -282,7 +282,7 @@ public class DefaultExecutorServiceManag
     protected void doStart() throws Exception {
         if (threadNamePattern == null) {
             // set default name pattern which includes the camel context name
-            threadNamePattern = "Camel (" + camelContext.getName() + ") thread #${counter} - ${name}";
+            threadNamePattern = "Camel (" + camelContext.getName() + ") thread ##counter# - #name#";
         }
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceManager.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceManager.java?rev=1232013&r1=1232012&r2=1232013&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceManager.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceManager.java Mon Jan 16 14:56:28 2012
@@ -101,12 +101,12 @@ public interface ExecutorServiceManager 
     /**
      * Sets the thread name pattern used for creating the full thread name.
      * <p/>
-     * The default pattern is: <tt>Camel (${camelId}) thread #${counter} - ${name}</tt>
+     * The default pattern is: <tt>Camel (#camelId#) thread ##counter# - #name#</tt>
      * <p/>
-     * Where <tt>${camelId}</tt> is the name of the {@link org.apache.camel.CamelContext}
-     * <br/>and <tt>${counter}</tt> is a unique incrementing counter.
-     * <br/>and <tt>${name}</tt> is the regular thread name.
-     * <br/>You can also use <tt>${longName}</tt> is the long thread name which can includes endpoint parameters etc.
+     * Where <tt>#camelId#</tt> is the name of the {@link org.apache.camel.CamelContext}
+     * <br/>and <tt>#counter#</tt> is a unique incrementing counter.
+     * <br/>and <tt>#name#</tt> is the regular thread name.
+     * <br/>You can also use <tt>#longName#</tt> is the long thread name which can includes endpoint parameters etc.
      *
      * @param pattern the pattern
      * @throws IllegalArgumentException if the pattern is invalid.

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceStrategy.java?rev=1232013&r1=1232012&r2=1232013&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ExecutorServiceStrategy.java Mon Jan 16 14:56:28 2012
@@ -90,12 +90,12 @@ public interface ExecutorServiceStrategy
     /**
      * Sets the thread name pattern used for creating the full thread name.
      * <p/>
-     * The default pattern is: <tt>Camel (${camelId}) thread #${counter} - ${name}</tt>
+     * The default pattern is: <tt>Camel (#camelId#) thread #counter# - #name#</tt>
      * <p/>
-     * Where <tt>${camelId}</tt> is the name of the {@link org.apache.camel.CamelContext}
-     * <br/>and <tt>${counter}</tt> is a unique incrementing counter.
-     * <br/>and <tt>${name}</tt> is the regular thread name.
-     * <br/>You can also use <tt>${longName}</tt> is the long thread name which can includes endpoint parameters etc.
+     * Where <tt>#camelId#</tt> is the name of the {@link org.apache.camel.CamelContext}
+     * <br/>and <tt>#counter#</tt> is a unique incrementing counter.
+     * <br/>and <tt>#name#</tt> is the regular thread name.
+     * <br/>You can also use <tt>#longName#</tt> is the long thread name which can includes endpoint parameters etc.
      *
      * @param pattern  the pattern
      * @throws IllegalArgumentException if the pattern is invalid.

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ThreadHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ThreadHelper.java?rev=1232013&r1=1232012&r2=1232013&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ThreadHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ThreadHelper.java Mon Jan 16 14:56:28 2012
@@ -17,6 +17,8 @@
 package org.apache.camel.util.concurrent;
 
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.camel.util.ObjectHelper;
 
@@ -24,8 +26,9 @@ import org.apache.camel.util.ObjectHelpe
  * Various helper method for thread naming.
  */
 public final class ThreadHelper {
-    public static final String DEFAULT_PATTERN = "Camel Thread ${counter} - ${name}";
-    
+    public static final String DEFAULT_PATTERN = "Camel Thread ##counter# - #name#";
+    private static final Pattern INVALID_PATTERN = Pattern.compile(".*#\\w+#.*");
+
     private static AtomicLong threadCounter = new AtomicLong();
     
     private ThreadHelper() {
@@ -37,6 +40,8 @@ public final class ThreadHelper {
 
     /**
      * Creates a new thread name with the given pattern
+     * <p/>
+     * See {@link org.apache.camel.spi.ExecutorServiceManager#setThreadNamePattern(String)} for supported patterns.
      *
      * @param pattern the pattern
      * @param name    the name
@@ -47,26 +52,23 @@ public final class ThreadHelper {
             pattern = DEFAULT_PATTERN;
         }
 
-        // the name could potential have a $ sign we want to keep
-        if (name.indexOf("$") > -1) {
-            name = name.replaceAll("\\$", "CAMEL_REPLACE_ME");
-        }
-
-        // we support ${longName} and ${name} as name placeholders
+        // we support #longName# and #name# as name placeholders
         String longName = name;
         String shortName = name.contains("?") ? ObjectHelper.before(name, "?") : name;
+        // must quote the names to have it work as literal replacement
+        shortName = Matcher.quoteReplacement(shortName);
+        longName = Matcher.quoteReplacement(longName);
+
+        // replace tokens
+        String answer = pattern.replaceFirst("#counter#", "" + nextThreadCounter());
+        answer = answer.replaceFirst("#longName#", longName);
+        answer = answer.replaceFirst("#name#", shortName);
 
-        String answer = pattern.replaceFirst("\\$\\{counter\\}", "" + nextThreadCounter());
-        answer = answer.replaceFirst("\\$\\{longName\\}", longName);
-        answer = answer.replaceFirst("\\$\\{name\\}", shortName);
-        if (answer.indexOf("$") > -1 || answer.indexOf("${") > -1 || answer.indexOf("}") > -1) {
+        // are there any #word# combos left, if so they should be considered invalid tokens
+        if (INVALID_PATTERN.matcher(answer).matches()) {
             throw new IllegalArgumentException("Pattern is invalid: " + pattern);
         }
 
-        if (answer.indexOf("CAMEL_REPLACE_ME") > -1) {
-            answer = answer.replaceAll("CAMEL_REPLACE_ME", "\\$");
-        }
-
         return answer;
     }
 

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java?rev=1232013&r1=1232012&r2=1232013&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java Mon Jan 16 14:56:28 2012
@@ -42,8 +42,8 @@ public class DefaultExecutorServiceManag
     }
 
     public void testGetThreadNameCustomPattern() throws Exception {
-        context.getExecutorServiceManager().setThreadNamePattern("#${counter} - ${name}");
-        assertEquals("#${counter} - ${name}", context.getExecutorServiceManager().getThreadNamePattern());
+        context.getExecutorServiceManager().setThreadNamePattern("##counter# - #name#");
+        assertEquals("##counter# - #name#", context.getExecutorServiceManager().getThreadNamePattern());
         String foo = context.getExecutorServiceManager().resolveThreadName("foo");
         String bar = context.getExecutorServiceManager().resolveThreadName("bar");
 
@@ -55,7 +55,7 @@ public class DefaultExecutorServiceManag
     }
 
     public void testGetThreadNameCustomPatternCamelId() throws Exception {
-        context.getExecutorServiceManager().setThreadNamePattern("#${camelId} - #${counter} - ${name}");
+        context.getExecutorServiceManager().setThreadNamePattern("##camelId# - ##counter# - #name#");
         String foo = context.getExecutorServiceManager().resolveThreadName("foo");
         String bar = context.getExecutorServiceManager().resolveThreadName("bar");
 
@@ -67,14 +67,14 @@ public class DefaultExecutorServiceManag
     }
 
     public void testGetThreadNameCustomPatternWithDollar() throws Exception {
-        context.getExecutorServiceManager().setThreadNamePattern("Hello - ${name}");
+        context.getExecutorServiceManager().setThreadNamePattern("Hello - #name#");
         String foo = context.getExecutorServiceManager().resolveThreadName("foo$bar");
 
         assertEquals("Hello - foo$bar", foo);
     }
 
     public void testGetThreadNameCustomPatternLongName() throws Exception {
-        context.getExecutorServiceManager().setThreadNamePattern("#${counter} - ${longName}");
+        context.getExecutorServiceManager().setThreadNamePattern("##counter# - #longName#");
         String foo = context.getExecutorServiceManager().resolveThreadName("foo?beer=Carlsberg");
         String bar = context.getExecutorServiceManager().resolveThreadName("bar");
 
@@ -86,7 +86,7 @@ public class DefaultExecutorServiceManag
     }
 
     public void testGetThreadNameCustomPatternWithParameters() throws Exception {
-        context.getExecutorServiceManager().setThreadNamePattern("#${counter} - ${name}");
+        context.getExecutorServiceManager().setThreadNamePattern("##counter# - #name#");
         String foo = context.getExecutorServiceManager().resolveThreadName("foo?beer=Carlsberg");
         String bar = context.getExecutorServiceManager().resolveThreadName("bar");
 
@@ -98,7 +98,7 @@ public class DefaultExecutorServiceManag
     }
 
     public void testGetThreadNameCustomPatternNoCounter() throws Exception {
-        context.getExecutorServiceManager().setThreadNamePattern("Cool ${name}");
+        context.getExecutorServiceManager().setThreadNamePattern("Cool #name#");
         String foo = context.getExecutorServiceManager().resolveThreadName("foo");
         String bar = context.getExecutorServiceManager().resolveThreadName("bar");
 
@@ -108,16 +108,16 @@ public class DefaultExecutorServiceManag
     }
 
     public void testGetThreadNameCustomPatternInvalid() throws Exception {
-        context.getExecutorServiceManager().setThreadNamePattern("Cool ${xxx}");
+        context.getExecutorServiceManager().setThreadNamePattern("Cool #xxx#");
         try {
             context.getExecutorServiceManager().resolveThreadName("foo");
             fail("Should thrown an exception");
         } catch (IllegalArgumentException e) {
-            assertEquals("Pattern is invalid: Cool ${xxx}", e.getMessage());
+            assertEquals("Pattern is invalid: Cool #xxx#", e.getMessage());
         }
 
         // reset it so we can shutdown properly
-        context.getExecutorServiceManager().setThreadNamePattern("Camel Thread ${counter} - ${name}");
+        context.getExecutorServiceManager().setThreadNamePattern("Camel Thread #counter# - #name#");
     }
 
     public void testDefaultThreadPool() throws Exception {

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java?rev=1232013&r1=1232012&r2=1232013&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java Mon Jan 16 14:56:28 2012
@@ -22,6 +22,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.ThreadPoolRejectedPolicy;
+import org.apache.camel.util.concurrent.ThreadHelper;
 
 /**
  * Unit test to ensure the {@link org.apache.camel.spi.ExecutorServiceStrategy} still
@@ -44,7 +45,7 @@ public class DefaultExecutorServiceStrat
     }
 
     public void testGetThreadNameCustomPattern() throws Exception {
-        context.getExecutorServiceStrategy().setThreadNamePattern("#${counter} - ${name}");
+        context.getExecutorServiceStrategy().setThreadNamePattern("##counter# - #name#");
         String foo = context.getExecutorServiceStrategy().getThreadName("foo");
         String bar = context.getExecutorServiceStrategy().getThreadName("bar");
 
@@ -56,7 +57,7 @@ public class DefaultExecutorServiceStrat
     }
 
     public void testGetThreadNameCustomPatternCamelId() throws Exception {
-        context.getExecutorServiceStrategy().setThreadNamePattern("#${camelId} - #${counter} - ${name}");
+        context.getExecutorServiceStrategy().setThreadNamePattern("##camelId# - ##counter# - #name#");
         String foo = context.getExecutorServiceStrategy().getThreadName("foo");
         String bar = context.getExecutorServiceStrategy().getThreadName("bar");
 
@@ -68,14 +69,14 @@ public class DefaultExecutorServiceStrat
     }
 
     public void testGetThreadNameCustomPatternWithDollar() throws Exception {
-        context.getExecutorServiceStrategy().setThreadNamePattern("Hello - ${name}");
+        context.getExecutorServiceStrategy().setThreadNamePattern("Hello - #name#");
         String foo = context.getExecutorServiceStrategy().getThreadName("foo$bar");
 
         assertEquals("Hello - foo$bar", foo);
     }
 
     public void testGetThreadNameCustomPatternLongName() throws Exception {
-        context.getExecutorServiceStrategy().setThreadNamePattern("#${counter} - ${longName}");
+        context.getExecutorServiceStrategy().setThreadNamePattern("##counter# - #longName#");
         String foo = context.getExecutorServiceStrategy().getThreadName("foo?beer=Carlsberg");
         String bar = context.getExecutorServiceStrategy().getThreadName("bar");
 
@@ -87,7 +88,7 @@ public class DefaultExecutorServiceStrat
     }
 
     public void testGetThreadNameCustomPatternWithParameters() throws Exception {
-        context.getExecutorServiceStrategy().setThreadNamePattern("#${counter} - ${name}");
+        context.getExecutorServiceStrategy().setThreadNamePattern("##counter# - #name#");
         String foo = context.getExecutorServiceStrategy().getThreadName("foo?beer=Carlsberg");
         String bar = context.getExecutorServiceStrategy().getThreadName("bar");
 
@@ -99,7 +100,7 @@ public class DefaultExecutorServiceStrat
     }
 
     public void testGetThreadNameCustomPatternNoCounter() throws Exception {
-        context.getExecutorServiceStrategy().setThreadNamePattern("Cool ${name}");
+        context.getExecutorServiceStrategy().setThreadNamePattern("Cool #name#");
         String foo = context.getExecutorServiceStrategy().getThreadName("foo");
         String bar = context.getExecutorServiceStrategy().getThreadName("bar");
 
@@ -109,16 +110,16 @@ public class DefaultExecutorServiceStrat
     }
 
     public void testGetThreadNameCustomPatternInvalid() throws Exception {
-        context.getExecutorServiceStrategy().setThreadNamePattern("Cool ${xxx}");
+        context.getExecutorServiceStrategy().setThreadNamePattern("Cool #xxx#");
         try {
             context.getExecutorServiceStrategy().getThreadName("foo");
             fail("Should thrown an exception");
         } catch (IllegalArgumentException e) {
-            assertEquals("Pattern is invalid: Cool ${xxx}", e.getMessage());
+            assertEquals("Pattern is invalid: Cool #xxx#", e.getMessage());
         }
 
         // reset it so we can shutdown properly
-        context.getExecutorServiceStrategy().setThreadNamePattern("Camel Thread ${counter} - ${name}");
+        context.getExecutorServiceStrategy().setThreadNamePattern(ThreadHelper.DEFAULT_PATTERN);
     }
 
     public void testDefaultThreadPool() throws Exception {

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelAggregateThreadPoolIssueTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelAggregateThreadPoolIssueTest.java?rev=1232013&r1=1232012&r2=1232013&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelAggregateThreadPoolIssueTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelAggregateThreadPoolIssueTest.java Mon Jan 16 14:56:28 2012
@@ -52,7 +52,7 @@ public class RecipientListParallelAggreg
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                context.getExecutorServiceManager().setThreadNamePattern("${counter}");
+                context.getExecutorServiceManager().setThreadNamePattern("#counter#");
 
                 from("direct:start")
                         .recipientList(header("foo")).parallelProcessing();