donaldp 01/04/13 22:51:40 Modified: src/java/org/apache/phoenix/engine DefaultServerApplication.java src/java/org/apache/phoenix/engine/blocks BlockDAG.java BlockEntry.java src/java/org/apache/phoenix/engine/facilities DefaultComponentBuilder.java DefaultComponentManagerBuilder.java DefaultConfigurationRepository.java DefaultContextBuilder.java DefaultLoggerBuilder.java src/java/org/apache/phoenix/engine/phases Phase.java Traversal.java Added: src/java/org/apache/phoenix/engine/facilities ComponentBuilder.java ComponentManagerBuilder.java ConfigurationRepository.java ContextBuilder.java LoggerBuilder.java src/java/org/apache/phoenix/engine/phases ShutdownPhase.java StartupPhase.java Removed: src/java/org/apache/phoenix/engine/phases DefaultPhase.java PipelineRunner.java Log: Updated kernel to implement stages directly rather than using camelot.pipeline.* directly Also moved PolicyClassLoader and AbstractPolicy to this CVS from main Avalon CVS. Revision Changes Path 1.10 +15 -29 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultServerApplication.java Index: DefaultServerApplication.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultServerApplication.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DefaultServerApplication.java 2001/04/12 12:23:59 1.9 +++ DefaultServerApplication.java 2001/04/14 05:51:38 1.10 @@ -25,14 +25,11 @@ import org.apache.avalon.camelot.ContainerException; import org.apache.avalon.camelot.Entry; import org.apache.avalon.camelot.Factory; -import org.apache.avalon.camelot.pipeline.AvalonState; -import org.apache.avalon.camelot.pipeline.ComponentBuilder; -import org.apache.avalon.camelot.pipeline.ComponentManagerBuilder; -import org.apache.avalon.camelot.pipeline.ConfigurationRepository; -import org.apache.avalon.camelot.pipeline.ContextBuilder; -import org.apache.avalon.camelot.pipeline.LoggerBuilder; -import org.apache.avalon.camelot.pipeline.ShutdownPipeline; -import org.apache.avalon.camelot.pipeline.StartupPipeline; +import org.apache.phoenix.engine.facilities.ComponentBuilder; +import org.apache.phoenix.engine.facilities.ComponentManagerBuilder; +import org.apache.phoenix.engine.facilities.ConfigurationRepository; +import org.apache.phoenix.engine.facilities.ContextBuilder; +import org.apache.phoenix.engine.facilities.LoggerBuilder; import org.apache.avalon.configuration.Configurable; import org.apache.avalon.configuration.Configuration; import org.apache.avalon.configuration.ConfigurationException; @@ -49,9 +46,9 @@ import org.apache.phoenix.engine.facilities.security.DefaultPolicy; import org.apache.phoenix.engine.facilities.DefaultThreadManager; import org.apache.phoenix.engine.facilities.classmanager.SarClassLoader; -import org.apache.phoenix.engine.phases.DefaultPhase; +import org.apache.phoenix.engine.phases.ShutdownPhase; +import org.apache.phoenix.engine.phases.StartupPhase; import org.apache.phoenix.engine.phases.Phase; -import org.apache.phoenix.engine.phases.Traversal; import org.apache.phoenix.metainfo.DependencyDescriptor; /** @@ -123,19 +120,8 @@ protected void initPhases() throws ApplicationException { - Phase phase = null; - - phase = new DefaultPhase( Phase.FORWARD, - new StartupPipeline(), - AvalonState.BASE, - AvalonState.RUNNING ); - m_phases.put( "startup", phase ); - - phase = new DefaultPhase( Phase.REVERSE, - new ShutdownPipeline(), - AvalonState.RUNNING, - AvalonState.DISPOSED ); - m_phases.put( "shutdown", phase ); + m_phases.put( "startup", new StartupPhase() ); + m_phases.put( "shutdown", new ShutdownPhase() ); } protected void setupPhases() @@ -375,18 +361,18 @@ protected ComponentManager createComponentManager() { final DefaultComponentManager componentManager = new DefaultComponentManager(); - componentManager.put( "org.apache.phoenix.engine.ServerApplication", this ); + componentManager.put( "org.apache.avalon.camelot.Container", this ); componentManager.put( "java.security.Policy", m_policy ); componentManager.put( "java.lang.ClassLoader", m_classLoader ); componentManager.put( "NOT_DONE_YET", m_logManager ); componentManager.put( "org.apache.avalon.util.thread.ThreadManager", m_threadManager ); - componentManager.put( "org.apache.avalon.camelot.pipeline.ContextBuilder", m_contextBuilder ); - componentManager.put( "org.apache.avalon.camelot.pipeline.LoggerBuilder", m_loggerBuilder ); - componentManager.put( "org.apache.avalon.camelot.pipeline.ComponentBuilder", + componentManager.put( "org.apache.phoenix.engine.facilities.ContextBuilder", m_contextBuilder ); + componentManager.put( "org.apache.phoenix.engine.facilities.LoggerBuilder", m_loggerBuilder ); + componentManager.put( "org.apache.phoenix.engine.facilities.ComponentBuilder", m_componentBuilder ); - componentManager.put( "org.apache.avalon.camelot.pipeline.ComponentManagerBuilder", + componentManager.put( "org.apache.phoenix.engine.facilities.ComponentManagerBuilder", m_componentManagerBuilder ); - componentManager.put( "org.apache.avalon.camelot.pipeline.ConfigurationRepository", + componentManager.put( "org.apache.phoenix.engine.facilities.ConfigurationRepository", m_configurationRepository ); return componentManager; 1.7 +5 -6 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/blocks/BlockDAG.java Index: BlockDAG.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/blocks/BlockDAG.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- BlockDAG.java 2001/04/12 12:24:02 1.6 +++ BlockDAG.java 2001/04/14 05:51:38 1.7 @@ -12,7 +12,7 @@ import org.apache.avalon.ComponentManager; import org.apache.avalon.ComponentManagerException; import org.apache.avalon.Composer; -import org.apache.avalon.atlantis.Application; +import org.apache.avalon.camelot.Container; import org.apache.avalon.camelot.ContainerException; import org.apache.phoenix.Block; import org.apache.phoenix.metainfo.DependencyDescriptor; @@ -27,13 +27,12 @@ extends AbstractLoggable implements Composer { - protected Application m_application; + protected Container m_container; public void compose( final ComponentManager componentManager ) throws ComponentManagerException { - m_application = (Application)componentManager. - lookup( "org.apache.phoenix.engine.ServerApplication" ); + m_container = (Container)componentManager.lookup( "org.apache.avalon.camelot.Container" ); } public void walkGraph( final String root, final BlockVisitor visitor ) @@ -51,7 +50,7 @@ protected BlockEntry getBlockEntry( final String name ) throws Exception { - return (BlockEntry)m_application.getEntry( name ); + return (BlockEntry)m_container.getEntry( name ); //catch( final ContainerException ce ) } @@ -98,7 +97,7 @@ { getLogger().debug( "Traversing reverse dependencies for " + name ); - final Iterator entries = m_application.list(); + final Iterator entries = m_container.list(); while( entries.hasNext() ) { final String blockName = (String)entries.next(); 1.3 +0 -2 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/blocks/BlockEntry.java Index: BlockEntry.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/blocks/BlockEntry.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- BlockEntry.java 2001/02/28 08:13:55 1.2 +++ BlockEntry.java 2001/04/14 05:51:38 1.3 @@ -9,7 +9,6 @@ import org.apache.avalon.camelot.Entry; import org.apache.avalon.camelot.Locator; -import org.apache.avalon.camelot.pipeline.AvalonState; import org.apache.avalon.configuration.Configuration; import org.apache.phoenix.Block; import org.apache.phoenix.metainfo.BlockInfo; @@ -30,7 +29,6 @@ public BlockEntry( final Locator locator, final RoleEntry[] roleEntrys ) { - setState( AvalonState.BASE ); m_locator = locator; m_roleEntrys = roleEntrys; } 1.3 +0 -1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultComponentBuilder.java Index: DefaultComponentBuilder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultComponentBuilder.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- DefaultComponentBuilder.java 2001/04/03 03:50:36 1.2 +++ DefaultComponentBuilder.java 2001/04/14 05:51:39 1.3 @@ -18,7 +18,6 @@ import org.apache.avalon.camelot.Entry; import org.apache.avalon.camelot.Factory; import org.apache.avalon.camelot.FactoryException; -import org.apache.avalon.camelot.pipeline.ComponentBuilder; import org.apache.log.Logger; import org.apache.phoenix.Block; import org.apache.phoenix.engine.blocks.BlockEntry; 1.6 +4 -6 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultComponentManagerBuilder.java Index: DefaultComponentManagerBuilder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultComponentManagerBuilder.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- DefaultComponentManagerBuilder.java 2001/04/12 12:24:03 1.5 +++ DefaultComponentManagerBuilder.java 2001/04/14 05:51:39 1.6 @@ -11,11 +11,10 @@ import org.apache.avalon.ComponentManagerException; import org.apache.avalon.Composer; import org.apache.avalon.DefaultComponentManager; -import org.apache.avalon.atlantis.Application; +import org.apache.avalon.camelot.Container; import org.apache.avalon.atlantis.Facility; import org.apache.avalon.camelot.ContainerException; import org.apache.avalon.camelot.Entry; -import org.apache.avalon.camelot.pipeline.ComponentManagerBuilder; import org.apache.avalon.component.ComponentException; import org.apache.phoenix.engine.blocks.BlockEntry; import org.apache.phoenix.engine.blocks.RoleEntry; @@ -32,13 +31,12 @@ implements Facility, ComponentManagerBuilder, Composer { //container to get dependencies from - protected Application m_application; + protected Container m_container; public void compose( final ComponentManager componentManager ) throws ComponentManagerException { - m_application = (Application)componentManager. - lookup( "org.apache.phoenix.engine.ServerApplication" ); + m_container = (Container)componentManager.lookup( "org.apache.avalon.camelot.Container" ); } /** @@ -67,7 +65,7 @@ //dependency should NEVER be null here as it //is validated at entry time final BlockEntry dependency = - (BlockEntry)m_application.getEntry( dependencyName ); + (BlockEntry)m_container.getEntry( dependencyName ); //make sure that the block offers service it supposed to be providing final ServiceDescriptor[] services = dependency.getBlockInfo().getServices(); 1.2 +0 -1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultConfigurationRepository.java Index: DefaultConfigurationRepository.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultConfigurationRepository.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DefaultConfigurationRepository.java 2001/03/18 08:35:04 1.1 +++ DefaultConfigurationRepository.java 2001/04/14 05:51:39 1.2 @@ -9,7 +9,6 @@ import org.apache.avalon.atlantis.Facility; import org.apache.avalon.camelot.Entry; -import org.apache.avalon.camelot.pipeline.ConfigurationRepository; import org.apache.avalon.configuration.Configuration; import org.apache.avalon.configuration.ConfigurationException; import org.apache.phoenix.engine.blocks.BlockEntry; 1.2 +0 -1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultContextBuilder.java Index: DefaultContextBuilder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultContextBuilder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DefaultContextBuilder.java 2001/03/18 08:35:04 1.1 +++ DefaultContextBuilder.java 2001/04/14 05:51:39 1.2 @@ -17,7 +17,6 @@ import org.apache.avalon.DefaultContext; import org.apache.avalon.atlantis.Facility; import org.apache.avalon.camelot.Entry; -import org.apache.avalon.camelot.pipeline.ContextBuilder; import org.apache.avalon.util.thread.ThreadManager; import org.apache.phoenix.BlockContext; import org.apache.phoenix.engine.SarContextResources; 1.2 +0 -1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultLoggerBuilder.java Index: DefaultLoggerBuilder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/DefaultLoggerBuilder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DefaultLoggerBuilder.java 2001/03/18 08:35:04 1.1 +++ DefaultLoggerBuilder.java 2001/04/14 05:51:39 1.2 @@ -10,7 +10,6 @@ import org.apache.avalon.AbstractLoggable; import org.apache.avalon.atlantis.Facility; import org.apache.avalon.camelot.Entry; -import org.apache.avalon.camelot.pipeline.LoggerBuilder; import org.apache.log.Logger; /** 1.1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/ComponentBuilder.java Index: ComponentBuilder.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.phoenix.engine.facilities; import org.apache.avalon.Component; import org.apache.avalon.camelot.Entry; /** * Component responsible for building components for entry. * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public interface ComponentBuilder extends Component { Object createComponent( String name, Entry entry ) throws Exception; } 1.1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/ComponentManagerBuilder.java Index: ComponentManagerBuilder.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.phoenix.engine.facilities; import org.apache.avalon.Component; import org.apache.avalon.ComponentManager; import org.apache.avalon.ComponentManagerException; import org.apache.avalon.camelot.Entry; /** * Component responsible for building componentManager information for entry. * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public interface ComponentManagerBuilder extends Component { ComponentManager createComponentManager( String name, Entry entry ) throws ComponentManagerException; } 1.1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/ConfigurationRepository.java Index: ConfigurationRepository.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.phoenix.engine.facilities; import org.apache.avalon.Component; import org.apache.avalon.camelot.Entry; import org.apache.avalon.configuration.Configuration; import org.apache.avalon.configuration.ConfigurationException; /** * Repository from which all configuration data is retrieved. * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public interface ConfigurationRepository extends Component { Configuration getConfiguration( String name, Entry entry ) throws ConfigurationException; } 1.1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/ContextBuilder.java Index: ContextBuilder.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.phoenix.engine.facilities; import org.apache.avalon.Component; import org.apache.avalon.Context; import org.apache.avalon.camelot.Entry; /** * Component responsible for building context information for entry. * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public interface ContextBuilder extends Component { Context createContext( String name, Entry entry ); } 1.1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/facilities/LoggerBuilder.java Index: LoggerBuilder.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.phoenix.engine.facilities; import org.apache.avalon.Component; import org.apache.avalon.camelot.Entry; import org.apache.log.Logger; /** * Component responsible for building logger for entry. * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public interface LoggerBuilder extends Component { Logger createLogger( String name, Entry entry ); } 1.3 +11 -5 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/Phase.java Index: Phase.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/Phase.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Phase.java 2001/02/24 07:11:28 1.2 +++ Phase.java 2001/04/14 05:51:39 1.3 @@ -8,23 +8,29 @@ package org.apache.phoenix.engine.phases; import org.apache.avalon.Component; +import org.apache.avalon.camelot.State; import org.apache.phoenix.engine.blocks.BlockVisitor; /** - * This represents a phase in applications lifecycle. + * This represents a phase in applications lifecycle. * Each phase is made up of a number of stages. * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public interface Phase extends BlockVisitor, Component -{ - Traversal FORWARD = new Traversal( "FORWARD" ); - Traversal REVERSE = new Traversal( "REVERSE" ); - Traversal LINEAR = new Traversal( "LINEAR" ); +{ + State BASE = new State( "BASE", 0 ); + State STARTEDUP = new State( "STARTEDUP", 10 ); + State SHUTDOWN = new State( "SHUTDOWN", 20 ); + Traversal FORWARD = new Traversal( "FORWARD" ); + Traversal REVERSE = new Traversal( "REVERSE" ); + Traversal LINEAR = new Traversal( "LINEAR" ); + /** * Retrieve traversal that should be taken. + * TODO: remove this method and implement IOC * * @return the Traversal */ 1.2 +2 -2 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/Traversal.java Index: Traversal.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/Traversal.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Traversal.java 2001/02/24 07:11:28 1.1 +++ Traversal.java 2001/04/14 05:51:40 1.2 @@ -9,10 +9,10 @@ import org.apache.avalon.util.Enum; -public class Traversal +class Traversal extends Enum { - Traversal( final String name ) + protected Traversal( final String name ) { super( name ); } 1.1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/ShutdownPhase.java Index: ShutdownPhase.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.phoenix.engine.phases; import org.apache.avalon.AbstractLoggable; import org.apache.avalon.ComponentManager; import org.apache.avalon.ComponentManagerException; import org.apache.avalon.Composer; import org.apache.avalon.Disposable; import org.apache.avalon.Stoppable; import org.apache.avalon.atlantis.ApplicationException; import org.apache.avalon.util.thread.ThreadContext; import org.apache.avalon.util.thread.ThreadManager; import org.apache.phoenix.engine.blocks.BlockEntry; /** * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public class ShutdownPhase extends AbstractLoggable implements Phase, Composer { private ClassLoader m_classLoader; private ThreadManager m_threadManager; public void compose( final ComponentManager componentManager ) throws ComponentManagerException { m_classLoader = (ClassLoader)componentManager.lookup( "java.lang.ClassLoader" ); m_threadManager = (ThreadManager)componentManager. lookup( "org.apache.avalon.util.thread.ThreadManager" ); } /** * Retrieve traversal that should be taken. * * @return the Traversal */ public Traversal getTraversal() { return Phase.REVERSE; } /** * This is called when a block is reached whilst walking the tree. * * @param name the name of block * @param entry the BlockEntry * @exception ApplicationException if walking is to be stopped */ public void visitBlock( final String name, final BlockEntry entry ) throws ApplicationException { if( entry.getState() != Phase.STARTEDUP ) return; getLogger().info( "Processing Block: " + name ); getLogger().debug( "Processing with classloader " + m_classLoader ); //HACK: Hack-o-mania here - Fix when each Application is //run in a separate thread group Thread.currentThread().setContextClassLoader( m_classLoader ); ThreadContext.setCurrentThreadPool( m_threadManager.getDefaultThreadPool() ); final Object object = entry.getInstance(); //Stoppable stage if( object instanceof Stoppable ) { getLogger().debug( "Pre-Stoppable Stage" ); try { ((Stoppable)object).stop(); getLogger().debug( "Stoppable successful." ); } catch( final Exception e ) { getLogger().warn( "Unable to stop block " + name, e ); } } //Disposable stage if( object instanceof Disposable ) { getLogger().debug( "Pre-Disposable Stage" ); try { ((Disposable)object).dispose(); getLogger().debug( "Disposable successful." ); } catch( final Exception e ) { getLogger().warn( "Unable to dispose block " + name, e ); } } //Destruction stage getLogger().debug( "Pre-Destruction Stage" ); entry.setInstance( null ); entry.setState( Phase.SHUTDOWN ); getLogger().debug( "Destruction successful." ); getLogger().info( "Ran Shutdown Phase for " + name ); } } 1.1 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/StartupPhase.java Index: StartupPhase.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.phoenix.engine.phases; import org.apache.avalon.AbstractLoggable; import org.apache.avalon.ComponentManager; import org.apache.avalon.ComponentManagerException; import org.apache.avalon.Composer; import org.apache.avalon.Context; import org.apache.avalon.Contextualizable; import org.apache.avalon.Initializable; import org.apache.avalon.Loggable; import org.apache.avalon.Startable; import org.apache.avalon.atlantis.ApplicationException; import org.apache.avalon.configuration.Configurable; import org.apache.avalon.configuration.Configuration; import org.apache.avalon.util.thread.ThreadManager; import org.apache.avalon.util.thread.ThreadContext; import org.apache.phoenix.engine.blocks.BlockEntry; import org.apache.phoenix.engine.facilities.ComponentBuilder; import org.apache.phoenix.engine.facilities.ComponentManagerBuilder; import org.apache.phoenix.engine.facilities.ConfigurationRepository; import org.apache.phoenix.engine.facilities.ContextBuilder; import org.apache.phoenix.engine.facilities.LoggerBuilder; /** * * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public class StartupPhase extends AbstractLoggable implements Phase, Composer { private ClassLoader m_classLoader; private ComponentBuilder m_componentBuilder; private LoggerBuilder m_loggerBuilder; private ContextBuilder m_contextBuilder; private ComponentManagerBuilder m_componentManagerBuilder; private ConfigurationRepository m_repository; private ThreadManager m_threadManager; public void compose( final ComponentManager componentManager ) throws ComponentManagerException { m_classLoader = (ClassLoader)componentManager.lookup( "java.lang.ClassLoader" ); m_threadManager = (ThreadManager)componentManager. lookup( "org.apache.avalon.util.thread.ThreadManager" ); m_componentBuilder = (ComponentBuilder)componentManager. lookup( "org.apache.phoenix.engine.facilities.ComponentBuilder" ); m_loggerBuilder = (LoggerBuilder)componentManager. lookup( "org.apache.phoenix.engine.facilities.LoggerBuilder" ); m_contextBuilder = (ContextBuilder)componentManager. lookup( "org.apache.phoenix.engine.facilities.ContextBuilder" ); m_componentManagerBuilder = (ComponentManagerBuilder)componentManager. lookup( "org.apache.phoenix.engine.facilities.ComponentManagerBuilder" ); m_repository = (ConfigurationRepository)componentManager. lookup( "org.apache.phoenix.engine.facilities.ConfigurationRepository" ); } /** * Retrieve traversal that should be taken. * * @return the Traversal */ public Traversal getTraversal() { return Phase.FORWARD; } /** * This is called when a block is reached whilst walking the tree. * * @param name the name of block * @param entry the BlockEntry * @exception ApplicationException if walking is to be stopped */ public void visitBlock( final String name, final BlockEntry entry ) throws ApplicationException { if( entry.getState() != Phase.BASE && null != entry.getState() ) return; getLogger().info( "Processing Block: " + name ); getLogger().debug( "Processing with classloader " + m_classLoader ); //HACK: Hack-o-mania here - Fix when each Application is //run in a separate thread group Thread.currentThread().setContextClassLoader( m_classLoader ); ThreadContext.setCurrentThreadPool( m_threadManager.getDefaultThreadPool() ); try { //Creation stage getLogger().debug( "Pre-Creation Stage" ); final Object object = m_componentBuilder.createComponent( name, entry ); entry.setInstance( object ); getLogger().debug( "Creation successful." ); //Loggable stage if( object instanceof Loggable ) { getLogger().debug( "Pre-Loggable Stage" ); ((Loggable)object).setLogger( m_loggerBuilder.createLogger( name, entry ) ); getLogger().debug( "Loggable successful." ); } //Contextualize stage if( object instanceof Contextualizable ) { getLogger().debug( "Pre-Contextualize Stage" ); ((Contextualizable)object).contextualize( m_contextBuilder.createContext( name, entry ) ); getLogger().debug( "Contextualize successful." ); } //Composition stage if( object instanceof Composer ) { getLogger().debug( "Pre-Composition Stage" ); final ComponentManager componentManager = m_componentManagerBuilder.createComponentManager( name, entry ); ((Composer)object).compose( componentManager ); getLogger().debug( "Composition successful." ); } //Configuring stage if( object instanceof Configurable ) { getLogger().debug( "Pre-Configure Stage" ); final Configuration configuration = entry.getConfiguration(); ((Configurable)object).configure( configuration ); getLogger().debug( "Configure successful." ); } //Initialize stage if( object instanceof Initializable ) { getLogger().debug( "Pre-Initializable Stage" ); ((Initializable)object).init(); getLogger().debug( "Initializable successful." ); } //Start stage if( object instanceof Startable ) { getLogger().debug( "Pre-Start Stage" ); ((Startable)object).start(); getLogger().debug( "Start successful." ); } entry.setState( Phase.STARTEDUP ); getLogger().info( "Ran Startup Phase for " + name ); } catch( final Exception e ) { throw new ApplicationException( "Failed to load block " + name, e ); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]