1 33 34 package com.icesoft.faces.async.render; 35 36 import edu.emory.mathcs.backport.java.util.concurrent.ScheduledThreadPoolExecutor; 37 import edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor; 38 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit; 39 import org.apache.commons.logging.Log; 40 import org.apache.commons.logging.LogFactory; 41 42 61 public class RenderHub { 62 63 private static Log log = LogFactory.getLog(RenderHub.class); 64 65 69 private ThreadPoolExecutor renderService; 70 private int corePoolSize = 10; 71 private int maxPoolSize = 15; 72 private long keepAliveTime = 300000; 73 private int renderQueueCapacity = 1000; 74 75 82 private ScheduledThreadPoolExecutor scheduledService; 83 private int schedulePoolSize = 5; 84 85 89 private RejectionHandler rejectionHandler; 90 91 94 private RenderThreadFactory threadFactory; 95 96 101 public RenderHub() { 102 rejectionHandler = new RejectionHandler(); 103 threadFactory = new RenderThreadFactory(); 104 } 105 106 111 public int getCorePoolSize() { 112 return corePoolSize; 113 } 114 115 125 public void setCorePoolSize(int corePoolSize) { 126 this.corePoolSize = corePoolSize; 127 } 128 129 134 public int getMaxPoolSize() { 135 return maxPoolSize; 136 } 137 138 148 public void setMaxPoolSize(int maxPoolSize) { 149 this.maxPoolSize = maxPoolSize; 150 } 151 152 159 public long getKeepAliveTime() { 160 return keepAliveTime; 161 } 162 163 170 public void setKeepAliveTime(long keepAliveTime) { 171 this.keepAliveTime = keepAliveTime; 172 } 173 174 179 public int getRenderQueueCapacity() { 180 return renderQueueCapacity; 181 } 182 183 public void setRenderQueueCapacity(int renderQueueCapacity) { 184 this.renderQueueCapacity = renderQueueCapacity; 185 } 186 187 196 public void requestRender(Renderable renderable) { 197 if (renderService == null) { 198 createCoreService(); 199 } 200 renderService.execute(new RunnableRender(renderable)); 201 } 202 203 207 private synchronized void createCoreService() { 208 209 SingleEntryQueue queue = new SingleEntryQueue(renderQueueCapacity); 210 211 renderService = new ThreadPoolExecutor(corePoolSize, 212 maxPoolSize, 213 keepAliveTime, 214 TimeUnit.MILLISECONDS, 215 queue, 216 threadFactory, 217 rejectionHandler 218 ); 219 220 if (log.isInfoEnabled()) { 221 log.info("core render service created:" + 222 "\n core pool size : " + corePoolSize + 223 "\n max pool size : " + maxPoolSize + 224 "\n keep alive time: " + keepAliveTime); 225 } 226 } 227 228 239 public ScheduledThreadPoolExecutor getScheduledService() { 240 if (scheduledService == null) { 241 createScheduledService(); 242 } 243 return scheduledService; 244 } 245 246 protected synchronized void createScheduledService() { 247 248 scheduledService = new ScheduledThreadPoolExecutor(corePoolSize, 249 threadFactory, 250 rejectionHandler 251 ); 252 if (log.isInfoEnabled()) { 253 log.info("scheduled render service created:" + 254 "\n core pool size : " + schedulePoolSize); 255 } 256 } 257 258 263 public int getSchedulePoolSize() { 264 return schedulePoolSize; 265 } 266 267 275 public void setSchedulePoolSize(int schedulePoolSize) { 276 this.schedulePoolSize = schedulePoolSize; 277 } 278 279 283 public void dispose() { 284 if (renderService != null) { 285 renderService.shutdown(); 286 renderService = null; 287 } 288 289 if (scheduledService != null) { 290 scheduledService.shutdown(); 291 scheduledService = null; 292 } 293 } 294 } 295 | Popular Tags |