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 2010/03/09 11:54:29 UTC

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

Author: davsclaus
Date: Tue Mar  9 10:54:29 2010
New Revision: 920791

URL: http://svn.apache.org/viewvc?rev=920791&view=rev
Log:
CAMEL-1588: thread name can be set using a pattern like syntax. Camel now logs at INFO level if stream cache, tracer etc. is enabled.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.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/ExecutorServiceHelper.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=920791&r1=920790&r2=920791&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Tue Mar  9 10:54:29 2010
@@ -1101,22 +1101,20 @@ public class DefaultCamelContext extends
         if (isStreamCaching()) {
             // only add a new stream cache if not already configured
             if (StreamCaching.getStreamCaching(this) == null) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("StreamCaching is enabled");
-                }
+                LOG.info("StreamCaching is enabled on CamelContext" + getName());
                 addInterceptStrategy(new StreamCaching());
             }
         }
 
         if (isTracing()) {
             // tracing is added in the DefaultChannel so we can enable it on the fly
-            LOG.debug("Tracing is enabled");
+            LOG.info("Tracing is enabled on CamelContext" + getName());
         }
 
         if (isHandleFault()) {
             // only add a new handle fault if not already configured
             if (HandleFault.getHandleFault(this) == null) {
-                LOG.debug("HandleFault is enabled");
+                LOG.info("HandleFault is enabled on CamelContext" + getName());
                 addInterceptStrategy(new HandleFault());
             }
         }
@@ -1125,7 +1123,7 @@ public class DefaultCamelContext extends
             // only add a new delayer if not already configured
             if (Delayer.getDelayer(this) == null) {
                 long millis = getDelayer();
-                LOG.debug("Delayer is enabled with: " + millis + " ms.");
+                LOG.info("Delayer is enabled with: " + millis + " ms. on CamelContext" + getName());
                 addInterceptStrategy(new Delayer(millis));
             }
         }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java?rev=920791&r1=920790&r2=920791&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceStrategy.java Tue Mar  9 10:54:29 2010
@@ -31,41 +31,50 @@ import org.apache.camel.util.concurrent.
 public class DefaultExecutorServiceStrategy implements ExecutorServiceStrategy {
 
     private final CamelContext camelContext;
+    private String threadNamePattern = "Camel Thread ${counter} - ${name}";
 
     public DefaultExecutorServiceStrategy(CamelContext camelContext) {
         this.camelContext = camelContext;
     }
 
-    public String getThreadName(String nameSuffix) {
-        return ExecutorServiceHelper.getThreadName(nameSuffix);
+    public String getThreadName(String name) {
+        return ExecutorServiceHelper.getThreadName(threadNamePattern, name);
+    }
+
+    public String getThreadNamePattern() {
+        return threadNamePattern;
+    }
+
+    public void setThreadNamePattern(String threadNamePattern) {
+        this.threadNamePattern = threadNamePattern;
     }
 
     public ExecutorService lookup(String executorServiceRef) {
         return camelContext.getRegistry().lookup(executorServiceRef, ExecutorService.class);
     }
 
-    public ExecutorService newCachedThreadPool(String nameSuffix) {
-        return ExecutorServiceHelper.newCachedThreadPool(nameSuffix, true);
+    public ExecutorService newCachedThreadPool(String name) {
+        return ExecutorServiceHelper.newCachedThreadPool(getThreadName(name), true);
     }
 
-    public ScheduledExecutorService newScheduledThreadPool(String nameSuffix, int poolSize) {
-        return ExecutorServiceHelper.newScheduledThreadPool(poolSize, nameSuffix, true);
+    public ScheduledExecutorService newScheduledThreadPool(String name, int poolSize) {
+        return ExecutorServiceHelper.newScheduledThreadPool(poolSize, getThreadName(name), true);
     }
 
-    public ExecutorService newFixedThreadPool(String nameSuffix, int poolSize) {
-        return ExecutorServiceHelper.newFixedThreadPool(poolSize, nameSuffix, true);
+    public ExecutorService newFixedThreadPool(String name, int poolSize) {
+        return ExecutorServiceHelper.newFixedThreadPool(poolSize, getThreadName(name), true);
     }
 
-    public ExecutorService newSingleThreadExecutor(String nameSuffix) {
-        return ExecutorServiceHelper.newSingleThreadExecutor(nameSuffix, true);
+    public ExecutorService newSingleThreadExecutor(String name) {
+        return ExecutorServiceHelper.newSingleThreadExecutor(getThreadName(name), true);
     }
 
-    public ExecutorService newThreadPool(String nameSuffix, int corePoolSize, int maxPoolSize) {
-        return ExecutorServiceHelper.newThreadPool(nameSuffix, corePoolSize, maxPoolSize);
+    public ExecutorService newThreadPool(String name, int corePoolSize, int maxPoolSize) {
+        return ExecutorServiceHelper.newThreadPool(getThreadName(name), corePoolSize, maxPoolSize);
     }
 
-    public ExecutorService newThreadPool(String nameSuffix, int corePoolSize, int maxPoolSize, long keepAliveTime, TimeUnit timeUnit, boolean daemon) {
-        return ExecutorServiceHelper.newThreadPool(nameSuffix, corePoolSize, maxPoolSize, keepAliveTime, timeUnit, daemon);
+    public ExecutorService newThreadPool(String name, int corePoolSize, int maxPoolSize, long keepAliveTime, TimeUnit timeUnit, boolean daemon) {
+        return ExecutorServiceHelper.newThreadPool(getThreadName(name), corePoolSize, maxPoolSize, keepAliveTime, timeUnit, daemon);
     }
 
     public void shutdown(ExecutorService executorService) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java?rev=920791&r1=920790&r2=920791&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java Tue Mar  9 10:54:29 2010
@@ -99,7 +99,7 @@ public class ResequencerEngine<E> {
     }
 
     public void start() {
-        timer = new Timer(ExecutorServiceHelper.getThreadName("Stream Resequencer Timer"), true);
+        timer = new Timer(ExecutorServiceHelper.getThreadName("Camel Thread ${counter} - ${suffix}", "Stream Resequencer Timer"), true);
     }
 
     /**

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=920791&r1=920790&r2=920791&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 Tue Mar  9 10:54:29 2010
@@ -39,10 +39,30 @@ public interface ExecutorServiceStrategy
     /**
      * Creates a full thread name
      *
-     * @param nameSuffix  suffix which is appended to the thread name
+     * @param name  name which is appended to the full thread name
      * @return the full thread name
      */
-    String getThreadName(String nameSuffix);
+    String getThreadName(String name);
+
+    /**
+     * Gets the thread name pattern used for creating the full thread name.
+     *
+     * @return the pattern
+     */
+    String getThreadNamePattern();
+
+    /**
+     * Sets the thread name pattern used for creating the full thread name.
+     * <p/>
+     * The default pattern is: <tt>Camel Thread ${counter} - ${suffix}</tt>
+     * </br>
+     * Where <tt>${counter}</tt> is a unique incrementing counter.
+     * And <tt>${name}</tt> is the thread name.
+     *
+     * @param pattern  the pattern
+     * @throws IllegalArgumentException if the pattern is invalid.
+     */
+    void setThreadNamePattern(String pattern) throws IllegalArgumentException;
 
     /**
      * Lookup a {@link java.util.concurrent.ExecutorService} from the {@link org.apache.camel.spi.Registry}.
@@ -55,53 +75,53 @@ public interface ExecutorServiceStrategy
     /**
      * Creates a new cached thread pool.
      *
-     * @param nameSuffix  suffix which is appended to the thread name
+     * @param name  name which is appended to the thread name
      * @return the thread pool
      */
-    ExecutorService newCachedThreadPool(String nameSuffix);
+    ExecutorService newCachedThreadPool(String name);
 
     /**
      * Creates a new scheduled thread pool.
      *
-     * @param nameSuffix  suffix which is appended to the thread name
+     * @param name        name which is appended to the thread name
      * @param poolSize    the core pool size
      * @return the thread pool
      */
-    ScheduledExecutorService newScheduledThreadPool(String nameSuffix, int poolSize);
+    ScheduledExecutorService newScheduledThreadPool(String name, int poolSize);
 
     /**
      * Creates a new fixed thread pool.
      *
-     * @param nameSuffix  suffix which is appended to the thread name
+     * @param name        name which is appended to the thread name
      * @param poolSize    the core pool size
      * @return the thread pool
      */
-    ExecutorService newFixedThreadPool(String nameSuffix, int poolSize);
+    ExecutorService newFixedThreadPool(String name, int poolSize);
 
     /**
      * Creates a new single-threaded thread pool. This is often used for background threads.
      *
-     * @param nameSuffix  suffix which is appended to the thread name
+     * @param name  name which is appended to the thread name
      * @return the thread pool
      */
-    ExecutorService newSingleThreadExecutor(String nameSuffix);
+    ExecutorService newSingleThreadExecutor(String name);
 
     /**
      * Creates a new custom thread pool.
      * <p/>
      * Will by default use 60 seconds for keep alive time for idle threads.
      *
-     * @param nameSuffix    suffix which is appended to the thread name
+     * @param name          name which is appended to the thread name
      * @param corePoolSize  the core pool size
      * @param maxPoolSize   the maximum pool size
      * @return the thread pool
      */
-    ExecutorService newThreadPool(String nameSuffix, int corePoolSize, int maxPoolSize);
+    ExecutorService newThreadPool(String name, int corePoolSize, int maxPoolSize);
 
     /**
      * Creates a new custom thread pool.
      *
-     * @param nameSuffix    suffix which is appended to the thread name
+     * @param name          name which is appended to the thread name
      * @param corePoolSize  the core pool size
      * @param maxPoolSize   the maximum pool size
      * @param keepAliveTime keep alive time for idle threads
@@ -109,7 +129,7 @@ public interface ExecutorServiceStrategy
      * @param daemon        whether or not the created threads is daemon or not
      * @return the thread pool
      */
-    ExecutorService newThreadPool(final String nameSuffix, int corePoolSize, int maxPoolSize,
+    ExecutorService newThreadPool(final String name, int corePoolSize, int maxPoolSize,
                                   long keepAliveTime, TimeUnit timeUnit, boolean daemon);
 
     /**

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java?rev=920791&r1=920790&r2=920791&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/concurrent/ExecutorServiceHelper.java Tue Mar  9 10:54:29 2010
@@ -40,18 +40,25 @@ public final class ExecutorServiceHelper
     private ExecutorServiceHelper() {
     }
 
+    private static synchronized int nextThreadCounter() {
+        return threadCounter.getAndIncrement();
+    }
+
     /**
      * Creates a new thread name with the given prefix
      *
-     * @param name the prefix
+     * @param pattern the pattern
+     * @param name the name
      * @return the thread name, which is unique
      */
-    public static String getThreadName(String name) {
-        return "Camel thread " + nextThreadCounter() + ": " + name;
-    }
+    public static String getThreadName(String pattern, String name) {
+        String answer = pattern.replaceFirst("\\$\\{counter\\}", ""  + nextThreadCounter());
+        answer = answer.replaceFirst("\\$\\{name\\}", name);
+        if (answer.indexOf("$") > -1 || answer.indexOf("${") > -1 || answer.indexOf("}") > -1) {
+            throw new IllegalArgumentException("Pattern is invalid: " + pattern);
+        }
 
-    protected static synchronized int nextThreadCounter() {
-        return threadCounter.getAndIncrement();
+        return answer;
     }
 
     /**
@@ -65,7 +72,7 @@ public final class ExecutorServiceHelper
     public static ScheduledExecutorService newScheduledThreadPool(final int poolSize, final String name, final boolean daemon) {
         return Executors.newScheduledThreadPool(poolSize, new ThreadFactory() {
             public Thread newThread(Runnable r) {
-                Thread answer = new Thread(r, getThreadName(name));
+                Thread answer = new Thread(r, name);
                 answer.setDaemon(daemon);
                 return answer;
             }
@@ -75,7 +82,7 @@ public final class ExecutorServiceHelper
     public static ExecutorService newFixedThreadPool(final int poolSize, final String name, final boolean daemon) {
         return Executors.newFixedThreadPool(poolSize, new ThreadFactory() {
             public Thread newThread(Runnable r) {
-                Thread answer = new Thread(r, getThreadName(name));
+                Thread answer = new Thread(r, name);
                 answer.setDaemon(daemon);
                 return answer;
             }
@@ -85,7 +92,7 @@ public final class ExecutorServiceHelper
     public static ExecutorService newSingleThreadExecutor(final String name, final boolean daemon) {
         return Executors.newSingleThreadExecutor(new ThreadFactory() {
             public Thread newThread(Runnable r) {
-                Thread answer = new Thread(r, getThreadName(name));
+                Thread answer = new Thread(r, name);
                 answer.setDaemon(daemon);
                 return answer;
             }
@@ -95,14 +102,14 @@ public final class ExecutorServiceHelper
     /**
      * Creates a new cached thread pool which should be the most commonly used.
      *
-     * @param name    part of the thread name
+     * @param name    the full thread name
      * @param daemon  whether the threads is daemon or not
      * @return the created pool
      */
     public static ExecutorService newCachedThreadPool(final String name, final boolean daemon) {
         return Executors.newCachedThreadPool(new ThreadFactory() {
             public Thread newThread(Runnable r) {
-                Thread answer = new Thread(r, getThreadName(name));
+                Thread answer = new Thread(r, name);
                 answer.setDaemon(daemon);
                 return answer;
             }
@@ -112,7 +119,7 @@ public final class ExecutorServiceHelper
     /**
      * Creates a new custom thread pool using 60 seconds as keep alive
      *
-     * @param name          part of the thread name
+     * @param name          the full thread name
      * @param corePoolSize  the core size
      * @param maxPoolSize   the maximum pool size
      * @return the created pool
@@ -124,7 +131,7 @@ public final class ExecutorServiceHelper
     /**
      * Creates a new custom thread pool
      *
-     * @param name          part of the thread name
+     * @param name          the full thread name
      * @param corePoolSize  the core size
      * @param maxPoolSize   the maximum pool size
      * @param keepAliveTime keep alive
@@ -145,7 +152,7 @@ public final class ExecutorServiceHelper
                                                            keepAliveTime, timeUnit, new LinkedBlockingQueue<Runnable>());
         answer.setThreadFactory(new ThreadFactory() {
             public Thread newThread(Runnable r) {
-                Thread answer = new Thread(r, getThreadName(name));
+                Thread answer = new Thread(r, name);
                 answer.setDaemon(daemon);
                 return answer;
             }

Added: 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=920791&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java Tue Mar  9 10:54:29 2010
@@ -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.impl;
+
+import org.apache.camel.ContextTestSupport;
+
+/**
+ * @version $Revision$
+ */
+public class DefaultExecutorServiceStrategyTest extends ContextTestSupport {
+
+    public void testGetThreadName() throws Exception {
+        String foo = context.getExecutorServiceStrategy().getThreadName("foo");
+        String bar = context.getExecutorServiceStrategy().getThreadName("bar");
+
+        assertNotSame(foo, bar);
+        assertTrue(foo.startsWith("Camel Thread "));
+        assertTrue(foo.endsWith("foo"));
+        assertTrue(bar.startsWith("Camel Thread "));
+        assertTrue(bar.endsWith("bar"));
+    }
+
+    public void testGetThreadNameCustomPattern() throws Exception {
+        context.getExecutorServiceStrategy().setThreadNamePattern("#${counter} - ${name}");
+        String foo = context.getExecutorServiceStrategy().getThreadName("foo");
+        String bar = context.getExecutorServiceStrategy().getThreadName("bar");
+
+        assertNotSame(foo, bar);
+        assertTrue(foo.startsWith("#"));
+        assertTrue(foo.endsWith(" - foo"));
+        assertTrue(bar.startsWith("#"));
+        assertTrue(bar.endsWith(" - bar"));
+    }
+
+    public void testGetThreadNameCustomPatternNoCounter() throws Exception {
+        context.getExecutorServiceStrategy().setThreadNamePattern("Cool ${name}");
+        String foo = context.getExecutorServiceStrategy().getThreadName("foo");
+        String bar = context.getExecutorServiceStrategy().getThreadName("bar");
+
+        assertNotSame(foo, bar);
+        assertEquals("Cool foo", foo);
+        assertEquals("Cool bar", bar);
+    }
+
+    public void testGetThreadNameCustomPatternInvalid() throws Exception {
+        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());
+        }
+
+        // reset it so we can shutdown properly
+        context.getExecutorServiceStrategy().setThreadNamePattern("Camel Thread ${counter} - ${name}");
+    }
+}

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceStrategyTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date