annotate common/src/main/java/digilib/util/DigilibJobCenter.java @ 1121:efe4b0f18cf8

annotator plugin does regions now.
author robcast
date Thu, 08 Nov 2012 18:42:57 +0100
parents 7779b37d1d05
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
1 /** Wrapper around ExecutionService.
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
2 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
3 */
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 546
diff changeset
4 package digilib.util;
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
5
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
6 import java.util.List;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
7 import java.util.concurrent.BlockingQueue;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
8 import java.util.concurrent.Callable;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
9 import java.util.concurrent.ExecutorService;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
10 import java.util.concurrent.Executors;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
11 import java.util.concurrent.Future;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
12 import java.util.concurrent.ThreadPoolExecutor;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
13
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
14 import org.apache.log4j.Logger;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
15
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
16 /** Wrapper around ExecutionService.
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
17 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
18 * @author casties
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
19 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
20 */
546
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 544
diff changeset
21 public class DigilibJobCenter<V> {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
22 /** general logger for this class */
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
23 private static Logger logger = Logger.getLogger("digilib.jobcenter");
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
24 /** ExecutorService */
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
25 private ExecutorService executor;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
26 /** max number of running threads */
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
27 private int maxThreads = 1;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
28 /** max number of waiting threads */
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
29 private int maxQueueLen = 50;
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 557
diff changeset
30 /** label for this job center */
686086d6e6d6 more refactoring and rearranging
robcast
parents: 557
diff changeset
31 private String label = "";
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
32
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
33 /** Create a DigilibJobcenter with the given number of threads and queue length.
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
34 * If prestart=true it starts the threads in the thread pool.
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
35 *
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
36 * @param maxThreads
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
37 * @param maxQueueLen
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
38 * @param prestart
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
39 * @param label
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
40 */
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 557
diff changeset
41 public DigilibJobCenter(int maxThreads, int maxQueueLen, boolean prestart, String label) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
42 super();
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 557
diff changeset
43 this.label = (label != null) ? label : "";
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
44 this.maxThreads = maxThreads;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
45 this.maxQueueLen = maxQueueLen;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
46 executor = Executors.newFixedThreadPool(maxThreads);
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
47 if (prestart) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
48 // prestart threads so Tomcat's leak protection doesn't complain
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
49 int st = ((ThreadPoolExecutor)executor).prestartAllCoreThreads();
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 557
diff changeset
50 logger.debug(label+" prestarting threads: "+st);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
51 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
52 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
53
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
54 /** Submit Callable job that returns a Value to execute.
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
55 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
56 * @param job
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
57 * @return Future to control the job
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
58 */
546
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 544
diff changeset
59 public Future<V> submit(Callable<V> job) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
60 return executor.submit(job);
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
61 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
62
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
63 /** Submit Runnable job to execute.
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
64 *
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
65 * @param job
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
66 * @return Future to control the job
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
67 */
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
68 public Future<?> submit(Runnable job) {
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
69 return executor.submit(job);
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
70 }
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 570
diff changeset
71
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
72 /** Returns if the service is overloaded.
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
73 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
74 * @return
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
75 */
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
76 public boolean isBusy() {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
77 int jql = getWaitingJobs();
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
78 int jrl = getRunningJobs();
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 557
diff changeset
79 logger.debug(label+" isBusy: waiting jobs="+jql+" running jobs="+jrl);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
80 return (jql > maxQueueLen);
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
81 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
82
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
83 /** Returns the number of currently running jobs.
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
84 * @return
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
85 */
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
86 public int getRunningJobs() {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
87 return ((ThreadPoolExecutor)executor).getActiveCount();
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
88 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
89
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
90 /** Returns the number of currently waiting jobs.
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
91 * @return
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
92 */
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
93 public int getWaitingJobs() {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
94 BlockingQueue<Runnable> jq = ((ThreadPoolExecutor)executor).getQueue();
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
95 int jql = jq.size();
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
96 return jql;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
97 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
98
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
99 public void setMaxThreads(int maxThreads) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
100 this.maxThreads = maxThreads;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
101 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
102
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
103 public int getMaxThreads() {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
104 return maxThreads;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
105 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
106
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
107 public void setMaxQueueLen(int maxQueueLen) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
108 this.maxQueueLen = maxQueueLen;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
109 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
110
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
111 public int getMaxQueueLen() {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
112 return maxQueueLen;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
113 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
114
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
115 /** Shuts down the Executor.
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
116 * Tries to stop running threads and returns a list of waiting threads.
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
117 *
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
118 * @return
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
119 */
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
120 public List<Runnable> shutdownNow() {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
121 return executor.shutdownNow();
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
122 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
123
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents:
diff changeset
124 }