Author: davsclaus Date: Thu Jan 19 05:46:03 2012 New Revision: 1233187 URL: http://svn.apache.org/viewvc?rev=1233187&view=rev Log: CAMEL-4904: Fixed get thread name to support names with $ signs and other chars.
Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java?rev=1233187&r1=1233186&r2=1233187&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java Thu Jan 19 05:46:03 2012 @@ -29,6 +29,8 @@ import java.util.concurrent.ThreadFactor import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.camel.model.ExecutorServiceAwareDefinition; import org.apache.camel.spi.ExecutorServiceStrategy; @@ -52,6 +54,7 @@ import org.slf4j.LoggerFactory; public final class ExecutorServiceHelper { public static final String DEFAULT_PATTERN = "Camel Thread ${counter} - ${name}"; + private static final Pattern INVALID_PATTERN = Pattern.compile(".*\\$\\{\\w+\\}.*"); private static final Logger LOG = LoggerFactory.getLogger(ExecutorServiceHelper.class); private static AtomicLong threadCounter = new AtomicLong(); @@ -74,24 +77,21 @@ public final class ExecutorServiceHelper 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 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); + 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) { - throw new IllegalArgumentException("Pattern is invalid: " + pattern); - } - if (answer.indexOf("CAMEL_REPLACE_ME") > -1) { - answer = answer.replaceAll("CAMEL_REPLACE_ME", "\\$"); + // 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); } return answer; Modified: camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java?rev=1233187&r1=1233186&r2=1233187&view=diff ============================================================================== --- camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java (original) +++ camel/branches/camel-2.8.x/camel-core/src/test/java/org/apache/camel/util/concurrent/ExecutorServiceHelperTest.java Thu Jan 19 05:46:03 2012 @@ -34,6 +34,13 @@ public class ExecutorServiceHelperTest e assertTrue(name.endsWith("foo")); } + public void testGetThreadNameWithDollar() { + String name = ExecutorServiceHelper.getThreadName("Camel Thread ${counter} - ${name}", "foo$bar"); + + assertTrue(name.startsWith("Camel Thread")); + assertTrue(name.endsWith("foo$bar")); + } + public void testNewScheduledThreadPool() { ScheduledExecutorService pool = ExecutorServiceHelper.newScheduledThreadPool(1, "MyPool ${name}", "foo", true); assertNotNull(pool);