donaldp     2002/11/07 18:20:44

  Modified:    fortress/src/java/org/apache/excalibur/fortress
                        AbstractContainer.java
               fortress/src/java/org/apache/excalibur/fortress/handler
                        AbstractComponentHandler.java
               fortress/src/java/org/apache/excalibur/fortress/lookup
                        FortressServiceManager.java
                        FortressServiceSelector.java
  Log:
  Move all LifecycleExtension handling into ComponentHandler objects so it is 
consistent and in one place rather than scattered through the access medium ala 
Service/Component Manager/Selectors
  
  Revision  Changes    Path
  1.66      +3 -3      
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/AbstractContainer.java
  
  Index: AbstractContainer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/AbstractContainer.java,v
  retrieving revision 1.65
  retrieving revision 1.66
  diff -u -r1.65 -r1.66
  --- AbstractContainer.java    8 Nov 2002 01:58:31 -0000       1.65
  +++ AbstractContainer.java    8 Nov 2002 02:20:43 -0000       1.66
  @@ -226,7 +226,7 @@
                   if( !hintMap.containsKey( "selector" ) )
                   {
                       hintMap.put( "selector",
  -                                 new FortressServiceSelector( this, role, 
m_extManager, m_context ) );
  +                                 new FortressServiceSelector( this, role ) );
                   }
               }
               else
  @@ -422,7 +422,7 @@
       public void service( final ServiceManager parent )
           throws ServiceException
       {
  -        m_serviceManager = new FortressServiceManager( this, parent, m_extManager, 
m_context );
  +        m_serviceManager = new FortressServiceManager( this, parent );
       }
   
       /**
  
  
  
  1.27      +15 -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.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- AbstractComponentHandler.java     8 Nov 2002 01:58:31 -0000       1.26
  +++ AbstractComponentHandler.java     8 Nov 2002 02:20:43 -0000       1.27
  @@ -105,6 +105,7 @@
   
       /** Initialization policy */
       private boolean m_isLazy;
  +    private LifecycleExtensionManager m_extManager;
   
       /**
        * Create a ComponentHandler that takes care of hiding the details of
  @@ -138,6 +139,7 @@
               (InstrumentManager)context.get( ContainerConstants.INSTRUMENT_MANAGER );
           m_factory = new ComponentFactory( componentClass, config, service, context, 
m_logkit,
                                             extManager, instrumentManager );
  +        m_extManager = extManager;
           addChildInstrumentable( m_factory );
           m_context = context;
           m_isLazy = isLazy.booleanValue();
  @@ -219,7 +221,9 @@
               throw new IllegalStateException( message );
           }
   
  -        return doGet();
  +        final Object result = doGet();
  +        m_extManager.executeAccessExtensions( result, m_context );
  +        return result;
       }
   
       /**
  @@ -242,6 +246,15 @@
               final String message =
                   "You cannot put a component in an uninitialized holder";
               throw new IllegalStateException( message );
  +        }
  +
  +        try
  +        {
  +            m_extManager.executeReleaseExtensions( component, m_context );
  +        }
  +        catch( Exception e )
  +        {
  +            // REVISIT(MC): we need to log this somewhere
           }
   
           doPut( component );
  
  
  
  1.20      +23 -77    
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceManager.java
  
  Index: FortressServiceManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceManager.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- FortressServiceManager.java       8 Nov 2002 00:54:14 -0000       1.19
  +++ FortressServiceManager.java       8 Nov 2002 02:20:43 -0000       1.20
  @@ -50,20 +50,16 @@
   package org.apache.excalibur.fortress.lookup;
   
   import java.util.Map;
  -import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.ComponentSelector;
  -import org.apache.avalon.framework.context.Context;
  +import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.ServiceSelector;
  -import org.apache.avalon.framework.service.WrapperServiceManager;
   import org.apache.avalon.framework.service.WrapperServiceSelector;
  -import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.commons.collections.StaticBucketMap;
   import org.apache.excalibur.container.lookup.AbstractServiceManager;
   import org.apache.excalibur.fortress.Container;
   import org.apache.excalibur.fortress.handler.ComponentHandler;
  -import org.apache.excalibur.fortress.lifecycle.LifecycleExtensionManager;
   
   /**
    * This is the Default ServiceManager for the Container.  It provides
  @@ -73,73 +69,40 @@
    * @author <a href="mailto:bloritsch@;apache.org">Berin Loritsch</a>
    * @version CVS $Revision$ $Date$
    */
  -public class FortressServiceManager extends AbstractServiceManager
  +public class FortressServiceManager
  +    extends AbstractServiceManager
   {
  -    private final Container m_components;
  +    private final Container m_container;
       private final Map m_used;
       private final ServiceManager m_parent;
  -    private final Context m_context;
  -    private final LifecycleExtensionManager m_extManager;
  -
  -    /**
  -     * This constructor is for a ContainerComponentManager with no parent
  -     * ComponentLocator
  -     */
  -    public FortressServiceManager( final Container container,
  -                                   final LifecycleExtensionManager extManager,
  -                                   final Context context )
  -    {
  -        this( container, (ServiceManager)null, extManager, context );
  -    }
  -
  -    /**
  -     * This constructor is for a ContainerComponentManager with no parent
  -     * ComponentLocator
  -     */
  -    public FortressServiceManager( final Container container,
  -                                   final ComponentManager parent,
  -                                   final LifecycleExtensionManager extManager,
  -                                   final Context context )
  -    {
  -        this( container, ( parent != null ) ?
  -                         new WrapperServiceManager( parent ) :
  -                         null,
  -              extManager,
  -              context );
  -    }
   
       /**
        * This constructor is for a ContainerComponentManager with a parent
        * ComponentLocator
        */
       public FortressServiceManager( final Container container,
  -                                   final ServiceManager parent,
  -                                   final LifecycleExtensionManager extManager,
  -                                   final Context context )
  +                                   final ServiceManager parent )
       {
           super( parent );
  +        if( null == container )
  +        {
  +            throw new NullPointerException( "container" );
  +        }
   
           m_parent = parent;
  -        m_components = container;
  -        m_context = context;
  -        m_extManager = extManager;
  +        m_container = container;
           m_used = new StaticBucketMap();
  -
  -        if( m_components == null )
  -        {
  -            throw new NullPointerException( "The Container is null, the 
ServiceManager is unusable" );
  -        }
       }
   
       protected Object obtainService( String role )
           throws ServiceException
       {
  -        if( !m_components.has( role, null ) )
  +        if( !m_container.has( role, null ) )
           {
               return null;
           }
   
  -        Object temp = m_components.get( role, null );
  +        Object temp = m_container.get( role, null );
   
           if( temp instanceof ServiceSelector )
           {
  @@ -156,55 +119,36 @@
               throw new ServiceException( role, "Invalid entry in component manager" 
);
           }
   
  -        ComponentHandler handler = (ComponentHandler)temp;
  -
  -        final Object component;
  -
           try
           {
  +            final ComponentHandler handler = (ComponentHandler)temp;
               if( !handler.isInitialized() )
               {
                   ContainerUtil.initialize( handler );
               }
   
  -            component = handler.get();
  -
  -            m_extManager.executeAccessExtensions( component, m_context );
  +            final Object component = handler.get();
  +            m_used.put( component, handler );
  +            return component;
           }
  -        catch( ServiceException ce )
  +        catch( final ServiceException ce )
           {
               throw ce; // rethrow
           }
  -        catch( Exception e )
  +        catch( final Exception e )
           {
               throw new ServiceException( role, "Could not return a reference to the 
Component", e );
           }
  -
  -        m_used.put( component, handler );
  -
  -        return component;
       }
   
       protected boolean serviceExists( String role )
       {
  -        return m_components.has( role, null );
  +        return m_container.has( role, null );
       }
   
       public void release( Object component )
       {
  -        final ComponentHandler handler;
  -
  -        try
  -        {
  -            m_extManager.executeReleaseExtensions( component, m_context );
  -        }
  -        catch( Exception e )
  -        {
  -            // REVISIT(MC): need to log this somewhere ?
  -        }
  -
  -        handler = (ComponentHandler)m_used.remove( component );
  -
  +        final ComponentHandler handler = (ComponentHandler)m_used.remove( component 
);
           if( null == handler )
           {
               if( null == m_parent )
  @@ -215,6 +159,8 @@
                    * is an error condition--but if the component is usually
                    * ThreadSafe, the impact is essentially nill.
                    */
  +                //Pete: This occurs when objects are released more often than
  +                //when they are aquired
               }
               else
               {
  
  
  
  1.13      +7 -25     
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceSelector.java
  
  Index: FortressServiceSelector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/lookup/FortressServiceSelector.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FortressServiceSelector.java      8 Nov 2002 00:54:14 -0000       1.12
  +++ FortressServiceSelector.java      8 Nov 2002 02:20:43 -0000       1.13
  @@ -49,16 +49,13 @@
   */
   package org.apache.excalibur.fortress.lookup;
   
  -import org.apache.commons.collections.StaticBucketMap;
  -import org.apache.avalon.framework.context.Context;
  +import java.util.Map;
  +import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceSelector;
  -import org.apache.avalon.framework.container.ContainerUtil;
  +import org.apache.commons.collections.StaticBucketMap;
   import org.apache.excalibur.fortress.Container;
   import org.apache.excalibur.fortress.handler.ComponentHandler;
  -import org.apache.excalibur.fortress.lifecycle.LifecycleExtensionManager;
  -
  -import java.util.Map;
   
   /**
    * This is the Default ServiceSelector for the Container.  It provides
  @@ -68,23 +65,18 @@
    * @author <a href="mailto:bloritsch@;apache.org">Berin Loritsch</a>
    * @version CVS $Revision$ $Date$
    */
  -public class FortressServiceSelector implements ServiceSelector
  +public class FortressServiceSelector
  +    implements ServiceSelector
   {
       private final String m_role;
       private final Container m_components;
       private final Map m_used;
  -    private final Context m_context;
  -    private final LifecycleExtensionManager m_extManager;
   
       public FortressServiceSelector( final Container container,
  -                                    final String role,
  -                                    final LifecycleExtensionManager extManager,
  -                                    final Context context )
  +                                    final String role )
       {
           m_role = role;
           m_components = container;
  -        m_context = context;
  -        m_extManager = extManager;
           m_used = new StaticBucketMap();
       }
   
  @@ -111,7 +103,6 @@
               }
   
               final Object component = handler.get();
  -            m_extManager.executeAccessExtensions( component, m_context );
               m_used.put( component, handler );
               return component;
           }
  @@ -133,15 +124,6 @@
   
       public void release( Object component )
       {
  -        try
  -        {
  -            m_extManager.executeReleaseExtensions( component, m_context );
  -        }
  -        catch( Exception e )
  -        {
  -            // REVISIT(MC): we need to log this somewhere
  -        }
  -
           final ComponentHandler handler =
               (ComponentHandler)m_used.remove( component );
           handler.put( component );
  
  
  

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