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]

Reply via email to