|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.norther.tammi.core.base.Adaptee
org.norther.tammi.core.thread.DefaultScheduler
public class DefaultScheduler
A default implementation of Scheduler.
| Field Summary |
|---|
| Fields inherited from class org.norther.tammi.core.base.Adaptee |
|---|
ADAPTEE_NOTIF_DESCRIPTION, ADAPTEE_NOTIFICATIONS |
| Fields inherited from interface org.norther.tammi.core.base.MBeanDelegate |
|---|
ARRAY_TYPE, OBJECT_TYPE, PRIMITIVE_TYPE, STRING_TYPE |
| Constructor Summary | |
|---|---|
DefaultScheduler()
Constructs a new scheduler. |
|
| Method Summary | |
|---|---|
Future |
executeAfterDelay(Callable command,
long delay)
Excecutes the given callable command after waiting for the given delay. |
Future |
executeAfterDelay(Runnable command,
long delay)
Excecutes the given command after waiting for the given delay. |
Future |
executeAt(Callable command,
Date date)
Executes the given callable command at the given time. |
Future |
executeAt(Runnable command,
Date date)
Executes the given command at the given time. |
Future |
executePeriodically(Runnable command,
Date date,
long period)
Executes the given command every period milliseconds starting at the given time. |
Future |
executePeriodically(Runnable command,
long period,
boolean startNow)
Executes the given command every period milliseconds. |
Future |
executePeriodically(Runnable command,
long delay,
long period)
Executes the given command every period milliseconds after waiting for the given delay. |
protected Executor |
getExecutor()
Gets the referent of the executor MBean. |
ObjectName |
getExecutorName()
Gets the the executor of this scheduler. |
Runnable |
getIdleCommand()
Gets the idle command. |
long |
getIdleDelay()
Gets the idle delay. |
ObjectName |
getThreadFactoryName()
Gets the thread factory of this scheduler. |
protected TimerDaemon |
getTimer()
Gets the implementation of the timer. |
void |
handleNotification(Notification notif,
Object handback)
Handles notifications from the embedded thread factory. |
boolean |
isIdleSupported()
Checks whether idle commands are supported by this timer. |
boolean |
isStarted()
Checks whether the startable has been started. |
void |
postmanaged()
This method is called when the implementing adaptee has been managed either during post-registration of the corresponding adapter MBean or just after it is explicitly added to the adapter MBean during run-time. |
void |
setExecutorName(ObjectName executor)
Sets the executor of this scheduler. |
void |
setIdleCommand(Runnable command)
Sets the idle command. |
void |
setIdleDelay(long delay)
Sets the idle delay. |
void |
setThreadFactoryName(ObjectName factory)
Sets the thread factory of this scheduler. |
void |
start()
Starts (or restarts) a thread to process commands, or wake up an existing thread if one is already running. |
void |
stop()
Cancels all tasks and interrupts the background thread executing the current task, if any. |
void |
unmanaged()
This method is called when the implementing adaptee is unmanaged either during pre-deregistration of the corresponding adapter MBean or just before it is explicitly removed from the adapter MBean during run-time. |
| Methods inherited from class org.norther.tammi.core.base.Adaptee |
|---|
addAdaptee, addNotificationListener, getAttributeSupport, getBroker, getCanonicalName, getDomain, getFactory, getLoader, getLog, getLog, getMBean, getMBeanServer, getNotificationInfo, getObjectName, getRegistrationTime, getSequenceNumber, hasListeners, isRegistered, premanaged, removeNotificationListener, removeNotificationListener, sendNotification, sendNotification, sendNotification, sendNotification, unregister |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public DefaultScheduler()
| Method Detail |
|---|
public void postmanaged()
Manageable
postmanaged in interface Manageablepostmanaged in class Adaptee
public void unmanaged()
throws Exception
Manageable
unmanaged in interface Manageableunmanaged in class AdapteeException - if the adaptee refused to be unmanaged.public ObjectName getThreadFactoryName()
Scheduler
getThreadFactoryName in interface Schedulerpublic void setThreadFactoryName(ObjectName factory)
Scheduler
setThreadFactoryName in interface Schedulerfactory - the name of the factory or a query.public ObjectName getExecutorName()
Scheduler
getExecutorName in interface Schedulerpublic void setExecutorName(ObjectName executor)
Scheduler
setExecutorName in interface Schedulerexecutor - the object name of the executor or a query.
public Future executeAt(Runnable command,
Date date)
ScheduledTimer
executeAt in interface ScheduledTimercommand - the command to run at the given time.date - the absolute time to run the command.
public Future executeAfterDelay(Runnable command,
long delay)
ScheduledTimerSample Usage. You can use a ClockDaemon to arrange timeout callbacks to break out of stuck IO. For example (code sketch):
class X
{
...
ScheduledTimer timer = ...
Thread readerThread;
FileInputStream datafile;
void startReadThread()
{
datafile = new FileInputStream("data", ...);
readerThread = new Thread(new Runnable()
{
public void run()
{
for(;;)
{
// Try to gracefully exit before blocking.
if (Thread.currentThread().isInterrupted())
{
quietlyWrapUpAndReturn();
}
else
{
try
{
int c = datafile.read();
if (c == -1)
{
break;
}
else
{
process(c);
}
}
catch (IOException x)
{
cleanup();
return;
}
}
}
}
};
readerThread.start();
// Establish callback to cancel after 60 seconds.
timer.executeAfterDelay(new Runnable()
{
public void run()
{
readerThread.interrupt(); // try to interrupt thread
datafile.close(); // force thread to lose its input file
}
}, 60000);
}
}
executeAfterDelay in interface ScheduledTimercommand - the command to run after the delay.delay - the delay from now to run the command in msecs.
public Future executePeriodically(Runnable command,
long period,
boolean startNow)
ScheduledTimerperiod milliseconds. If
startNow is true, execution begins immediately, otherwise,
it begins after the first period delay.
Sample Usage . Here is one way to update Swing components acting as progress indicators for long-running actions.
class X
{
JLabel statusLabel = ...;
int percentComplete = 0;
synchronized int getPercentComplete() { return percentComplete; }
synchronized void setPercentComplete(int p) { percentComplete = p; }
ScheduledTimer timer = ...;
void startWorking()
{
Runnable showPct = new Runnable()
{
public void run()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
statusLabel.
setText(getPercentComplete() + "%");
}
}
}
};
final Future updater = timer.executePeriodically(showPct, 500, true);
Runnable action = new Runnable()
{
public void run()
{
for (int i = 0; i < 100; ++i)
{
work();
setPercentComplete(i);
}
updater.cancel();
}
};
new Thread(action).start();
}
}
executePeriodically in interface ScheduledTimercommand - the command to run at each cycle.period - the period, in msecs. Periods are measured from
start-of-task to the next start-of-task. It is generally a bad
idea to use a period that is shorter than the expected task
duration.startNow - true if the cycle should start with execution of the task
now. Otherwise, the cycle starts with a delay of
period milliseconds.
public Future executePeriodically(Runnable command,
Date date,
long period)
ScheduledTimer
executePeriodically in interface ScheduledTimercommand - the runnable to execute.date - the startnig date.period - the period.
public Future executePeriodically(Runnable command,
long delay,
long period)
ScheduledTimer
executePeriodically in interface ScheduledTimercommand - the runnable to execute.delay - the delay in msecs.period - the period.
public Future executeAt(Callable command,
Date date)
ScheduledTimer
executeAt in interface ScheduledTimercommand - the command to run at the given time.date - the absolute time to run the command.
public Future executeAfterDelay(Callable command,
long delay)
ScheduledTimer
executeAfterDelay in interface ScheduledTimercommand - the command to run after the delay.delay - the delay from now to run the command in msecs.
public boolean isIdleSupported()
ScheduledTimer
isIdleSupported in interface ScheduledTimerpublic Runnable getIdleCommand()
ScheduledTimer
getIdleCommand in interface ScheduledTimerpublic void setIdleCommand(Runnable command)
ScheduledTimer
setIdleCommand in interface ScheduledTimercommand - the idle command.public long getIdleDelay()
ScheduledTimer
getIdleDelay in interface ScheduledTimerpublic void setIdleDelay(long delay)
ScheduledTimer
setIdleDelay in interface ScheduledTimerdelay - the idle delay in msecs.public boolean isStarted()
Startable
isStarted in interface Startable
public void start()
throws Exception
ScheduledTimer
start in interface ScheduledTimerstart in interface StartableException - if starts fails.public void stop()
ScheduledTimer
stop in interface ScheduledTimerstop in interface Startable
public void handleNotification(Notification notif,
Object handback)
handleNotification in interface NotificationListenernotif - the notification.handback - not used.protected Executor getExecutor()
IllegalStateException - if not available.protected TimerDaemon getTimer()
NullPointerException - for missing resources.
IllegalStateException - if not registered or started.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||