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