Mercurial > hg > digilib-old
annotate servlet/src/digilib/util/DigilibJobCenter.java @ 557:0885f5ca5b24 digilibPDF
more refactoring and rearranging
pdf and image generation works now
author | robcast |
---|---|
date | Thu, 16 Dec 2010 21:19:11 +0100 |
parents | servlet/src/digilib/servlet/DigilibJobCenter.java@e7c29b587829 |
children | 686086d6e6d6 |
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 | 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 import digilib.image.DocuImage; |
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 /** Wrapper around ExecutionService. |
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 * @author casties |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
21 * |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
22 */ |
546 | 23 public class DigilibJobCenter<V> { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
24 /** general logger for this class */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
25 private static Logger logger = Logger.getLogger("digilib.jobcenter"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
26 /** ExecutorService */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
27 private ExecutorService executor; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
28 /** max number of running threads */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
29 private int maxThreads = 1; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
30 /** max number of waiting threads */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
31 private int maxQueueLen = 50; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
32 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
33 /** |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
34 * @param maxThreads |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
35 * @param maxQueueLength |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
36 */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
37 public DigilibJobCenter(int maxThreads, int maxQueueLen, boolean prestart) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
38 super(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
39 this.maxThreads = maxThreads; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
40 this.maxQueueLen = maxQueueLen; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
41 executor = Executors.newFixedThreadPool(maxThreads); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
42 if (prestart) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
43 // prestart threads so Tomcat's leak protection doesn't complain |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
44 int st = ((ThreadPoolExecutor)executor).prestartAllCoreThreads(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
45 logger.debug("prestarting threads: "+st); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
46 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
47 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
48 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
49 /** Submit job to execute |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
50 * |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
51 * @param job |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
52 * @return Future to control the job |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
53 */ |
546 | 54 public Future<V> submit(Callable<V> job) { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
55 return executor.submit(job); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
56 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
57 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
58 /** Returns if the service is not overloaded. |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
59 * |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
60 * @return |
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 public boolean canRun() { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
63 int jql = getWaitingJobs(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
64 int jrl = getRunningJobs(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
65 logger.debug("canRun: waiting jobs="+jql+" running jobs="+jrl); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
66 return (jql <= maxQueueLen); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
67 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
68 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
69 /** Returns if the service is overloaded. |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
70 * |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
71 * @return |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
72 */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
73 public boolean isBusy() { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
74 int jql = getWaitingJobs(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
75 int jrl = getRunningJobs(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
76 logger.debug("isBusy: waiting jobs="+jql+" running jobs="+jrl); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
77 return (jql > maxQueueLen); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
78 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
79 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
80 public int getRunningJobs() { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
81 return ((ThreadPoolExecutor)executor).getActiveCount(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
82 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
83 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
84 public int getWaitingJobs() { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
85 BlockingQueue<Runnable> jq = ((ThreadPoolExecutor)executor).getQueue(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
86 int jql = jq.size(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
87 return jql; |
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 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
90 public void setMaxThreads(int maxThreads) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
91 this.maxThreads = maxThreads; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
92 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
93 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
94 public int getMaxThreads() { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
95 return maxThreads; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
96 } |
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 public void setMaxQueueLen(int maxQueueLen) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
99 this.maxQueueLen = maxQueueLen; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
100 } |
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 public int getMaxQueueLen() { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
103 return maxQueueLen; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
104 } |
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 public List<Runnable> shutdownNow() { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
107 return executor.shutdownNow(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
diff
changeset
|
108 } |
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 } |