You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2011/05/25 17:12:17 UTC

svn commit: r1127550 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/TaskRunnerFactory.java

Author: gtully
Date: Wed May 25 15:12:17 2011
New Revision: 1127550

URL: http://svn.apache.org/viewvc?rev=1127550&view=rev
Log:
https://issues.apache.org/jira/browse/AMQ-3335 - Allow TaskRunnerFactory to be configured on the broker via xml config

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/TaskRunnerFactory.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/TaskRunnerFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/TaskRunnerFactory.java?rev=1127550&r1=1127549&r2=1127550&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/TaskRunnerFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/TaskRunnerFactory.java Wed May 25 15:12:17 2011
@@ -22,6 +22,7 @@ import java.util.concurrent.SynchronousQ
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 
 /**
@@ -30,8 +31,8 @@ import java.util.concurrent.atomic.Atomi
  * processing for them to become idle. The manager ensures that each task is
  * processes but that no one task overtakes the system. This is kinda like
  * cooperative multitasking.
- * 
- * 
+ *
+ * @org.apache.xbean.XBean
  */
 public class TaskRunnerFactory implements Executor {
 
@@ -41,6 +42,8 @@ public class TaskRunnerFactory implement
     private int priority;
     private boolean daemon;
     private AtomicLong id = new AtomicLong(0);
+    private boolean dedicatedTaskRunner;
+    private AtomicBoolean initDone = new AtomicBoolean(false);
 
     public TaskRunnerFactory() {
         this("ActiveMQ Task", Thread.NORM_PRIORITY, true, 1000);
@@ -50,22 +53,23 @@ public class TaskRunnerFactory implement
     	this(name,priority,daemon,maxIterationsPerRun,false);
     }
 
-
     public TaskRunnerFactory(String name, int priority, boolean daemon, int maxIterationsPerRun, boolean dedicatedTaskRunner) {
-
         this.name = name;
         this.priority = priority;
         this.daemon = daemon;
         this.maxIterationsPerRun = maxIterationsPerRun;
+        this.dedicatedTaskRunner = dedicatedTaskRunner;
+    }
 
-        // If your OS/JVM combination has a good thread model, you may want to
-        // avoid
-        // using a thread pool to run tasks and use a DedicatedTaskRunner
-        // instead.
-        if (dedicatedTaskRunner || "true".equalsIgnoreCase(System.getProperty("org.apache.activemq.UseDedicatedTaskRunner"))) {
-            executor = null;
-        } else {
-            executor = createDefaultExecutor();
+    public void init() {
+        if (initDone.compareAndSet(false, true)) {
+            // If your OS/JVM combination has a good thread model, you may want to
+            // avoid using a thread pool to run tasks and use a DedicatedTaskRunner instead.
+            if (dedicatedTaskRunner || "true".equalsIgnoreCase(System.getProperty("org.apache.activemq.UseDedicatedTaskRunner"))) {
+                executor = null;
+            } else if (executor == null) {
+                executor = createDefaultExecutor();
+            }
         }
     }
 
@@ -73,9 +77,11 @@ public class TaskRunnerFactory implement
         if (executor != null) {
             executor.shutdownNow();
         }
+        initDone.set(false);
     }
 
     public TaskRunner createTaskRunner(Task task, String name) {
+        init();
         if (executor != null) {
             return new PooledTaskRunner(executor, task, maxIterationsPerRun);
         } else {
@@ -88,6 +94,7 @@ public class TaskRunnerFactory implement
     }
     
     public void execute(Runnable runnable, String name) {
+        init();
         if (executor != null) {
             executor.execute(runnable);
         } else {
@@ -108,4 +115,51 @@ public class TaskRunnerFactory implement
         return rc;
     }
 
+    public ExecutorService getExecutor() {
+        return executor;
+    }
+
+    public void setExecutor(ExecutorService executor) {
+        this.executor = executor;
+    }
+
+    public int getMaxIterationsPerRun() {
+        return maxIterationsPerRun;
+    }
+
+    public void setMaxIterationsPerRun(int maxIterationsPerRun) {
+        this.maxIterationsPerRun = maxIterationsPerRun;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getPriority() {
+        return priority;
+    }
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    public boolean isDaemon() {
+        return daemon;
+    }
+
+    public void setDaemon(boolean daemon) {
+        this.daemon = daemon;
+    }
+
+    public boolean isDedicatedTaskRunner() {
+        return dedicatedTaskRunner;
+    }
+
+    public void setDedicatedTaskRunner(boolean dedicatedTaskRunner) {
+        this.dedicatedTaskRunner = dedicatedTaskRunner;
+    }
 }