org.almendra.janet.cas.schedulers
Class Arbitrator

java.lang.Object
  extended by org.almendra.commons.threads.ActiveObject
      extended by org.almendra.commons.threads.ActiveSchedulingObject
          extended by org.almendra.janet.cas.schedulers.AbstractScheduler
              extended by org.almendra.janet.cas.schedulers.Arbitrator
All Implemented Interfaces:
java.lang.Runnable, INamedObject, ISimpleActiveObject, ILoggable

public class Arbitrator
extends AbstractScheduler
implements ILoggable

Author:
Oliver Plohmann

Field Summary
static java.lang.String ARBITRATOR_NAME
           
protected  ArbitratedScheduler currentScheduler
           
protected  boolean isEnabled
           
static java.lang.String LOG_EVENT_CHANGING_ACTIVE_SCHEDULER
           
static java.lang.String LOGGER_OBJECT_NAME
           
protected  Node node
           
protected  EDU.oswego.cs.dl.util.concurrent.ReentrantLock producerConsumerLock
           
protected  SchedulerAnchor scheduler
           
protected  java.util.List sleepingSchedulers
           
protected  int timeSliceInMillis
           
protected  java.util.List waitingSchedulers
           
 
Fields inherited from class org.almendra.janet.cas.schedulers.AbstractScheduler
LOG_EVENT_RESUMING_SCHEDULER, LOG_EVENT_STARTED_SCHEDULER, LOG_EVENT_STOPPED_SCHEDULER, LOG_EVENT_SUSPENDING_SCHEDULER, logger
 
Fields inherited from class org.almendra.commons.threads.ActiveSchedulingObject
available, executing, queue
 
Fields inherited from class org.almendra.commons.threads.ActiveObject
activeLock, isActive, name, priority, thread, verbose, waiting
 
Constructor Summary
protected Arbitrator()
           
  Arbitrator(SchedulerAnchor scheduler, Logger logger, int priority)
           
 
Method Summary
protected  void commandAddedTo(ArbitratedScheduler arbitratedScheduler)
           
 void created(ArbitratedScheduler arbitratedScheduler)
           
protected  void execute(IExecutable executable)
          Called to process the next item from the queue.
protected  IExecutable getNext()
          Return the next item of the queue to be processed.
protected  void init()
           
 boolean isDaemon()
          Implement in subclass whether thread the active object will run in when started is a daemon thread or not.
 boolean isIdle()
           
 void isIdle(ArbitratedScheduler arbitratedScheduler)
           
protected  void logChangedActiveScheduler(CommandScheduler previouslyActiveScheduler, CommandScheduler currentlyActiveScheduler)
           
 java.util.List registeredLogEvents()
          Return list of events that may occur for an object.
 void removeScheduler(ApplicationScheduler appScheduler)
           
protected  void setLogger(Logger logger)
           
protected  void setScheduled(ArbitratedScheduler arbitratedScheduler)
           
protected  void setSleeping(ArbitratedScheduler arbitratedScheduler)
           
 void setTimeSliceInMillis(int i)
           
protected  void setWaiting(ApplicationScheduler appScheduler)
           
protected  void setWaitingSchedulerScheduled(java.util.List arbitratedSchedulers)
           
protected  void sleep(ArbitratedScheduler arbitratedScheduler)
           
protected  void start(ArbitratedScheduler arbitratedScheduler)
           
 void start(boolean isEnabled)
           
 void stop()
          Stop the active object.
 
Methods inherited from class org.almendra.janet.cas.schedulers.AbstractScheduler
getDefaultLogEntry, getLogger, log, messageResuming, messageStarting, messageStopping, messageSuspending
 
Methods inherited from class org.almendra.commons.threads.ActiveSchedulingObject
add, available, doActivity, executableAdded, executableRemoved, executePrimary, finishedExecution, getNextPrim, getQueueSize, hasNext, remove, resuming, startingExecution, suspending
 
Methods inherited from class org.almendra.commons.threads.ActiveObject
getName, getPriority, isActive, isVerbose, run, setActive, setName, setPriority, setVerbose, start
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ARBITRATOR_NAME

public static final java.lang.String ARBITRATOR_NAME
See Also:
Constant Field Values

LOG_EVENT_CHANGING_ACTIVE_SCHEDULER

public static final java.lang.String LOG_EVENT_CHANGING_ACTIVE_SCHEDULER
See Also:
Constant Field Values

LOGGER_OBJECT_NAME

public static final java.lang.String LOGGER_OBJECT_NAME
See Also:
Constant Field Values

currentScheduler

protected ArbitratedScheduler currentScheduler

timeSliceInMillis

protected volatile int timeSliceInMillis

node

protected Node node

scheduler

protected SchedulerAnchor scheduler

sleepingSchedulers

protected java.util.List sleepingSchedulers

waitingSchedulers

protected java.util.List waitingSchedulers

producerConsumerLock

protected EDU.oswego.cs.dl.util.concurrent.ReentrantLock producerConsumerLock

isEnabled

protected volatile boolean isEnabled
Constructor Detail

Arbitrator

protected Arbitrator()

Arbitrator

public Arbitrator(SchedulerAnchor scheduler,
                  Logger logger,
                  int priority)
Method Detail

getNext

protected IExecutable getNext()
Description copied from class: ActiveSchedulingObject
Return the next item of the queue to be processed. Blocks if queue is empty.

Overrides:
getNext in class ActiveSchedulingObject
Returns:
returns next item in queue or null but only if the active object was stopped

setSleeping

protected void setSleeping(ArbitratedScheduler arbitratedScheduler)

setWaiting

protected void setWaiting(ApplicationScheduler appScheduler)

setTimeSliceInMillis

public void setTimeSliceInMillis(int i)
Parameters:
i -

commandAddedTo

protected void commandAddedTo(ArbitratedScheduler arbitratedScheduler)

setScheduled

protected void setScheduled(ArbitratedScheduler arbitratedScheduler)

setWaitingSchedulerScheduled

protected void setWaitingSchedulerScheduled(java.util.List arbitratedSchedulers)

execute

protected void execute(IExecutable executable)
Description copied from class: ActiveSchedulingObject
Called to process the next item from the queue. Must be implemented in subclasses as appropriate.

Specified by:
execute in class ActiveSchedulingObject

start

protected void start(ArbitratedScheduler arbitratedScheduler)

sleep

protected void sleep(ArbitratedScheduler arbitratedScheduler)

logChangedActiveScheduler

protected void logChangedActiveScheduler(CommandScheduler previouslyActiveScheduler,
                                         CommandScheduler currentlyActiveScheduler)
Parameters:
schedulerAnchor -

stop

public void stop()
Description copied from class: ActiveObject
Stop the active object. Ignored if never started or already stopped.

Specified by:
stop in interface ISimpleActiveObject
Overrides:
stop in class ActiveObject

isDaemon

public boolean isDaemon()
Description copied from class: ActiveObject
Implement in subclass whether thread the active object will run in when started is a daemon thread or not. A daemon thread only lives to server user threads.

Overrides:
isDaemon in class AbstractScheduler
Returns:

registeredLogEvents

public java.util.List registeredLogEvents()
Description copied from interface: ILoggable
Return list of events that may occur for an object.

Specified by:
registeredLogEvents in interface ILoggable
Overrides:
registeredLogEvents in class AbstractScheduler
Returns:

init

protected void init()

created

public void created(ArbitratedScheduler arbitratedScheduler)
Parameters:
appScheduler -

removeScheduler

public void removeScheduler(ApplicationScheduler appScheduler)
Parameters:
appScheduler -

isIdle

public boolean isIdle()
Overrides:
isIdle in class ActiveSchedulingObject

isIdle

public void isIdle(ArbitratedScheduler arbitratedScheduler)
Parameters:
appScheduler -

setLogger

protected void setLogger(Logger logger)
Overrides:
setLogger in class AbstractScheduler

start

public void start(boolean isEnabled)
Parameters:
b -