org.apache.aries.blueprint.utils.threading
Class ScheduledExecutorServiceWrapper

java.lang.Object
  extended by org.apache.aries.blueprint.utils.threading.ScheduledExecutorServiceWrapper
All Implemented Interfaces:
Executor, ExecutorService, ScheduledExecutorService, org.apache.aries.util.tracker.SingleServiceTracker.SingleServiceListener

public class ScheduledExecutorServiceWrapper
extends Object
implements ScheduledExecutorService, org.apache.aries.util.tracker.SingleServiceTracker.SingleServiceListener

This class looks like a ScheduledExecutorService to the outside world. Internally it uses either a scheduled thread pool with a core size of 3, or it picks one up from the service registry. If it picks one up from the service registry then it shuts the internal one down. This doesn't fully meet the spec for a SchedueledExecutorService. It does not properly implement shutdownNow, but this isn't used by blueprint so for now that should be fine.

It also wraps the Runnables and Callables so when a task is canceled we quickly clean up memory rather than waiting for the target to get to the task and purge it.


Nested Class Summary
static interface ScheduledExecutorServiceWrapper.ScheduledExecutorServiceFactory
           
 
Constructor Summary
ScheduledExecutorServiceWrapper(org.osgi.framework.BundleContext context, String name, ScheduledExecutorServiceWrapper.ScheduledExecutorServiceFactory sesf)
           
 
Method Summary
 boolean awaitTermination(long timeout, TimeUnit unit)
           
 void execute(Runnable command)
           
<T> List<Future<T>>
invokeAll(Collection<? extends Callable<T>> tasks)
           
<T> List<Future<T>>
invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
           
<T> T
invokeAny(Collection<? extends Callable<T>> tasks)
           
<T> T
invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
           
 boolean isShutdown()
           
 boolean isTerminated()
           
<V> ScheduledFuture<V>
schedule(Callable<V> callable, long delay, TimeUnit unit)
           
 ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
           
 ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
           
 ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
           
 void serviceFound()
           
 void serviceLost()
           
 void serviceReplaced()
           
 void shutdown()
           
 List<Runnable> shutdownNow()
           
<T> Future<T>
submit(Callable<T> task)
           
 Future<?> submit(Runnable task)
           
<T> Future<T>
submit(Runnable task, T result)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ScheduledExecutorServiceWrapper

public ScheduledExecutorServiceWrapper(org.osgi.framework.BundleContext context,
                                       String name,
                                       ScheduledExecutorServiceWrapper.ScheduledExecutorServiceFactory sesf)
Method Detail

awaitTermination

public boolean awaitTermination(long timeout,
                                TimeUnit unit)
                         throws InterruptedException
Specified by:
awaitTermination in interface ExecutorService
Throws:
InterruptedException

invokeAll

public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
                          throws InterruptedException
Specified by:
invokeAll in interface ExecutorService
Throws:
InterruptedException

invokeAll

public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                     long timeout,
                                     TimeUnit unit)
                          throws InterruptedException
Specified by:
invokeAll in interface ExecutorService
Throws:
InterruptedException

invokeAny

public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
            throws InterruptedException,
                   ExecutionException
Specified by:
invokeAny in interface ExecutorService
Throws:
InterruptedException
ExecutionException

invokeAny

public <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                       long timeout,
                       TimeUnit unit)
            throws InterruptedException,
                   ExecutionException,
                   TimeoutException
Specified by:
invokeAny in interface ExecutorService
Throws:
InterruptedException
ExecutionException
TimeoutException

isShutdown

public boolean isShutdown()
Specified by:
isShutdown in interface ExecutorService

isTerminated

public boolean isTerminated()
Specified by:
isTerminated in interface ExecutorService

shutdown

public void shutdown()
Specified by:
shutdown in interface ExecutorService

shutdownNow

public List<Runnable> shutdownNow()
Specified by:
shutdownNow in interface ExecutorService

submit

public <T> Future<T> submit(Callable<T> task)
Specified by:
submit in interface ExecutorService

submit

public Future<?> submit(Runnable task)
Specified by:
submit in interface ExecutorService

submit

public <T> Future<T> submit(Runnable task,
                            T result)
Specified by:
submit in interface ExecutorService

execute

public void execute(Runnable command)
Specified by:
execute in interface Executor

schedule

public ScheduledFuture<?> schedule(Runnable command,
                                   long delay,
                                   TimeUnit unit)
Specified by:
schedule in interface ScheduledExecutorService

schedule

public <V> ScheduledFuture<V> schedule(Callable<V> callable,
                                       long delay,
                                       TimeUnit unit)
Specified by:
schedule in interface ScheduledExecutorService

scheduleAtFixedRate

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                              long initialDelay,
                                              long period,
                                              TimeUnit unit)
Specified by:
scheduleAtFixedRate in interface ScheduledExecutorService

scheduleWithFixedDelay

public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                 long initialDelay,
                                                 long delay,
                                                 TimeUnit unit)
Specified by:
scheduleWithFixedDelay in interface ScheduledExecutorService

serviceFound

public void serviceFound()
Specified by:
serviceFound in interface org.apache.aries.util.tracker.SingleServiceTracker.SingleServiceListener

serviceLost

public void serviceLost()
Specified by:
serviceLost in interface org.apache.aries.util.tracker.SingleServiceTracker.SingleServiceListener

serviceReplaced

public void serviceReplaced()
Specified by:
serviceReplaced in interface org.apache.aries.util.tracker.SingleServiceTracker.SingleServiceListener


Copyright © 2009-2011 The Apache Software Foundation. All Rights Reserved.