You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2002/11/30 19:12:07 UTC

cvs commit: avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle AbstractLifestyleHandler.java SingletonLifestyleHandler.java

mcconnell    2002/11/30 10:12:07

  Modified:    assembly/src/java/org/apache/avalon/assembly/appliance
                        DefaultAppliance.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/composition
                        DefaultCompositionService.java
                        DefaultServiceManager.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/configuration
                        DefaultConfigurationService.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/context
                        DefaultContextualizationService.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/disposal
                        DefaultDisposalService.java
                        ExtendedDisposalService.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/initialization
                        DefaultInitializationService.java
                        ExtendedInitializationService.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/logging
                        DefaultLoggingService.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/parameters
                        DefaultParameterizationService.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/startup
                        DefaultStartupService.java
               assembly/src/java/org/apache/avalon/assembly/lifestyle
                        AbstractLifestyleHandler.java
                        SingletonLifestyleHandler.java
  Log:
  Fixed a bug in the service manager release logic where release of an object
  was been redirected to appliance of the principal component and not the
  appliance of the provider.
  
  Revision  Changes    Path
  1.3       +11 -2     avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/DefaultAppliance.java
  
  Index: DefaultAppliance.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/DefaultAppliance.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultAppliance.java	29 Nov 2002 13:04:54 -0000	1.2
  +++ DefaultAppliance.java	30 Nov 2002 18:12:06 -0000	1.3
  @@ -393,7 +393,16 @@
       */
       public void release( Object object )
       {
  -        m_handler.release( object );
  +        try
  +        {
  +            m_handler.release( object );
  +        }
  +        catch( Throwable e )
  +        {
  +            final String error = 
  +              "Lifestyle handler raised a release error in appliance: " + getProfile().getName();
  +            throw new ApplianceRuntimeException( error, e );
  +        }
       }
   
       public String toString()
  
  
  
  1.2       +8 -6      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/composition/DefaultCompositionService.java
  
  Index: DefaultCompositionService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/composition/DefaultCompositionService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultCompositionService.java	29 Nov 2002 13:04:54 -0000	1.1
  +++ DefaultCompositionService.java	30 Nov 2002 18:12:06 -0000	1.2
  @@ -94,15 +94,16 @@
   
           if( object instanceof Serviceable )
           {
  -            ServiceManager manager = new DefaultServiceManager( appliance );
  -            ((Serviceable)object).service( manager );
  -
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            DefaultServiceManager manager = new DefaultServiceManager( appliance );
  +            manager.enableLogging( getLogger().getChildLogger( "manager" ) );
  +            ((Serviceable)object).service( manager );
  +
           }
       }
   
  @@ -124,14 +125,15 @@
   
           if( object instanceof Composable )
           {
  -            ServiceManager manager = new DefaultServiceManager( appliance );
  -            ((Composable)object).compose( new WrapperComponentManager( manager ) );
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            DefaultServiceManager manager = new DefaultServiceManager( appliance );
  +            manager.enableLogging( getLogger().getChildLogger( "manager" ) );
  +            ((Composable)object).compose( new WrapperComponentManager( manager ) );
           }
       }
   }
  
  
  
  1.3       +32 -3     avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/composition/DefaultServiceManager.java
  
  Index: DefaultServiceManager.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/composition/DefaultServiceManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultServiceManager.java	29 Nov 2002 16:05:34 -0000	1.2
  +++ DefaultServiceManager.java	30 Nov 2002 18:12:06 -0000	1.3
  @@ -54,6 +54,9 @@
    */ 
   package org.apache.avalon.assembly.lifecycle.composition;
   
  +import java.util.Hashtable;
  +
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.assembly.appliance.Appliance;
  @@ -64,7 +67,7 @@
    * is supplied to componets during lifecyle processing.
    * @author Stephen McConnell <mc...@osm.net>
    */
  -public class DefaultServiceManager implements ServiceManager
  +public class DefaultServiceManager extends AbstractLogEnabled implements ServiceManager
   {
   
       //========================================================================
  @@ -76,6 +79,13 @@
        */
       private Appliance m_appliance;
   
  +    /**
  +     * A table of appliance instances keyed by the object that was provided
  +     * by the appliance so that we can locate the correct appliance when 
  +     * releasing the object.
  +     */
  +    private Hashtable m_table = new Hashtable();
  +
       //========================================================================
       // constructor
       //========================================================================
  @@ -129,7 +139,9 @@
   
           try
           {
  -            return provider.access( dependency );
  +            Object object = provider.access( dependency );
  +            m_table.put( object, provider );
  +            return object;
           }
           catch( Throwable e )
           {
  @@ -147,6 +159,23 @@
        */
       public void release( Object object )
       {
  -        m_appliance.release( object );
  +        Appliance provider = (Appliance) m_table.get( object );
  +        if( provider == null )
  +        {
  +            if( getLogger().isWarnEnabled() )
  +            {
  +                final String warning =
  +                  "Inconsistent release request - the object: "
  +                  + object.getClass().getName() 
  +                  + "/" + System.identityHashCode( object )
  +                  + " was not provided by this manager.";
  +                getLogger().warn( warning );
  +            }
  +        }
  +        else
  +        {
  +            provider.release( object );
  +            m_table.remove( object );
  +        }
       }
   }
  
  
  
  1.2       +7 -7      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/configuration/DefaultConfigurationService.java
  
  Index: DefaultConfigurationService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/configuration/DefaultConfigurationService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultConfigurationService.java	29 Nov 2002 13:04:55 -0000	1.1
  +++ DefaultConfigurationService.java	30 Nov 2002 18:12:06 -0000	1.2
  @@ -87,18 +87,18 @@
   
           if( object instanceof Configurable )
           {
  -            Configuration config = appliance.getProfile().getConfiguration();
  -            if( config == null )
  -            {
  -                config = new DefaultConfiguration( "configuration", null );
  -            }
  -            ((Configurable)object).configure( config );
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            Configuration config = appliance.getProfile().getConfiguration();
  +            if( config == null )
  +            {
  +                config = new DefaultConfiguration( "configuration", null );
  +            }
  +            ((Configurable)object).configure( config );
           }
       }
   }
  
  
  
  1.3       +4 -4      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/context/DefaultContextualizationService.java
  
  Index: DefaultContextualizationService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/context/DefaultContextualizationService.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultContextualizationService.java	29 Nov 2002 16:06:35 -0000	1.2
  +++ DefaultContextualizationService.java	30 Nov 2002 18:12:06 -0000	1.3
  @@ -127,15 +127,15 @@
   
           if( object instanceof Contextualizable )
           {
  -            Context standard =
  -              createStandardContext( appliance.getProfile(), context );
  -            ((Contextualizable)object).contextualize( standard );
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            Context standard =
  +              createStandardContext( appliance.getProfile(), context );
  +            ((Contextualizable)object).contextualize( standard );
           }
       }
   
  
  
  
  1.2       +8 -6      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/disposal/DefaultDisposalService.java
  
  Index: DefaultDisposalService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/disposal/DefaultDisposalService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultDisposalService.java	29 Nov 2002 13:04:55 -0000	1.1
  +++ DefaultDisposalService.java	30 Nov 2002 18:12:06 -0000	1.2
  @@ -83,14 +83,16 @@
   
           if( object instanceof Disposable )
           {
  +            if( getLogger().isDebugEnabled() )
  +            {
  +                final String message = 
  +                  "Appliance disposal: " 
  +                  + appliance.getProfile().getName();
  +                getLogger().debug( message );
  +            }
               try
               {
                   ((Disposable)object).dispose();
  -                if( getLogger().isDebugEnabled() )
  -                {
  -                    final String message = "Appliance disposal: " + appliance.getProfile().getName();
  -                    getLogger().debug( message );
  -                }
               }
               catch( Throwable e )
               {
  
  
  
  1.4       +9 -3      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/disposal/ExtendedDisposalService.java
  
  Index: ExtendedDisposalService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/disposal/ExtendedDisposalService.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ExtendedDisposalService.java	29 Nov 2002 16:06:35 -0000	1.3
  +++ ExtendedDisposalService.java	30 Nov 2002 18:12:06 -0000	1.4
  @@ -123,6 +123,12 @@
           StageDescriptor[] stages = appliance.getProfile().getType().getStages();
           if( stages.length > 0 )
           {
  +            if( getLogger().isDebugEnabled() )
  +            {
  +                final String message =  
  +                  "[" + appliance.getProfile().getName() + "] destroy stage extension handling" ;
  +                getLogger().debug( message );
  +            }
               for( int i = 0; i < stages.length; i++ )
               {
                   StageDescriptor stage = stages[i];
  @@ -136,13 +142,13 @@
   
           if( object instanceof Disposable )
           {
  -            ((Disposable)object).dispose();
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
  -                  "[" + appliance.getProfile().getName() + "]";
  +                  "[" + appliance.getProfile().getName() + "] disposal";
                   getLogger().debug( message );
               }
  +            ((Disposable)object).dispose();
           }
       }
   
  
  
  
  1.2       +2 -2      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/initialization/DefaultInitializationService.java
  
  Index: DefaultInitializationService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/initialization/DefaultInitializationService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultInitializationService.java	29 Nov 2002 13:04:55 -0000	1.1
  +++ DefaultInitializationService.java	30 Nov 2002 18:12:06 -0000	1.2
  @@ -75,13 +75,13 @@
       {
          if( object instanceof Initializable )
          {
  -           ((Initializable)object).initialize();
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +           ((Initializable)object).initialize();
          }
       }
   }
  
  
  
  1.4       +11 -3     avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/initialization/ExtendedInitializationService.java
  
  Index: ExtendedInitializationService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/initialization/ExtendedInitializationService.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ExtendedInitializationService.java	29 Nov 2002 16:06:35 -0000	1.3
  +++ ExtendedInitializationService.java	30 Nov 2002 18:12:06 -0000	1.4
  @@ -129,6 +129,14 @@
               {
                   StageDescriptor stage = stages[ i ];
   
  +                if( getLogger().isDebugEnabled() )
  +                {
  +                    final String message =  
  +                      "[" + appliance.getProfile().getName() 
  +                      + "] extension:" + stage;
  +                    getLogger().debug( message );
  +                }
  +
                   Appliance provider;
                   try
                   {
  @@ -206,13 +214,13 @@
   
           if( object instanceof Initializable )
           {
  -            ((Initializable)object).initialize();
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
  -                  "[" + appliance.getProfile().getName() + "]";
  +                  "[" + appliance.getProfile().getName() + "] initialization";
                   getLogger().debug( message );
               }
  +            ((Initializable)object).initialize();
           }
       }
   }
  
  
  
  1.2       +6 -6      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/logging/DefaultLoggingService.java
  
  Index: DefaultLoggingService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/logging/DefaultLoggingService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultLoggingService.java	29 Nov 2002 13:04:55 -0000	1.1
  +++ DefaultLoggingService.java	30 Nov 2002 18:12:06 -0000	1.2
  @@ -84,17 +84,17 @@
   
           if( object instanceof LogEnabled )
           {
  -            if( logger == null )
  -            {
  -                throw new NullPointerException( "logger" );
  -            }
  -            ((LogEnabled)object).enableLogging( logger );
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            if( logger == null )
  +            {
  +                throw new NullPointerException( "logger" );
  +            }
  +            ((LogEnabled)object).enableLogging( logger );
           }
       }
   }
  
  
  
  1.2       +7 -7      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/parameters/DefaultParameterizationService.java
  
  Index: DefaultParameterizationService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/parameters/DefaultParameterizationService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultParameterizationService.java	29 Nov 2002 13:04:55 -0000	1.1
  +++ DefaultParameterizationService.java	30 Nov 2002 18:12:06 -0000	1.2
  @@ -87,18 +87,18 @@
   
           if( object instanceof Parameterizable )
           {
  -            Parameters params = appliance.getProfile().getParameters();
  -            if( params == null )
  -            {
  -                params = Parameters.EMPTY_PARAMETERS;
  -            }
  -            ((Parameterizable)object).parameterize( params );
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            Parameters params = appliance.getProfile().getParameters();
  +            if( params == null )
  +            {
  +                params = Parameters.EMPTY_PARAMETERS;
  +            }
  +            ((Parameterizable)object).parameterize( params );
           }
       }
   }
  
  
  
  1.2       +3 -3      avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/startup/DefaultStartupService.java
  
  Index: DefaultStartupService.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/startup/DefaultStartupService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultStartupService.java	29 Nov 2002 13:04:55 -0000	1.1
  +++ DefaultStartupService.java	30 Nov 2002 18:12:06 -0000	1.2
  @@ -83,13 +83,13 @@
   
           if( object instanceof Startable )
           {
  -            ((Startable)object).start();
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            ((Startable)object).start();
           }
       }
   
  @@ -112,13 +112,13 @@
   
           if( object instanceof Startable )
           {
  -            ((Startable)object).stop();
               if( getLogger().isDebugEnabled() )
               {
                   final String message =  
                     "[" + appliance.getProfile().getName() + "]";
                   getLogger().debug( message );
               }
  +            ((Startable)object).stop();
           }
       }
   }
  
  
  
  1.5       +13 -0     avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/AbstractLifestyleHandler.java
  
  Index: AbstractLifestyleHandler.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/AbstractLifestyleHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractLifestyleHandler.java	29 Nov 2002 17:37:30 -0000	1.4
  +++ AbstractLifestyleHandler.java	30 Nov 2002 18:12:06 -0000	1.5
  @@ -249,6 +249,19 @@
       //==============================================================
   
      /**
  +    * Return the appliance that this handler is handling.
  +    * @return the appliance
  +    */
  +    protected Appliance getAppliance()
  +    {
  +        if( m_appliance == null )
  +        {
  +            throw new IllegalStateException("appliance");
  +        }
  +        return m_appliance;
  +    }
  +
  +   /**
       * Creation of a new intance of the class declared by the profile backing the 
       * appliance assigned to this handler.
       * @return Object a new instance of the component class
  
  
  
  1.3       +50 -1     avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/SingletonLifestyleHandler.java
  
  Index: SingletonLifestyleHandler.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/SingletonLifestyleHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SingletonLifestyleHandler.java	29 Nov 2002 17:37:30 -0000	1.2
  +++ SingletonLifestyleHandler.java	30 Nov 2002 18:12:07 -0000	1.3
  @@ -106,6 +106,13 @@
       */
       private Object access() throws LifestyleException
       {
  +        if( getLogger().isDebugEnabled() )
  +        {
  +            final String debug =
  +              "access in appliance: " 
  +              + getAppliance().getProfile().getName();
  +            getLogger().debug( debug );
  +        }
           Object object = newInstance();
           try
           {
  @@ -113,6 +120,15 @@
           }
           catch( Throwable e )
           {
  +            if( getLogger().isWarnEnabled() )
  +            {
  +                final String warning =
  +                  "access stage processing failure in appliance: " 
  +                  + getAppliance().getProfile().getName()
  +                  + " - reverting singletone instance to null.";
  +                getLogger().warn( warning );
  +            }
  +
               //
               // We really should be putting more effort into cleaning up
               // the created instance - i.e. shoudown, disposal etc. Also, 
  @@ -130,6 +146,17 @@
       */
       public void release( Object object )
       {
  +        if( m_instance == null )
  +        {
  +            final String error = 
  +              "Singleton instance has not been established for appliance: "
  +              + getAppliance().getProfile().getName();
  +            throw new IllegalStateException( error );
  +        }
  +        if( object == null )
  +        {
  +            return;
  +        }
           if( object.equals( m_instance ) )
           {
               super.processReleaseStage( m_instance );
  @@ -137,7 +164,12 @@
           else
           {
               final String warning =
  -                "Illegal attempt to release an object that was not provided by this handler.";
  +              "Illegal attempt to release an object [" 
  +                 + object.getClass() 
  +                 + "] that does not correspond to the singleton: ]"
  +                 + m_instance.getClass()
  +                 + "] in appliance: "
  +                 + getAppliance();
               getLogger().warn( warning );
           }
       }
  @@ -168,7 +200,24 @@
       {
           if( m_instance == null )
           {
  +            if( getLogger().isDebugEnabled() )
  +            {
  +                final String debug =
  +                  "creating new instance in appliance: "
  +                    + getAppliance().getProfile().getName();
  +                getLogger().debug( debug );
  +            }
  +
               m_instance = super.newInstance();
  +
  +            if( getLogger().isDebugEnabled() )
  +            {
  +                final String debug =
  +                  "new instance in appliance: "
  +                    + getAppliance().getProfile().getName()
  +                    + " established: " + m_instance.getClass().getName();
  +                getLogger().debug( debug );
  +            }
           }
           return m_instance;
       }
  
  
  

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