avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler AbstractComponentHandler.java FactoryComponentHandler.java PerThreadComponentHandler.java PoolableComponentHandler.java ThreadSafeComponentHandler.java
Date Fri, 08 Nov 2002 00:06:34 GMT
donaldp     2002/11/07 16:06:34

  Modified:    fortress/src/java/org/apache/excalibur/fortress/handler
                        AbstractComponentHandler.java
                        FactoryComponentHandler.java
                        PerThreadComponentHandler.java
                        PoolableComponentHandler.java
                        ThreadSafeComponentHandler.java
  Log:
  Reworked put() to be subclass friendly via a doPut() method.
  
  Also reworked Component and Factory release. It seems that in some cases that factory was
never disposed (ThreadSafe component) and in other cases the instance was never disposed (ie
PerThread).
  
  Could some one verify that these fixes are correct. ATM the Pool is not shut down which
may mean components are not released. Needs further investigation?
  
  Revision  Changes    Path
  1.19      +32 -2     jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/AbstractComponentHandler.java
  
  Index: AbstractComponentHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/AbstractComponentHandler.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- AbstractComponentHandler.java	7 Nov 2002 23:51:24 -0000	1.18
  +++ AbstractComponentHandler.java	8 Nov 2002 00:06:34 -0000	1.19
  @@ -53,10 +53,10 @@
   import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.activity.Initializable;
   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.logger.Logger;
   import org.apache.avalon.framework.service.ServiceManager;
  -import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.excalibur.fortress.Container;
   import org.apache.excalibur.fortress.lifecycle.LifecycleExtensionManager;
   import org.apache.excalibur.instrument.AbstractInstrumentable;
  @@ -209,6 +209,36 @@
               final String message =
                   "You cannot put a component in an uninitialized holder";
               throw new IllegalStateException( message );
  +        }
  +
  +        doPut( component );
  +    }
  +
  +    /**
  +     * Subclasses should overide this to return component to handler.
  +     *
  +     * @param component the component
  +     */
  +    protected abstract void doPut( final Object component );
  +
  +
  +    /**
  +     * Dispose of the specified component.
  +     *
  +     * @param component the component
  +     */
  +    protected void disposeComponent( final Object component )
  +    {
  +        try
  +        {
  +            m_factory.dispose( component );
  +        }
  +        catch( final Exception e )
  +        {
  +            if( m_logger.isWarnEnabled() )
  +            {
  +                m_logger.warn( "Error disposing component", e );
  +            }
           }
       }
   
  
  
  
  1.28      +3 -15     jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/FactoryComponentHandler.java
  
  Index: FactoryComponentHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/FactoryComponentHandler.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- FactoryComponentHandler.java	7 Nov 2002 23:46:48 -0000	1.27
  +++ FactoryComponentHandler.java	8 Nov 2002 00:06:34 -0000	1.28
  @@ -114,20 +114,8 @@
       /**
        * Return a reference of the desired Component
        */
  -    public void put( final Object component )
  +    protected void doPut( final Object component )
       {
  -        super.put( component );
  -
  -        try
  -        {
  -            m_factory.dispose( component );
  -        }
  -        catch( Exception e )
  -        {
  -            if( m_logger.isWarnEnabled() )
  -            {
  -                m_logger.warn( "Error disposing component", e );
  -            }
  -        }
  +        disposeComponent( component );
       }
   }
  
  
  
  1.31      +8 -3      jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/PerThreadComponentHandler.java
  
  Index: PerThreadComponentHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/PerThreadComponentHandler.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- PerThreadComponentHandler.java	7 Nov 2002 23:46:48 -0000	1.30
  +++ PerThreadComponentHandler.java	8 Nov 2002 00:06:34 -0000	1.31
  @@ -131,15 +131,20 @@
           return instance;
       }
   
  +    protected void doPut( Object component )
  +    {
  +        //Do nothing
  +    }
  +
       /**
        * Dispose of the ComponentHandler and any associated Pools and
        * Factories.
        */
       public void dispose()
       {
  -        super.dispose();
  -
  +        disposeComponent( m_instance );
           m_instance = null;
  +        super.dispose();
       }
   
       private static final class ThreadLocalComponent extends ThreadLocal
  
  
  
  1.32      +2 -3      jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/PoolableComponentHandler.java
  
  Index: PoolableComponentHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/PoolableComponentHandler.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- PoolableComponentHandler.java	7 Nov 2002 23:46:48 -0000	1.31
  +++ PoolableComponentHandler.java	8 Nov 2002 00:06:34 -0000	1.32
  @@ -131,9 +131,8 @@
       /**
        * Return a reference of the desired Component
        */
  -    public void put( final Object component )
  +    protected void doPut( final Object component )
       {
  -        super.put( component );
           m_pool.release( component );
       }
   
  
  
  
  1.30      +10 -28    jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/ThreadSafeComponentHandler.java
  
  Index: ThreadSafeComponentHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/handler/ThreadSafeComponentHandler.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- ThreadSafeComponentHandler.java	7 Nov 2002 23:46:48 -0000	1.29
  +++ ThreadSafeComponentHandler.java	8 Nov 2002 00:06:34 -0000	1.30
  @@ -49,12 +49,10 @@
   */
   package org.apache.excalibur.fortress.handler;
   
  -import org.apache.avalon.framework.activity.Disposable;
  -import org.apache.avalon.framework.activity.Startable;
   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.service.ServiceManager;
  -import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.excalibur.fortress.lifecycle.LifecycleExtensionManager;
   
   /**
  @@ -135,34 +133,18 @@
           return m_instance;
       }
   
  +    protected void doPut( Object component )
  +    {
  +        //do nothing
  +    }
  +
       /**
        * Dispose of the ComponentHandler and any associated Pools and Factories.
        */
       public void dispose()
       {
  -        try
  -        {
  -            if( null != m_factory )
  -            {
  -                m_factory.dispose( m_instance );
  -            }
  -            else
  -            {
  -                ContainerUtil.stop( m_instance );
  -                ContainerUtil.dispose( m_instance );
  -            }
  -
  -            m_instance = null;
  -        }
  -        catch( final Exception e )
  -        {
  -            if( m_logger.isWarnEnabled() )
  -            {
  -                m_logger.warn( "Error decommissioning component: " +
  -                               m_factory.getCreatedClass().getName(), e );
  -            }
  -        }
  -
  -        m_disposed = true;
  +        disposeComponent( m_instance );
  +        m_instance = null;
  +        super.dispose();
       }
   }
  
  
  

--
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