You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by bl...@apache.org on 2002/01/29 20:11:17 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system AbstractContainer.java

bloritsch    02/01/29 11:11:17

  Modified:    src/scratchpad/org/apache/avalon/excalibur/system
                        AbstractContainer.java
  Log:
  added some error trapping on init and dispose code
  
  Revision  Changes    Path
  1.3       +59 -16    jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/AbstractContainer.java
  
  Index: AbstractContainer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/AbstractContainer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractContainer.java	29 Jan 2002 16:18:53 -0000	1.2
  +++ AbstractContainer.java	29 Jan 2002 19:11:17 -0000	1.3
  @@ -13,6 +13,7 @@
   import org.apache.avalon.framework.context.*;
   import org.apache.avalon.framework.logger.*;
   
  +import org.apache.avalon.excalibur.collections.FixedSizeBuffer;
   import org.apache.avalon.excalibur.command.*;
   import org.apache.avalon.excalibur.system.handler.*;
   import org.apache.avalon.excalibur.logger.LoggerManager;
  @@ -33,12 +34,19 @@
    * Manager can expose that to the instantiating class.
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  - * @version CVS $Revision: 1.2 $ $Date: 2002/01/29 16:18:53 $
  + * @version CVS $Revision: 1.3 $ $Date: 2002/01/29 19:11:17 $
    */
   public abstract class AbstractContainer
      extends AbstractLogEnabled
      implements Contextualizable, Composable, Configurable, Initializable, Disposable
   {
  +    private final static Class[] HANDLER_CONSTRUCTOR = new Class[] {
  +        Class.class,
  +        Configuration.class,
  +        ComponentManager.class,
  +        Context.class
  +    };
  +
       private final ComponentStateValidator  m_validator = new ComponentStateValidator( this );
   
       private Context                m_context;
  @@ -137,13 +145,41 @@
           m_validator.checkInitialized();
   
           Iterator i = m_components.iterator();
  +        FixedSizeBuffer buffer = new FixedSizeBuffer( m_components.size() );
   
           while ( i.hasNext() )
           {
  -            m_commandQueue.enqueue(
  -                new InitComponentHandlerCommand( (ComponentHandler) i.next(),
  -                                                 getLogger() )
  -            );
  +            try
  +            {
  +                if ( null != m_commandQueue )
  +                {
  +                    m_commandQueue.enqueue(
  +                        new InitComponentHandlerCommand( (ComponentHandler) i.next(),
  +                                                         getLogger() )
  +                    );
  +                }
  +                else
  +                {
  +                    ( (ComponentHandler) i.next() ).initialize();
  +                }
  +            }
  +            catch ( Exception e )
  +            {
  +                getLogger().warn( "Could not initialize component", e );
  +                buffer.add( e );
  +            }
  +        }
  +
  +        if ( buffer.size() > 0 )
  +        {
  +            StringBuffer message = new StringBuffer();
  +
  +            while ( ! buffer.isEmpty() )
  +            {
  +                message.append( ( (Exception) buffer.remove() ).getMessage() );
  +            }
  +
  +            throw new Exception( message.toString() );
           }
       }
   
  @@ -158,21 +194,28 @@
   
           while ( i.hasNext() )
           {
  -            try
  +            if ( null != m_commandQueue )
               {
  -                m_commandQueue.enqueue(
  -                    new DisposeComponentHandlerCommand( (ComponentHandler) i.next(),
  -                                                        getLogger() )
  -                );
  +                try
  +                {
  +                    m_commandQueue.enqueue(
  +                        new DisposeComponentHandlerCommand( (ComponentHandler) i.next(),
  +                                                            getLogger() )
  +                    );
   
  -                i.remove();
  -            }
  -            catch ( Exception e )
  -            {
  -                if ( getLogger().isWarnEnabled() )
  +                    i.remove();
  +                }
  +                catch ( Exception e )
                   {
  -                    getLogger().warn( "Could not dispose component", e );
  +                    if ( getLogger().isWarnEnabled() )
  +                    {
  +                        getLogger().warn( "Could not dispose component", e );
  +                    }
                   }
  +            }
  +            else
  +            {
  +                ( (ComponentHandler) i.next() ).dispose();
               }
           }
       }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>