donaldp 01/04/13 22:54:27
Modified: src/java/org/apache/cornerstone/blocks/scheduler
DefaultTimeScheduler.java
Log:
Made sure block no longer relies on Runnable lifecycle stage.
Revision Changes Path
1.4 +45 -33
jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/scheduler/DefaultTimeScheduler.java
Index: DefaultTimeScheduler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/scheduler/DefaultTimeScheduler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultTimeScheduler.java 2001/03/19 06:19:34 1.3
+++ DefaultTimeScheduler.java 2001/04/14 05:54:27 1.4
@@ -12,15 +12,17 @@
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.Disposable;
import org.apache.avalon.Initializable;
-import org.apache.phoenix.Block;
-import org.apache.cornerstone.services.scheduler.TimeScheduler;
-import org.apache.cornerstone.services.scheduler.TimeTrigger;
-import org.apache.cornerstone.services.scheduler.Target;
+import org.apache.avalon.Startable;
+import org.apache.avalon.Stoppable;
import org.apache.avalon.util.BinaryHeap;
import org.apache.avalon.util.PriorityQueue;
import org.apache.avalon.util.SynchronizedPriorityQueue;
import org.apache.avalon.util.thread.ThreadContext;
+import org.apache.cornerstone.services.scheduler.Target;
+import org.apache.cornerstone.services.scheduler.TimeScheduler;
+import org.apache.cornerstone.services.scheduler.TimeTrigger;
import org.apache.log.Logger;
+import org.apache.phoenix.Block;
/**
* Default implementation of TimeScheduler service.
@@ -30,14 +32,14 @@
*/
public class DefaultTimeScheduler
extends AbstractLoggable
- implements Block, TimeScheduler, Initializable, Disposable, Runnable
+ implements Block, TimeScheduler, Initializable, Startable, Stoppable,
Disposable, Runnable
{
protected final Object m_monitor = new Object();
protected boolean m_running;
protected Hashtable m_entries;
protected PriorityQueue m_priorityQueue;
-
+
public void init()
{
m_entries = new Hashtable();
@@ -46,8 +48,6 @@
public void dispose()
{
- m_running = false;
- synchronized( m_monitor ) { m_monitor.notify(); }
m_entries = null;
m_priorityQueue = null;
}
@@ -60,8 +60,8 @@
* @param trigger the trigger
* @param target the target
*/
- public void addTrigger( final String name,
- final TimeTrigger trigger,
+ public void addTrigger( final String name,
+ final TimeTrigger trigger,
final Target target )
{
try { removeTrigger( name ); }
@@ -87,9 +87,9 @@
throws NoSuchElementException
{
//use the kill-o-matic against any entry with same name
- final TimeScheduledEntry entry = getEntry( name );
- entry.invalidate();
- m_entries.remove( name );
+ final TimeScheduledEntry entry = getEntry( name );
+ entry.invalidate();
+ m_entries.remove( name );
}
/**
@@ -104,11 +104,11 @@
final TimeScheduledEntry entry = getEntry( name );
entry.getTimeTrigger().reset();
rescheduleEntry( entry, true );
- }
+ }
/**
* Reschedule an entry.
- * if clone is true then invalidate old version and create a new entry to
+ * if clone is true then invalidate old version and create a new entry to
* insert into queue.
*
* @param timeEntry the entry
@@ -122,7 +122,7 @@
if( clone )
{
entry = new TimeScheduledEntry( timeEntry.getName(),
- timeEntry.getTimeTrigger(),
+ timeEntry.getTimeTrigger(),
timeEntry.getTarget() );
timeEntry.invalidate();
@@ -158,8 +158,8 @@
throws NoSuchElementException
{
//use the kill-o-matic against any entry with same name
- final TimeScheduledEntry entry = (TimeScheduledEntry)m_entries.get( name );
- if( null != entry )
+ final TimeScheduledEntry entry = (TimeScheduledEntry)m_entries.get( name );
+ if( null != entry )
{
return entry;
}
@@ -173,17 +173,17 @@
{
final Logger logger = getLogger();
final Runnable runnable = new Runnable()
- {
- public void run()
{
- try { entry.getTarget().targetTriggered( entry.getName() ); }
- catch( final Throwable t )
+ public void run()
{
- logger.warn( "Error occured executin trigger " +
entry.getName(), t );
+ try { entry.getTarget().targetTriggered( entry.getName() ); }
+ catch( final Throwable t )
+ {
+ logger.warn( "Error occured executin trigger " +
entry.getName(), t );
+ }
}
- }
- };
-
+ };
+
//this should suck threads from a named pool
try { ThreadContext.getCurrentThreadPool().execute( runnable ); }
catch( final Exception e )
@@ -192,6 +192,19 @@
}
}
+ public void start()
+ throws Exception
+ {
+ //this should suck threads from a named pool
+ ThreadContext.getCurrentThreadPool().execute( this );
+ }
+
+ public void stop()
+ {
+ m_running = false;
+ synchronized( m_monitor ) { m_monitor.notify(); }
+ }
+
public void run()
{
m_running = true;
@@ -202,16 +215,16 @@
if( !m_priorityQueue.isEmpty() )
{
- TimeScheduledEntry entry =
+ TimeScheduledEntry entry =
(TimeScheduledEntry)m_priorityQueue.peek();
//if job has been invalidated then remove it and continue
- while( !entry.isValid() )
+ while( !entry.isValid() )
{
m_priorityQueue.pop();
if ( m_priorityQueue.isEmpty() ) break;
-
+
entry = (TimeScheduledEntry)m_priorityQueue.peek();
}
@@ -224,7 +237,7 @@
{
//give a short duration that will sleep
// so that next loop will definetly be below 0.
- //Can not act on zero else multiple runs could go through
+ //Can not act on zero else multiple runs could go through
//at once
duration = 1;
}
@@ -241,12 +254,11 @@
}
}
- //wait/sleep until m_monitor is signalled which occurs when
- //next jobs is likely to occur or when a new job gets added to
+ //wait/sleep until m_monitor is signalled which occurs when
+ //next jobs is likely to occur or when a new job gets added to
//top of heap
try { synchronized( m_monitor ) { m_monitor.wait( duration ); } }
catch( final InterruptedException ie ) { }
-
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]