mcconnell    2002/11/30 13:46:39

  Modified:    assembly/src/java/org/apache/avalon/assembly/appliance
                        DefaultAppliance.java DefaultApplianceManager.java
               assembly/src/java/org/apache/avalon/assembly/engine
                        DefaultEngine.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle
                        DefaultDeploymentService.java
               assembly/src/java/org/apache/avalon/assembly/lifecycle/logging
                        DefaultLoggingService.java
               assembly/src/java/org/apache/avalon/assembly/lifestyle
                        DefaultLifestyleService.java LifestyleService.java
                        SingletonLifestyleHandler.java
                        ThreadLocalLifestyleHandler.java
  Log:
  Seperated logging channels for the engine and all downstread mecahnics
  from the logging channel assigned for the target component.
  
  Revision  Changes    Path
  1.4       +21 -1     
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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultAppliance.java     30 Nov 2002 18:12:06 -0000      1.3
  +++ DefaultAppliance.java     30 Nov 2002 21:46:39 -0000      1.4
  @@ -133,6 +133,11 @@
        */
       private boolean m_initialized = false;
   
  +    /**
  +     * The base logging channel for the componet instance.
  +     */
  +    private Logger m_logger;
  +
       //==============================================================
       // Contextualizable
       //==============================================================
  @@ -170,6 +175,11 @@
       *     <td>{@link Context}</td>
       *     <td>Supplimentary (option) deployment context.</td> 
       *   </tr>
  +    *   <tr>
  +    *     <td>assembly:logger</td>
  +    *     <td>{@link org.apache.avalon.framework.logger.Logger}</td>
  +    *     <td>The base client logger from which component loggers will be 
created.</td> 
  +    *   </tr>
       * </table>
       * @param context the runtime context
       */
  @@ -196,6 +206,16 @@
           {
               m_activation = false;
           }
  +
  +        try
  +        {
  +            m_logger = (Logger) context.get( "assembly:logger" );
  +        }
  +        catch( ContextException e )
  +        {
  +            m_logger = getLogger();
  +        }
  +
       }
   
       //==============================================================
  @@ -237,7 +257,7 @@
   
           try
           {
  -            m_handler = m_lifestyle.createHandler( this, m_classloader, 
getLogger(), m_context );
  +            m_handler = m_lifestyle.createHandler( this, m_classloader, 
getLogger(), m_logger, m_context );
           }
           catch( Throwable e )
           {
  
  
  
  1.3       +20 -1     
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/DefaultApplianceManager.java
  
  Index: DefaultApplianceManager.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/DefaultApplianceManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultApplianceManager.java      29 Nov 2002 13:04:54 -0000      1.2
  +++ DefaultApplianceManager.java      30 Nov 2002 21:46:39 -0000      1.3
  @@ -134,6 +134,11 @@
        * The assembly service.
        */
       private AssemblyService m_assembly;
  +
  +    /**
  +     * The client logging channel.
  +     */
  +    private Logger m_logger;
       
   
       //==============================================================
  @@ -224,6 +229,15 @@
               m_classloader = Thread.currentThread().getContextClassLoader();
           }
   
  +        try
  +        {
  +            m_logger = (Logger) context.get( "assembly:logger" );
  +        }
  +        catch( ContextException e )
  +        {
  +            m_logger = getLogger();
  +        }
  +
           m_contextualized = true;
       }
   
  @@ -340,13 +354,18 @@
               {
                   context = new DefaultContext( map, m_context );
               }
  +
               context.put( "assembly:appliance.profile", profile );
               context.put( "assembly:appliance.enabled", new Boolean( enabled ) );
               context.put( "assembly:appliance.activation", new Boolean( activation ) 
);
               context.put( "assembly:appliance.classloader", m_classloader );
  +            context.put( "assembly:logger", m_logger );
               context.makeReadOnly();
  +
               appliance.contextualize( context );
  +
               appliance.service( m_manager );
  +
               appliance.initialize();
   
               m_assembly.assemble( appliance );
  
  
  
  1.3       +79 -13    
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/DefaultEngine.java
  
  Index: DefaultEngine.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/DefaultEngine.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultEngine.java        30 Nov 2002 14:47:51 -0000      1.2
  +++ DefaultEngine.java        30 Nov 2002 21:46:39 -0000      1.3
  @@ -55,6 +55,7 @@
   
   import org.apache.avalon.framework.Version;
   import org.apache.avalon.framework.activity.Initializable;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.context.DefaultContext;
  @@ -90,15 +91,71 @@
    */
   public class DefaultEngine extends AbstractLogEnabled implements Engine, 
Contextualizable, Initializable
   {
  +    //==============================================================
  +    // static
  +    //==============================================================
  +
  +   /**
  +    * The logging channel assigned via LogEnabled will be used as 
  +    * base logger for components.  All internal machinery (assembly, 
  +    * lifestyle, lifecycle processing, etc. will be assinged loggers 
  +    * as sub-logging catagories of the system logging channel.
  +    */
  +    public static final String SYSTEM_LOG_CATEGORY = "sys";
  +
  +    //==============================================================
  +    // state
  +    //==============================================================
  +
  +   /**
  +    * The system wide context where system refers to the context that
  +    * will be propergated by this engine to compoents under it 
  +    * supervision.
  +    */
       private Context m_context;
   
  +   /**
  +    * The type manager for this engine is a repository of the of the types
  +    * that are declared to the engine.  During the process of assembly of 
  +    * a component, the type manager may be used to resolve types.
  +    */
       private TypeManager m_types;
  +
  +   /**
  +    * The profile manager for this engine is a repository of the of the profiles
  +    * that are declared to the engine.  During the process of assembly of 
  +    * a component, the profile manager may be used to resolve available profiles
  +    * that can be used as candidates for service and extension dependencies.
  +    */
       private ProfileManager m_profiles;
  +
  +   /**
  +    * The appliance manager for this engine is a repository of the of the 
  +    * register appliance instances.  Each appliance in the registry is
  +    * fully assembled and verified.  Appliance instances encapsulte a 
  +    * component type, profile, lifestyle policy and service supporting 
  +    * component deployment.
  +    */
       private ApplianceManager m_appliances;
   
  +   /**
  +    * The classloader that will be assigned to the respective deployment and
  +    * lifestyle services.
  +    */
       private ClassLoader m_classloader;
  +
  +   /**
  +    * A map of custom context entries that suppliment the standard system 
  +    * context at the scope of this engine.  The map ius supplied by a client
  +    * at the time of engine establishment via the engine context.
  +    */
       private Map m_map;
   
  +   /**
  +    * The logging channel for system level functions.
  +    */
  +    private Logger m_logger;
  +
       //==============================================================
       // Contextualizable
       //==============================================================
  @@ -167,21 +224,29 @@
           {
               throw new IllegalStateException("logger");
           }
  +        else
  +        {
  +            m_logger = getLogger().getChildLogger( SYSTEM_LOG_CATEGORY );
  +        }
  +
           if( m_classloader == null )
           {
               m_classloader = Thread.currentThread().getContextClassLoader();
           }
  +
           if( m_types == null )
           {
  -            m_types = createTypeManager( m_classloader );
  +            m_types = createTypeManager( m_classloader, m_logger );
           }
  +
           if( m_profiles == null )
           {
  -            m_profiles = createProfileManager( m_classloader );
  +            m_profiles = createProfileManager( m_classloader, m_logger );
           }
  +
           if( m_appliances == null )
           {
  -            m_appliances = createApplianceManager( m_classloader );
  +            m_appliances = createApplianceManager( m_classloader, m_logger );
           }
       }
   
  @@ -321,10 +386,10 @@
           }
       }
   
  -    private TypeManager createTypeManager( ClassLoader classloader ) throws 
Exception
  +    private TypeManager createTypeManager( ClassLoader classloader, Logger logger ) 
throws Exception
       {
           DefaultTypeManager manager = new DefaultTypeManager();
  -        manager.enableLogging( getLogger().getChildLogger("types") );
  +        manager.enableLogging( logger.getChildLogger("types") );
           DefaultContext context = new DefaultContext();
           context.put( "assembly:classloader", classloader );
           context.makeReadOnly();
  @@ -333,10 +398,10 @@
           return manager;
       }
   
  -    private ProfileManager createProfileManager( ClassLoader classloader ) throws 
Exception
  +    private ProfileManager createProfileManager( ClassLoader classloader, Logger 
logger ) throws Exception
       {
           DefaultProfileManager manager = new DefaultProfileManager();
  -        manager.enableLogging( getLogger().getChildLogger("profiles") );
  +        manager.enableLogging( logger.getChildLogger("profiles") );
           DefaultContext context = new DefaultContext();
           context.put( "assembly:classloader", classloader );
           context.makeReadOnly();
  @@ -345,15 +410,16 @@
           return manager;
       }
   
  -    private ApplianceManager createApplianceManager( ClassLoader classloader ) 
throws Exception
  +    private ApplianceManager createApplianceManager( ClassLoader classloader, 
Logger logger ) throws Exception
       {
           DefaultApplianceManager manager = new DefaultApplianceManager();
   
  -        manager.enableLogging( getLogger() );
  +        manager.enableLogging( logger );
   
           DefaultContext context = new DefaultContext( getSystemContext() );
           context.put( "assembly:classloader", classloader );
  -        context.put( "assembly:pool-manager", getPoolManager() );
  +        context.put( "assembly:pool-manager", getPoolManager( logger ) );
  +        context.put( "assembly:logger", getLogger() );
           context.makeReadOnly();
           manager.contextualize( context );
   
  @@ -396,7 +462,7 @@
           return m_context;
       }
   
  -    private PoolManager getPoolManager()
  +    private PoolManager getPoolManager( Logger logger )
       {
           try
           {
  @@ -405,7 +471,7 @@
               //
   
               TPCThreadManager threadManager = new TPCThreadManager();
  -            threadManager.enableLogging( getLogger().getChildLogger( "threads" ) );
  +            threadManager.enableLogging( logger.getChildLogger( "threads" ) );
               Parameters params = new Parameters();
               params.setParameter( "threads-per-processor", "2" );
               params.setParameter( "sleep-time", "1000" );
  
  
  
  1.2       +2 -2      
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/DefaultDeploymentService.java
  
  Index: DefaultDeploymentService.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/DefaultDeploymentService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultDeploymentService.java     29 Nov 2002 13:19:09 -0000      1.1
  +++ DefaultDeploymentService.java     30 Nov 2002 21:46:39 -0000      1.2
  @@ -335,7 +335,7 @@
   
           try
           {
  -            m_logging.enableLogging( appliance, instance, logger);
  +            m_logging.enableLogging( appliance, instance, logger );
               m_configuration.configure( appliance, instance );
               m_parameters.parameterize( appliance, instance );
               m_contextualization.contextualize( appliance, instance, context );
  
  
  
  1.3       +5 -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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultLoggingService.java        30 Nov 2002 18:12:06 -0000      1.2
  +++ DefaultLoggingService.java        30 Nov 2002 21:46:39 -0000      1.3
  @@ -64,8 +64,7 @@
   public class DefaultLoggingService extends AbstractLogEnabled implements 
LoggingService
   {
      /**
  -    * Applies logging channels to a supplied object in accordance with the profile 
  -    * directives associated with the supplied appliance.
  +    * Applies logging base logging channel; from which a componet logger shall be 
derived
       * @param appliance the appliace
       * @param object the object to which logging channels will be assigned
       * @param the base logging channel
  @@ -84,17 +83,17 @@
   
           if( object instanceof LogEnabled )
           {
  +            String name = appliance.getProfile().getName();
               if( getLogger().isDebugEnabled() )
               {
  -                final String message =  
  -                  "[" + appliance.getProfile().getName() + "]";
  +                final String message = "[" + name + "]";
                   getLogger().debug( message );
               }
               if( logger == null )
               {
                   throw new NullPointerException( "logger" );
               }
  -            ((LogEnabled)object).enableLogging( logger );
  +            ((LogEnabled)object).enableLogging( logger.getChildLogger( name ) );
           }
       }
   }
  
  
  
  1.2       +12 -13    
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/DefaultLifestyleService.java
  
  Index: DefaultLifestyleService.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/DefaultLifestyleService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultLifestyleService.java      29 Nov 2002 13:04:56 -0000      1.1
  +++ DefaultLifestyleService.java      30 Nov 2002 21:46:39 -0000      1.2
  @@ -85,7 +85,8 @@
       //==============================================================
   
       /**
  -     * The deployment service to assign to the lifestyle handler.
  +     * The service manager containing the deployment service to assign 
  +     * to the lifestyle handler.
        */
       private ServiceManager m_manager;
   
  @@ -100,12 +101,6 @@
       private boolean m_initialized = false;
   
      /**
  -    * Table of registered handlers.  Each handler is keyed by its URN with
  -    * a value corresponding to the appliance for the handler.
  -    */
  -    private Hashtable m_handlers = new Hashtable();
  -
  -   /**
       * The supplied static configuration.
       */
       private Configuration m_config;
  @@ -207,7 +202,7 @@
       * @param context a deployment context
       */
       public LifestyleHandler createHandler( 
  -      Appliance appliance, ClassLoader classloader, Logger logger, Context 
deploymentContext )
  +      Appliance appliance, ClassLoader classloader, Logger system, Logger logger, 
Context deploymentContext )
       {
           if( !m_initialized )
           {
  @@ -222,6 +217,10 @@
           {
               throw new NullPointerException("classloader");
           }
  +        if( system == null )
  +        {
  +            throw new NullPointerException("system");
  +        }
           if( logger == null )
           {
               throw new NullPointerException("logger");
  @@ -255,7 +254,7 @@
               try
               {
                   SingletonLifestyleHandler singleton = new 
SingletonLifestyleHandler();
  -                singleton.enableLogging( getLogger().getChildLogger("singleton") );
  +                singleton.enableLogging( getLogger() );
                   singleton.contextualize( context );
                   singleton.service( m_manager );
                   singleton.initialize();
  @@ -273,7 +272,7 @@
               try
               {
                   TransientLifestyleHandler transientHandler = new 
TransientLifestyleHandler();
  -                transientHandler.enableLogging( 
getLogger().getChildLogger("transient") );
  +                transientHandler.enableLogging( getLogger() );
                   transientHandler.contextualize( context );
                   transientHandler.service( m_manager );
                   transientHandler.initialize();
  @@ -291,7 +290,7 @@
               try
               {
                   ThreadLocalLifestyleHandler thread = new 
ThreadLocalLifestyleHandler();
  -                thread.enableLogging( getLogger().getChildLogger("transient") );
  +                thread.enableLogging( getLogger() );
                   thread.contextualize( context );
                   thread.service( m_manager );
                   thread.initialize();
  @@ -319,7 +318,7 @@
           try
           {
               DefaultDeploymentService deployment = new DefaultDeploymentService();
  -            deployment.enableLogging( getLogger().getChildLogger( "deployment" ) );
  +            deployment.enableLogging( getLogger() );
               deployment.service( manager );
               deployment.contextualize( m_context );
               deployment.initialize();
  
  
  
  1.2       +3 -2      
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/LifestyleService.java
  
  Index: LifestyleService.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/LifestyleService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LifestyleService.java     29 Nov 2002 13:04:56 -0000      1.1
  +++ LifestyleService.java     30 Nov 2002 21:46:39 -0000      1.2
  @@ -67,10 +67,11 @@
       * Creation of a new lifestyle handler.
       * @param appliance the appliance that the handler will manage
       * @param classloader the classloader to assign to the handler
  +    * @param system the logging channel for the handler
       * @param logger the logging channel to be assigned to new 
       *    instances of the appliance
       * @param context a deployment context
       */
       LifestyleHandler createHandler( 
  -      Appliance appliance, ClassLoader classloader, Logger logger, Context context 
);
  +      Appliance appliance, ClassLoader classloader, Logger system, Logger logger, 
Context context );
   }
  
  
  
  1.4       +2 -33     
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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SingletonLifestyleHandler.java    30 Nov 2002 18:12:07 -0000      1.3
  +++ SingletonLifestyleHandler.java    30 Nov 2002 21:46:39 -0000      1.4
  @@ -114,29 +114,7 @@
               getLogger().debug( debug );
           }
           Object object = newInstance();
  -        try
  -        {
  -            super.processAccessStage( object );
  -        }
  -        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, 
  -            // should we be releasing the component in this scenario?
  -            // 
  -
  -            m_instance = null;
  -        }
  +        super.processAccessStage( object );
           return object;
       }
   
  @@ -203,21 +181,12 @@
               if( getLogger().isDebugEnabled() )
               {
                   final String debug =
  -                  "creating new instance in appliance: "
  +                  "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;
       }
  
  
  
  1.3       +24 -18    
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/ThreadLocalLifestyleHandler.java
  
  Index: ThreadLocalLifestyleHandler.java
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifestyle/ThreadLocalLifestyleHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ThreadLocalLifestyleHandler.java  29 Nov 2002 17:37:30 -0000      1.2
  +++ ThreadLocalLifestyleHandler.java  30 Nov 2002 21:46:39 -0000      1.3
  @@ -88,23 +88,6 @@
           return access();
       }
   
  -   /**
  -    * Release an a service or handler established by the appliance.
  -    * @param object the service to be released
  -    */
  -    public void release( Object object )
  -    {
  -        if( object == null )
  -        {
  -            return;
  -        }
  -
  -        if( object.equals( m_instance.get() ) )
  -        {
  -            super.processReleaseStage( object );
  -        }
  -    }
  -
       /**
        * Returns an instance of the object type supported by the
        * manager to the client.
  @@ -114,7 +97,13 @@
        */
       private Object access() throws LifestyleException
       {
  -        getLogger().debug( "get" );
  +        if( getLogger().isDebugEnabled() )
  +        {        
  +            final String message =
  +             "access using thread local policy on appliance: " 
  +             + getAppliance().getProfile().getName();
  +            getLogger().debug( message );
  +        }
   
           if( m_instance == null )
           {
  @@ -124,6 +113,23 @@
           Object object = m_instance.get();
           super.processAccessStage( object );
           return object;
  +    }
  +
  +   /**
  +    * Release an a service or handler established by the appliance.
  +    * @param object the service to be released
  +    */
  +    public void release( Object object )
  +    {
  +        if( object == null )
  +        {
  +            return;
  +        }
  +
  +        if( object.equals( m_instance.get() ) )
  +        {
  +            super.processReleaseStage( object );
  +        }
       }
   
      /**
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to