You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2013/06/02 18:25:09 UTC

svn commit: r1488736 - /ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java

Author: adrianc
Date: Sun Jun  2 16:25:09 2013
New Revision: 1488736

URL: http://svn.apache.org/r1488736
Log:
JobPoller improvement - make it a ServiceConfigListener so service config file changes can be made at run-time. One <thread-pool> attribute doesn't get updated: "jobs" (the queue size) - which would require creating a new ThreadPoolExecutor instance, and that would require a lot of complicated synchronization code.

Modified:
    ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java

Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java?rev=1488736&r1=1488735&r2=1488736&view=diff
==============================================================================
--- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java (original)
+++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java Sun Jun  2 16:25:09 2013
@@ -38,17 +38,18 @@ import org.ofbiz.base.start.Start;
 import org.ofbiz.base.util.Assert;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.service.config.ServiceConfigUtil;
+import org.ofbiz.service.config.ServiceConfigListener;
+import org.ofbiz.service.config.model.ServiceConfig;
 import org.ofbiz.service.config.model.ThreadPool;
 
 /**
  * Job poller. Queues and runs jobs.
  */
-public final class JobPoller {
+public final class JobPoller implements ServiceConfigListener {
 
     public static final String module = JobPoller.class.getName();
     private static final AtomicInteger created = new AtomicInteger();
     private static final ConcurrentHashMap<String, JobManager> jobManagers = new ConcurrentHashMap<String, JobManager>();
-    // TODO: Put the executor in a cache so Job Poller settings can be changed at run-time.
     private static final ThreadPoolExecutor executor = createThreadPoolExecutor();
     private static final JobPoller instance = new JobPoller();
 
@@ -104,6 +105,7 @@ public final class JobPoller {
         } else {
             jobManagerPollerThread = null;
         }
+        ServiceConfigUtil.registerServiceConfigListener(this);
     }
 
     /**
@@ -139,6 +141,16 @@ public final class JobPoller {
         return poolState;
     }
 
+    @Override
+    public void onServiceConfigChange(ServiceConfig serviceConfig) {
+        if (!executor.isShutdown()) {
+            ThreadPool threadPool = serviceConfig.getServiceEngine(ServiceConfigUtil.engine).getThreadPool();
+            executor.setCorePoolSize(threadPool.getMinThreads());
+            executor.setMaximumPoolSize(threadPool.getMaxThreads());
+            executor.setKeepAliveTime(threadPool.getTtl(), TimeUnit.MILLISECONDS);
+        }
+    }
+
     private boolean pollEnabled() {
         String enabled = ServiceConfigUtil.getElementAttr("thread-pool", "poll-enabled");
         return !"false".equalsIgnoreCase(enabled);