Author: lhein
Date: Thu Jan 13 09:10:12 2011
New Revision: 1058465

URL: http://svn.apache.org/viewvc?rev=1058465&view=rev
Log:
made the executor config have a parent default config which is used if the 
config has undefined values (see SMX4NMR-246)

Modified:
    
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorConfig.java
    
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorFactoryImpl.java
    
servicemix/utils/trunk/src/test/java/org/apache/servicemix/executors/RejectedExecutionTest.java

Modified: 
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorConfig.java
URL: 
http://svn.apache.org/viewvc/servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorConfig.java?rev=1058465&r1=1058464&r2=1058465&view=diff
==============================================================================
--- 
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorConfig.java
 (original)
+++ 
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorConfig.java
 Thu Jan 13 09:10:12 2011
@@ -23,29 +23,69 @@ package org.apache.servicemix.executors.
  */
 public class ExecutorConfig {
 
-    private int corePoolSize = 4;
+    public static final int DEFAULT_CORE_POOL_SIZE = 4;
+    public static final int DEFAULT_MAXIMUM_POOL_SIZE = -1;
+    public static final long DEFAULT_KEEP_ALIVE_TIME = 60000;
+    public static final boolean DEFAULT_THREAD_DAEMON = false;
+    public static final int DEFAULT_THREAD_PRIORITY = Thread.NORM_PRIORITY;
+    public static final int DEFAULT_QUEUE_SIZE = 1024;
+    public static final long DEFAULT_SHUTDOWN_DELAY = 1000;
+    public static final boolean DEFAULT_ALLOW_CORE_THREAD_TIMEOUT = true;
+    public static final boolean DEFAULT_BYPASS_IF_SYNCHRONOUS = false;
 
-    private int maximumPoolSize = -1;
+    private ExecutorConfig parent;
 
-    private long keepAliveTime = 60000;
+    private Integer corePoolSize;
 
-    private boolean threadDaemon;
+    private Integer maximumPoolSize;
 
-    private int threadPriority = Thread.NORM_PRIORITY;
+    private Long keepAliveTime;
 
-    private int queueSize = 1024;
+    private Boolean threadDaemon;
 
-    private long shutdownDelay = 1000;
+    private Integer threadPriority = Thread.NORM_PRIORITY;
 
-    private boolean allowCoreThreadsTimeout = true;
+    private Integer queueSize;
 
-    private boolean bypassIfSynchronous;
+    private Long shutdownDelay;
+
+    private Boolean allowCoreThreadsTimeout;
+
+    private Boolean bypassIfSynchronous;
+
+    /**
+     * default constructor needed by spring beans
+     */
+    public ExecutorConfig() {
+        this(true, null);
+    }
+
+    /**
+     * creates a new executor config using the given parent
+     *
+     * @param parent the parent config
+     */
+    public ExecutorConfig(boolean isDefaultConfig, ExecutorConfig parent) {
+        this.parent = parent;
+        // if this is the default config we don't want undefined values
+        if (isDefaultConfig) {
+            setQueueSize(DEFAULT_QUEUE_SIZE);
+            setShutdownDelay(DEFAULT_SHUTDOWN_DELAY);
+            setThreadDaemon(DEFAULT_THREAD_DAEMON);
+            setThreadPriority(DEFAULT_THREAD_PRIORITY);
+            setAllowCoreThreadsTimeout(DEFAULT_ALLOW_CORE_THREAD_TIMEOUT);
+            setBypassIfSynchronous(DEFAULT_BYPASS_IF_SYNCHRONOUS);
+            setCorePoolSize(DEFAULT_CORE_POOL_SIZE);
+            setKeepAliveTime(DEFAULT_KEEP_ALIVE_TIME);
+            setMaximumPoolSize(DEFAULT_MAXIMUM_POOL_SIZE);
+        }
+    }
 
     /**
      * @return the corePoolSize
      */
     public int getCorePoolSize() {
-        return corePoolSize;
+        return getParent() != null && corePoolSize == null ? 
getParent().getCorePoolSize() : corePoolSize;
     }
 
     /**
@@ -60,7 +100,7 @@ public class ExecutorConfig {
      * @return the keepAlive
      */
     public long getKeepAliveTime() {
-        return keepAliveTime;
+        return getParent() != null && keepAliveTime == null ? 
getParent().getKeepAliveTime() : keepAliveTime;
     }
 
     /**
@@ -75,7 +115,7 @@ public class ExecutorConfig {
      * @return the maximumPoolSize
      */
     public int getMaximumPoolSize() {
-        return maximumPoolSize;
+        return getParent() != null && maximumPoolSize == null ? 
getParent().getMaximumPoolSize() : maximumPoolSize;
     }
 
     /**
@@ -90,7 +130,7 @@ public class ExecutorConfig {
      * @return the queueSize
      */
     public int getQueueSize() {
-        return queueSize;
+        return getParent() != null && queueSize == null ? 
getParent().getQueueSize() : queueSize;
     }
 
     /**
@@ -105,7 +145,7 @@ public class ExecutorConfig {
      * @return the threadDaemon
      */
     public boolean isThreadDaemon() {
-        return threadDaemon;
+        return getParent() != null && threadDaemon == null ? 
getParent().isThreadDaemon() : threadDaemon;
     }
 
     /**
@@ -120,7 +160,7 @@ public class ExecutorConfig {
      * @return the threadPriority
      */
     public int getThreadPriority() {
-        return threadPriority;
+        return getParent() != null && threadPriority == null ? 
getParent().getThreadPriority() : threadPriority;
     }
 
     /**
@@ -135,7 +175,7 @@ public class ExecutorConfig {
      * @return the shutdownDelay
      */
     public long getShutdownDelay() {
-        return shutdownDelay;
+        return getParent() != null && shutdownDelay == null ? 
getParent().getShutdownDelay() : shutdownDelay;
     }
 
     /**
@@ -150,7 +190,7 @@ public class ExecutorConfig {
      * @return the allowCoreThreadsTimeout
      */
     public boolean isAllowCoreThreadsTimeout() {
-        return allowCoreThreadsTimeout;
+        return getParent() != null && allowCoreThreadsTimeout == null ? 
getParent().isAllowCoreThreadsTimeout() : allowCoreThreadsTimeout;
     }
 
     /**
@@ -165,7 +205,7 @@ public class ExecutorConfig {
      * @return if synchronous tasks should bypass the executor
      */
     public boolean isBypassIfSynchronous() {
-        return bypassIfSynchronous;
+        return getParent() != null && bypassIfSynchronous == null ? 
getParent().isBypassIfSynchronous() : bypassIfSynchronous;
     }
 
     /**
@@ -174,4 +214,12 @@ public class ExecutorConfig {
     public void setBypassIfSynchronous(boolean bypassIfSynchronous) {
         this.bypassIfSynchronous = bypassIfSynchronous;
     }
+
+    public ExecutorConfig getParent() {
+        return parent;
+    }
+
+    public void setParent(ExecutorConfig parent) {
+        this.parent = parent;
+    }
 }

Modified: 
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorFactoryImpl.java?rev=1058465&r1=1058464&r2=1058465&view=diff
==============================================================================
--- 
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorFactoryImpl.java
 (original)
+++ 
servicemix/utils/trunk/src/main/java/org/apache/servicemix/executors/impl/ExecutorFactoryImpl.java
 Thu Jan 13 09:10:12 2011
@@ -16,22 +16,15 @@
  */
 package org.apache.servicemix.executors.impl;
 
+import org.apache.servicemix.executors.Executor;
+import org.apache.servicemix.executors.ExecutorFactory;
+
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.RejectedExecutionHandler;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.servicemix.executors.Executor;
-import org.apache.servicemix.executors.ExecutorFactory;
-
 /**
  * Default implementation of the ExecutorFactory.
  * <p/>
@@ -54,7 +47,7 @@ public class ExecutorFactoryImpl impleme
     private static final String OBJECT_NAME_PREFIX = 
"org.apache.servicemix:ContainerName=ServiceMix,Name=Executors,Type=";
     private static final String OBJECT_NAME_POSTFIX = ",SubType=";
 
-    private ExecutorConfig defaultConfig = new ExecutorConfig();
+    private ExecutorConfig defaultConfig = new ExecutorConfig(true, null);
 
     private javax.management.MBeanServer mbeanServer;
     private org.fusesource.commons.management.ManagementStrategy 
managementStrategy;

Modified: 
servicemix/utils/trunk/src/test/java/org/apache/servicemix/executors/RejectedExecutionTest.java
URL: 
http://svn.apache.org/viewvc/servicemix/utils/trunk/src/test/java/org/apache/servicemix/executors/RejectedExecutionTest.java?rev=1058465&r1=1058464&r2=1058465&view=diff
==============================================================================
--- 
servicemix/utils/trunk/src/test/java/org/apache/servicemix/executors/RejectedExecutionTest.java
 (original)
+++ 
servicemix/utils/trunk/src/test/java/org/apache/servicemix/executors/RejectedExecutionTest.java
 Thu Jan 13 09:10:12 2011
@@ -17,15 +17,15 @@
 
 package org.apache.servicemix.executors;
 
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;
-
 import junit.framework.TestCase;
 import org.apache.servicemix.executors.impl.ExecutorConfig;
 import org.apache.servicemix.executors.impl.ExecutorFactoryImpl;
 import org.apache.servicemix.executors.impl.ExecutorImpl;
 import org.apache.servicemix.executors.impl.ManagedExecutor;
 
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;
+
 public class RejectedExecutionTest extends TestCase {
 
     private ExecutorFactoryImpl factory;
@@ -40,7 +40,7 @@ public class RejectedExecutionTest exten
 
     @Override
     protected void setUp() throws Exception {
-        config = new ExecutorConfig();
+        config = new ExecutorConfig(true, null);
         config.setCorePoolSize(1);
         config.setMaximumPoolSize(1);
         config.setQueueSize(2);


Reply via email to