donaldp     2002/11/07 16:48:31

  Modified:    fortress/src/java/org/apache/excalibur/fortress
                        DefaultContainerManager.java
  Log:
  Reworked to use ContainerUtil more gratuitously and to reduce the complexit of the 
code. Remove the validator as it would always pass anyways.
  
  Revision  Changes    Path
  1.30      +70 -117   
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/DefaultContainerManager.java
  
  Index: DefaultContainerManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/DefaultContainerManager.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- DefaultContainerManager.java      7 Nov 2002 06:56:59 -0000       1.29
  +++ DefaultContainerManager.java      8 Nov 2002 00:48:30 -0000       1.30
  @@ -50,24 +50,15 @@
   package org.apache.excalibur.fortress;
   
   import org.apache.avalon.excalibur.logger.LoggerManager;
  -import org.apache.avalon.framework.activity.Disposable;
  -import org.apache.avalon.framework.activity.Initializable;
  -import org.apache.avalon.framework.activity.Startable;
   import org.apache.avalon.framework.component.Composable;
  -import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.context.ContextException;
  -import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.logger.ConsoleLogger;
  -import org.apache.avalon.framework.logger.LogEnabled;
   import org.apache.avalon.framework.logger.Logger;
  -import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.avalon.framework.service.ServiceManager;
  -import org.apache.avalon.framework.service.Serviceable;
  -import org.apache.avalon.framework.container.ContainerUtil;
  -import org.apache.excalibur.fortress.util.ComponentStateValidator;
   import org.apache.excalibur.fortress.util.ContextManager;
   
   /**
  @@ -93,26 +84,27 @@
       private final ContextManager m_contextManager;
       private Logger m_logger;
       private Object m_containerInstance;
  -    private ComponentStateValidator m_validator;
   
  -    public DefaultContainerManager( ContextManager contextManager )
  +    public DefaultContainerManager( final ContextManager contextManager )
       {
           this( contextManager, null );
       }
   
  -    public DefaultContainerManager( ContextManager contextManager, Logger logger )
  +    public DefaultContainerManager( final ContextManager contextManager,
  +                                    final Logger logger )
       {
           m_contextManager = contextManager;
           m_logger = ( logger == null ?
               createLoggerFromContext( m_contextManager.getContainerManagerContext() 
) : logger );
       }
   
  -    public DefaultContainerManager( Context initParameters )
  +    public DefaultContainerManager( final Context initParameters )
       {
           this( initParameters, null );
       }
   
  -    public DefaultContainerManager( Context initParameters, Logger logger )
  +    public DefaultContainerManager( final Context initParameters,
  +                                    final Logger logger )
       {
           this( getInitializedContextManager( initParameters, logger ), logger );
       }
  @@ -122,7 +114,7 @@
        *  This is necessary so that these operations can complete before the
        *  super constructor has been executed.
        */
  -    private static ContextManager getInitializedContextManager( Context 
initParameters,
  +    private static ContextManager getInitializedContextManager( final Context 
initParameters,
                                                                   Logger logger )
       {
           // The context manager will use an internal coonsole logger if logger is 
null.
  @@ -155,7 +147,7 @@
           }
           catch( ContextException ce )
           {
  -            Logger consoleLogger = new ConsoleLogger();
  +            final Logger consoleLogger = new ConsoleLogger();
               consoleLogger.error( "ContainerManager could not obtain logger manager 
from context "
                                    + "(this should not happen). Using console 
instead." );
               return consoleLogger;
  @@ -174,103 +166,75 @@
       {
           if( null == m_containerInstance )
           {
  -            Object instance = null;
  -
  -            try
  -            {
  -                instance = ( (Class)m_contextManager.getContainerManagerContext().
  -                    get( CONTAINER_CLASS ) ).newInstance();
  -            }
  -            catch( Exception e )
  -            {
  -                instance = null;
  +            createContainer();
  +        }
  +    }
   
  -                throw new InitializationException(
  -                    "Cannot set up container. Unable to create container class", e 
);
  -            }
  +    private void createContainer()
  +        throws InitializationException
  +    {
  +        final Context managerContext =
  +            m_contextManager.getContainerManagerContext();
  +        Object instance = null;
  +        try
  +        {
  +            final Class clazz = (Class)managerContext.get( CONTAINER_CLASS );
  +            instance = clazz.newInstance();
  +        }
  +        catch( Exception e )
  +        {
  +            final String message =
  +                "Cannot set up container. Unable to create container class";
  +            throw new InitializationException( message, e );
  +        }
   
  -            m_validator = new ComponentStateValidator( instance );
  +        try
  +        {
  +            ContainerUtil.enableLogging( instance, m_logger );
  +            ContainerUtil.contextualize( instance, managerContext );
   
  -            try
  +            if( instance instanceof Composable )
               {
  -                if( instance instanceof LogEnabled )
  -                {
  -                    m_validator.checkLogEnabled();
  -                    ContainerUtil.enableLogging( instance, m_logger );
  -                }
  -
  -                final Context managerContext =
  -                    m_contextManager.getContainerManagerContext();
  -                if( instance instanceof Contextualizable )
  -                {
  -                    m_validator.checkContextualized();
  -                    ContainerUtil.contextualize( instance, managerContext );
  -                }
  -
  -                if( instance instanceof Composable )
  -                {
  -                    throw new InitializationException( "Composable containers are 
not supported" );
  -                }
  -
  -                if( instance instanceof Serviceable )
  -                {
  -                    m_validator.checkServiced();
  -                    final ServiceManager smanager = getServiceManager( 
managerContext );
  -                    ContainerUtil.service( instance, smanager );
  -                }
  -
  -                if( instance instanceof Configurable )
  -                {
  -                    m_validator.checkConfigured();
  -                    final Configuration config =
  -                        (Configuration)managerContext.get( CONFIGURATION );
  -                    ContainerUtil.configure( instance, config );
  -                }
  +                throw new InitializationException( "Composable containers are not 
supported" );
  +            }
   
  -                if( instance instanceof Parameterizable )
  -                {
  -                    m_validator.checkParameterized();
  -                    final Parameters parameters = (Parameters) managerContext.get( 
PARAMETERS );
  -                    ContainerUtil.parameterize( instance, parameters );
  +            final ServiceManager smanager =
  +                (ServiceManager)getContextEntry( managerContext, SERVICE_MANAGER );
  +            ContainerUtil.service( instance, smanager );
   
  -                }
  +            final Configuration config =
  +                (Configuration)getContextEntry( managerContext, CONFIGURATION );
  +            ContainerUtil.configure( instance, config );
   
  -                if( instance instanceof Initializable )
  -                {
  -                    m_validator.checkInitialized();
  -                    ContainerUtil.initialize( instance );
  -                }
  -
  -                if( instance instanceof Startable )
  -                {
  -                    m_validator.checkStarted();
  -                    ContainerUtil.start( instance );
  -                }
  -            }
  -            catch( Exception e )
  -            {
  -                instance = null;
  +            final Parameters parameters =
  +                (Parameters)getContextEntry( managerContext, PARAMETERS );
  +            ContainerUtil.parameterize( instance, parameters );
   
  -                final String message =
  -                    "Cannot set up container. Startup lifecycle failure";
  -                throw new InitializationException( message, e );
  -            }
  +            ContainerUtil.initialize( instance );
  +            ContainerUtil.start( instance );
   
               m_containerInstance = instance;
           }
  +        catch( Exception e )
  +        {
  +            final String message =
  +                "Cannot set up container. Startup lifecycle failure";
  +            throw new InitializationException( message, e );
  +        }
       }
   
       /**
  -     * Helper method to get an SM out of the given context, if existing
  +     * Retrieve an entry from context if it exists, else return null.
        *
  -     * @param context a <code>Context</code> instance
  -     * @return a <code>ServiceManager</code> instance or null if none
  +     * @param context the context
  +     * @param key the key
  +     * @return the entry
        */
  -    private ServiceManager getServiceManager( Context context )
  +    private Object getContextEntry( final Context context, final String key )
       {
           try
           {
  -            return (ServiceManager)context.get( SERVICE_MANAGER );
  +            return context.get( key );
           }
           catch( ContextException e )
           {
  @@ -282,30 +246,20 @@
       {
           if( null != m_containerInstance )
           {
  -            if( m_containerInstance instanceof Startable )
  +            try
               {
  -                try
  -                {
  -                    m_validator.checkStopped();
  -                    ( (Startable)m_containerInstance ).stop();
  -                }
  -                catch( Exception e )
  -                {
  -                    if( getLogger().isWarnEnabled() )
  -                    {
  -                        getLogger().warn( "Caught an exception when stopping the 
Container, "
  -                                          + "continuing with shutdown", e );
  -                    }
  -                }
  +                ContainerUtil.stop( m_containerInstance );
               }
  -
  -            if( m_containerInstance instanceof Disposable )
  +            catch( Exception e )
               {
  -                m_validator.checkDisposed();
  -                ( (Disposable)m_containerInstance ).dispose();
  +                if( getLogger().isWarnEnabled() )
  +                {
  +                    getLogger().warn( "Caught an exception when stopping the 
Container, "
  +                                      + "continuing with shutdown", e );
  +                }
               }
   
  -            m_validator = null;
  +            ContainerUtil.dispose( m_containerInstance );
               m_containerInstance = null;
           }
       }
  @@ -332,5 +286,4 @@
       {
           return m_logger;
       }
  -}
  -
  +}
  \ No newline at end of file
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>

Reply via email to