avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From blorit...@apache.org
Subject cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system ContainerManager.java
Date Tue, 05 Feb 2002 22:19:06 GMT
bloritsch    02/02/05 14:19:06

  Modified:    src/scratchpad/org/apache/avalon/excalibur/command
                        TPCThreadManager.java
               src/scratchpad/org/apache/avalon/excalibur/system
                        ContainerManager.java
  Log:
  provide hook for shutdown or disposal of system
  
  Revision  Changes    Path
  1.5       +19 -7     jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/command/TPCThreadManager.java
  
  Index: TPCThreadManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/command/TPCThreadManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TPCThreadManager.java	5 Feb 2002 18:11:51 -0000	1.4
  +++ TPCThreadManager.java	5 Feb 2002 22:19:06 -0000	1.5
  @@ -7,6 +7,7 @@
    */
   package org.apache.avalon.excalibur.command;
   
  +import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.avalon.framework.logger.NullLogger;
   import org.apache.avalon.excalibur.concurrent.Mutex;
  @@ -27,14 +28,14 @@
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
    */
  -public final class TPCThreadManager implements Runnable, ThreadManager
  +public final class TPCThreadManager implements Runnable, ThreadManager, Disposable
   {
  -    private final ThreadPool m_threadPool;
  -    private final Mutex   m_mutex = new Mutex();
  -    private final HashMap m_pipelines = new HashMap();
  -    private ThreadControl m_threadControl;
  -    private       boolean m_done = false;
  -    private final long    m_sleepTime;
  +    private final ThreadPool    m_threadPool;
  +    private final Mutex         m_mutex = new Mutex();
  +    private final HashMap       m_pipelines = new HashMap();
  +    private       ThreadControl m_threadControl;
  +    private       boolean       m_done = false;
  +    private final long          m_sleepTime;
   
       /**
        * The default constructor assumes there is a system property named "os.arch.cpus"
  @@ -167,6 +168,17 @@
           {
               m_mutex.release();
           }
  +    }
  +
  +    public final void dispose()
  +    {
  +        deregisterAll();
  +        if ( m_threadPool instanceof Disposable )
  +        {
  +            ( (Disposable) m_threadPool ).dispose();
  +        }
  +
  +        m_threadControl = null;
       }
   
       public void run()
  
  
  
  1.20      +129 -73   jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/ContainerManager.java
  
  Index: ContainerManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/ContainerManager.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- ContainerManager.java	5 Feb 2002 20:38:17 -0000	1.19
  +++ ContainerManager.java	5 Feb 2002 22:19:06 -0000	1.20
  @@ -116,9 +116,9 @@
    * </table>
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  - * @version CVS $Revision: 1.19 $ $Date: 2002/02/05 20:38:17 $
  + * @version CVS $Revision: 1.20 $ $Date: 2002/02/05 22:19:06 $
    */
  -public class ContainerManager
  +public class ContainerManager implements Disposable
   {
       public static final String CONTEXT_DIRECTORY = Container.CONTEXT_DIRECTORY;
       public static final String WORK_DIRECTORY    = Container.WORK_DIRECTORY;
  @@ -141,7 +141,7 @@
   
       private final DefaultConfigurationBuilder    m_configBuilder =
                                                        new DefaultConfigurationBuilder();
  -    private final DefaultConfigurationSerializer m_configSerialzer =
  +    private final DefaultConfigurationSerializer m_configSerializer =
                                                        new DefaultConfigurationSerializer();
   
       private final Parameters              m_initialParameters;
  @@ -257,12 +257,87 @@
           return m_componentManager;
       }
   
  -    /**
  -     * Override this if you have any special needs for the container (such as
  -     * wanting to use your own class).
  -     */
  -    protected void recycleContainer()
  -        throws InitializationException
  +    protected void initializeContainer()
  +    {
  +        if ( null == m_containerInstance )
  +        {
  +            Container instance = null;
  +            try
  +            {
  +                instance = (Container) m_contextClassLoader
  +                        .loadClass( m_initialParameters.getParameter( CONTAINER_CLASS )
)
  +                        .newInstance();
  +            }
  +            catch ( Exception e )
  +            {
  +                instance = null;
  +                if ( getLogger().isFatalErrorEnabled() )
  +                {
  +                    getLogger().fatalError( "Cannot set up the Container, this is an error
I cannot recover from.", e );
  +                }
  +                return;
  +            }
  +
  +            m_validator = new ComponentStateValidator( instance );
  +
  +            try
  +            {
  +                if ( instance instanceof LogEnabled )
  +                {
  +                    m_validator.checkLogEnabled();
  +                    ( (LogEnabled) instance ).enableLogging( getLogger() );
  +                }
  +
  +                if ( instance instanceof Contextualizable )
  +                {
  +                    m_validator.checkContextualized();
  +                    ( (Contextualizable) instance ).contextualize( getContext() );
  +                }
  +
  +                if ( instance instanceof Composable )
  +                {
  +                    m_validator.checkComposed();
  +                    ( (Composable) instance ).compose( getComponentManager() );
  +                }
  +
  +                if ( instance instanceof Configurable )
  +                {
  +                    m_validator.checkConfigured();
  +                    ( (Configurable) instance ).configure( getContainerConfig() );
  +                }
  +
  +                if ( instance instanceof Parameterizable )
  +                {
  +                    m_validator.checkParameterized();
  +                    ( (Parameterizable) instance ).parameterize( Parameters.fromConfiguration(
getContainerConfig() ) );
  +                }
  +
  +                if ( instance instanceof Initializable )
  +                {
  +                    m_validator.checkInitialized();
  +                    ( (Initializable) instance ).initialize();
  +                }
  +
  +                if ( instance instanceof Startable )
  +                {
  +                    m_validator.checkStarted();
  +                    ( (Startable) instance ).start();
  +                }
  +            }
  +            catch ( Exception e )
  +            {
  +                instance = null;
  +                if ( getLogger().isFatalErrorEnabled() )
  +                {
  +                    getLogger().fatalError( "Cannot set up the Container, this is an error
I cannot recover from.", e );
  +                }
  +            }
  +
  +            m_containerInstance = instance;
  +        }
  +    }
  +
  +    protected void disposeContainer()
       {
           if ( null != m_containerInstance )
           {
  @@ -270,6 +345,7 @@
               {
                   try
                   {
  +                    m_validator.checkStopped();
                       ( (Startable) m_containerInstance ).stop();
                   }
                   catch (Exception e)
  @@ -283,76 +359,24 @@
   
               if ( m_containerInstance instanceof Disposable )
               {
  +                m_validator.checkDisposed();
                   ( (Disposable) m_containerInstance ).dispose();
               }
   
  +            m_validator = null;
               m_containerInstance = null;
           }
  +    }
   
  -        Container instance = null;
  -        try
  -        {
  -            instance = (Container) m_contextClassLoader
  -                    .loadClass( m_initialParameters.getParameter( CONTAINER_CLASS ) )
  -                    .newInstance();
  -        }
  -        catch ( Exception e )
  -        {
  -            instance = null;
  -            if ( getLogger().isFatalErrorEnabled() )
  -            {
  -                getLogger().fatalError( "Cannot set up the Container, this is an error
I cannot recover from.", e );
  -            }
  -            return;
  -        }
  -
  -        try
  -        {
  -            if ( instance instanceof LogEnabled )
  -            {
  -                ( (LogEnabled) instance ).enableLogging( getLogger() );
  -            }
  -
  -            if ( instance instanceof Contextualizable )
  -            {
  -                ( (Contextualizable) instance ).contextualize( getContext() );
  -            }
  -
  -            if ( instance instanceof Composable )
  -            {
  -                ( (Composable) instance ).compose( getComponentManager() );
  -            }
  -
  -            if ( instance instanceof Configurable )
  -            {
  -                ( (Configurable) instance ).configure( getContainerConfig() );
  -            }
  -
  -            if ( instance instanceof Parameterizable )
  -            {
  -                ( (Parameterizable) instance ).parameterize( Parameters.fromConfiguration(
getContainerConfig() ) );
  -            }
  -
  -            if ( instance instanceof Initializable )
  -            {
  -                ( (Initializable) instance ).initialize();
  -            }
  -
  -            if ( instance instanceof Startable )
  -            {
  -                ( (Startable) instance ).start();
  -            }
  -        }
  -        catch ( Exception e )
  -        {
  -            instance = null;
  -            if ( getLogger().isFatalErrorEnabled() )
  -            {
  -                getLogger().fatalError( "Cannot set up the Container, this is an error
I cannot recover from.", e );
  -            }
  -        }
  -
  -        m_containerInstance = instance;
  +    /**
  +     * Override this if you have any special needs for the container (such as
  +     * wanting to use your own class).
  +     */
  +    private final void recycleContainer()
  +        throws InitializationException
  +    {
  +        disposeContainer();
  +        initializeContainer();
       }
   
       /**
  @@ -579,5 +603,37 @@
           }
   
           return m_logKitConfig;
  +    }
  +
  +    public void dispose()
  +    {
  +        disposeContainer();
  +
  +        if ( m_threadManager instanceof Disposable )
  +        {
  +            ( (Disposable) m_threadManager ).dispose();
  +        }
  +
  +        if ( m_logManager instanceof Disposable )
  +        {
  +            ( (Disposable) m_logManager ).dispose();
  +        }
  +
  +        if ( m_roleManager instanceof Disposable )
  +        {
  +            ( (Disposable) m_roleManager ).dispose();
  +        }
  +
  +        if ( m_poolManager instanceof Disposable )
  +        {
  +            ( (Disposable) m_poolManager ).dispose();
  +        }
  +
  +        m_logManager = null;
  +        m_componentManager = null;
  +        m_containerConfig = null;
  +        m_containerContext = null;
  +        m_logKitConfig = null;
  +        m_rootContext = null;
       }
   }
  
  
  

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


Mime
View raw message