donaldp 01/04/14 19:32:14 Modified: src/java/org/apache/phoenix/engine DefaultSarDeployer.java DefaultServerApplication.java src/java/org/apache/phoenix/engine/blocks BlockEntry.java BlockVisitor.java src/java/org/apache/phoenix/engine/facilities DefaultComponentManagerBuilder.java src/java/org/apache/phoenix/engine/phases Phase.java ShutdownPhase.java StartupPhase.java Removed: src/java/org/apache/phoenix/engine/facilities ContextBuilder.java DefaultContextBuilder.java src/java/org/apache/phoenix/engine/phases Traversal.java Log: Rearrange code so that phases obey IOC. Revision Changes Path 1.7 +2 -2 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultSarDeployer.java Index: DefaultSarDeployer.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/DefaultSarDeployer.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DefaultSarDeployer.java 2001/04/12 12:23:58 1.6 +++ DefaultSarDeployer.java 2001/04/15 02:32:12 1.7 @@ -322,8 +322,8 @@ } final RoleEntry[] roles = (RoleEntry[]) roleList.toArray( new RoleEntry[ 0 ] ); - final BlockEntry entry = new BlockEntry( locator, roles ); - + final BlockEntry entry = new BlockEntry( roles ); + entry.setLocator( locator ); entry.setBlockInfo( info ); entry.setConfiguration( block.getChild( "configuration" ) ); 1.11 +43 -22 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.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DefaultServerApplication.java 2001/04/14 05:51:38 1.10 +++ DefaultServerApplication.java 2001/04/15 02:32:12 1.11 @@ -28,7 +28,6 @@ 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; @@ -40,7 +39,6 @@ import org.apache.phoenix.engine.facilities.DefaultComponentBuilder; import org.apache.phoenix.engine.facilities.DefaultComponentManagerBuilder; import org.apache.phoenix.engine.facilities.DefaultConfigurationRepository; -import org.apache.phoenix.engine.facilities.DefaultContextBuilder; import org.apache.phoenix.engine.facilities.DefaultLogManager; import org.apache.phoenix.engine.facilities.DefaultLoggerBuilder; import org.apache.phoenix.engine.facilities.security.DefaultPolicy; @@ -48,8 +46,9 @@ import org.apache.phoenix.engine.facilities.classmanager.SarClassLoader; 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.blocks.BlockVisitor; import org.apache.phoenix.metainfo.DependencyDescriptor; +import org.apache.avalon.util.Enum; /** * This is the basic container of blocks. A server application @@ -63,6 +62,26 @@ extends AbstractContainer implements Application, Configurable, Contextualizable { + + protected final static Traversal FORWARD = new Traversal( "FORWARD" ); + protected final static Traversal REVERSE = new Traversal( "REVERSE" ); + protected final static Traversal LINEAR = new Traversal( "LINEAR" ); + + protected final static class Traversal + extends Enum + { + protected Traversal( final String name ) + { + super( name ); + } + } + + protected final static class PhaseEntry + { + protected Traversal m_traversal; + protected BlockVisitor m_visitor; + } + protected HashMap m_phases = new HashMap(); protected BlockDAG m_dag = new BlockDAG(); @@ -79,7 +98,6 @@ //these are the facilities (internal components) of ServerApplication protected ComponentBuilder m_componentBuilder; protected LoggerBuilder m_loggerBuilder; - protected ContextBuilder m_contextBuilder; protected ComponentManagerBuilder m_componentManagerBuilder; protected ConfigurationRepository m_configurationRepository; @@ -120,8 +138,15 @@ protected void initPhases() throws ApplicationException { - m_phases.put( "startup", new StartupPhase() ); - m_phases.put( "shutdown", new ShutdownPhase() ); + PhaseEntry entry = new PhaseEntry(); + entry.m_visitor = new StartupPhase(); + entry.m_traversal = FORWARD; + m_phases.put( "startup", entry ); + + entry = new PhaseEntry(); + entry.m_visitor = new ShutdownPhase(); + entry.m_traversal = REVERSE; + m_phases.put( "shutdown", entry ); } protected void setupPhases() @@ -130,8 +155,8 @@ final Iterator phases = m_phases.values().iterator(); while( phases.hasNext() ) { - final Phase phase = (Phase)phases.next(); - setupComponent( phase ); + final PhaseEntry entry = (PhaseEntry)phases.next(); + setupComponent( entry.m_visitor ); } } @@ -142,8 +167,8 @@ try { getLogger().info( "Number of blocks to load: " + m_entries.size() ); - final Phase phase = (Phase)m_phases.get( "startup" ); - runPhase( phase ); + final PhaseEntry entry = (PhaseEntry)m_phases.get( "startup" ); + runPhase( entry.m_visitor, entry.m_traversal ); } catch( final ApplicationException ae ) { @@ -162,8 +187,8 @@ { getLogger().info( "Number of blocks to unload: " + m_entries.size() ); - final Phase phase = (Phase)m_phases.get( "shutdown" ); - runPhase( phase ); + final PhaseEntry entry = (PhaseEntry)m_phases.get( "shutdown" ); + runPhase( entry.m_visitor, entry.m_traversal ); m_entries.clear(); } @@ -180,7 +205,6 @@ // possibly including setting up rolling etc m_logManager = new DefaultLogManager(); - m_contextBuilder = new DefaultContextBuilder(); m_componentManagerBuilder = new DefaultComponentManagerBuilder(); m_configurationRepository = new DefaultConfigurationRepository(); m_loggerBuilder = new DefaultLoggerBuilder(); @@ -214,7 +238,6 @@ setupComponent( m_componentBuilder ); setupComponent( m_loggerBuilder ); - setupComponent( m_contextBuilder ); setupComponent( m_componentManagerBuilder ); setupComponent( m_configurationRepository ); @@ -255,27 +278,26 @@ } } - protected void runPhase( final Phase phase ) + protected void runPhase( final BlockVisitor visitor, final Traversal traversal ) throws Exception { - - if( Phase.FORWARD == phase.getTraversal() ) + if( FORWARD == traversal ) { final Iterator entries = list(); while( entries.hasNext() ) { final String name = (String)entries.next(); - m_dag.walkGraph( name, phase ); + m_dag.walkGraph( name, visitor ); } } - else if( Phase.REVERSE == phase.getTraversal() ) + else if( REVERSE == traversal ) { //TODO: final Iterator entries = list(); while( entries.hasNext() ) { final String name = (String)entries.next(); - //m_dag.reverseWalkGraph( name, phase ); + //m_dag.reverseWalkGraph( name, visitor ); } } else @@ -286,7 +308,7 @@ { final String name = (String)entries.next(); final BlockEntry entry = (BlockEntry)getEntry( name ); - phase.visitBlock( name, entry ); + visitor.visitBlock( name, entry ); } } } @@ -366,7 +388,6 @@ 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.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 ); 1.4 +3 -9 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.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- BlockEntry.java 2001/04/14 05:51:38 1.3 +++ BlockEntry.java 2001/04/15 02:32:13 1.4 @@ -21,23 +21,16 @@ public class BlockEntry extends Entry { - protected final Locator m_locator; protected final RoleEntry[] m_roleEntrys; //UGLY HACK should be stored in another server Facility (ie ConfigurationRepository) protected Configuration m_configuration; - public BlockEntry( final Locator locator, final RoleEntry[] roleEntrys ) + public BlockEntry( final RoleEntry[] roleEntrys ) { - m_locator = locator; m_roleEntrys = roleEntrys; } - public Locator getLocator() - { - return m_locator; - } - public BlockInfo getBlockInfo() { return (BlockInfo)getInfo(); @@ -81,7 +74,7 @@ { m_configuration = configuration; } - +/* public Block getBlock() { return (Block)getInstance(); @@ -91,4 +84,5 @@ { setInstance( block ); } +*/ } 1.2 +2 -0 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/blocks/BlockVisitor.java Index: BlockVisitor.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/blocks/BlockVisitor.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- BlockVisitor.java 2001/02/24 04:31:00 1.1 +++ BlockVisitor.java 2001/04/15 02:32:13 1.2 @@ -8,6 +8,7 @@ package org.apache.phoenix.engine.blocks; import org.apache.avalon.atlantis.ApplicationException; +import org.apache.avalon.Component; /** * Visitor interface that objects implement to walk the DAG. @@ -15,6 +16,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a> */ public interface BlockVisitor + extends Component { /** * This is called when a block is reached whilst walking the tree. 1.7 +3 -2 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.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DefaultComponentManagerBuilder.java 2001/04/14 05:51:39 1.6 +++ DefaultComponentManagerBuilder.java 2001/04/15 02:32:13 1.7 @@ -11,11 +11,12 @@ import org.apache.avalon.ComponentManagerException; import org.apache.avalon.Composer; import org.apache.avalon.DefaultComponentManager; -import org.apache.avalon.camelot.Container; import org.apache.avalon.atlantis.Facility; +import org.apache.avalon.camelot.Container; import org.apache.avalon.camelot.ContainerException; import org.apache.avalon.camelot.Entry; import org.apache.avalon.component.ComponentException; +import org.apache.phoenix.Block; import org.apache.phoenix.engine.blocks.BlockEntry; import org.apache.phoenix.engine.blocks.RoleEntry; import org.apache.phoenix.metainfo.BlockInfo; @@ -76,7 +77,7 @@ serviceDescriptor ); } - componentManager.put( roleEntrys[ i ].getRole(), dependency.getBlock() ); + componentManager.put( roleEntrys[ i ].getRole(), (Block)dependency.getInstance() ); } catch( final ContainerException ce ) {} } 1.4 +0 -12 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.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Phase.java 2001/04/14 05:51:39 1.3 +++ Phase.java 2001/04/15 02:32:13 1.4 @@ -23,16 +23,4 @@ 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 - */ - Traversal getTraversal(); } 1.2 +0 -10 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/ShutdownPhase.java Index: ShutdownPhase.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/ShutdownPhase.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ShutdownPhase.java 2001/04/14 05:51:40 1.1 +++ ShutdownPhase.java 2001/04/15 02:32:13 1.2 @@ -39,16 +39,6 @@ } /** - * 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 1.2 +33 -18 jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/StartupPhase.java Index: StartupPhase.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/phoenix/engine/phases/StartupPhase.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- StartupPhase.java 2001/04/14 05:51:40 1.1 +++ StartupPhase.java 2001/04/15 02:32:13 1.2 @@ -7,21 +7,27 @@ */ package org.apache.phoenix.engine.phases; +import java.io.File; 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.DefaultContext; 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.avalon.util.thread.ThreadManager; +import org.apache.phoenix.BlockContext; +import org.apache.phoenix.engine.SarContextResources; import org.apache.phoenix.engine.blocks.BlockEntry; +import org.apache.phoenix.engine.blocks.BlockVisitor; +import org.apache.phoenix.engine.blocks.DefaultBlockContext; import org.apache.phoenix.engine.facilities.ComponentBuilder; import org.apache.phoenix.engine.facilities.ComponentManagerBuilder; import org.apache.phoenix.engine.facilities.ConfigurationRepository; @@ -34,16 +40,30 @@ */ public class StartupPhase extends AbstractLoggable - implements Phase, Composer + implements BlockVisitor, Contextualizable, 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; + ///base context used to setup hosted blocks + private DefaultContext m_baseBlockContext; + + public void contextualize( final Context context ) + { + final File baseDirectory = (File)context.get( SarContextResources.APP_HOME_DIR ); + final String name = (String)context.get( SarContextResources.APP_NAME ); + + //base contxt that all block contexts inherit from + final DefaultContext blockContext = new DefaultContext(); + blockContext.put( BlockContext.APP_NAME, name ); + blockContext.put( BlockContext.APP_HOME_DIR, baseDirectory ); + m_baseBlockContext = blockContext; + } + public void compose( final ComponentManager componentManager ) throws ComponentManagerException { @@ -58,9 +78,6 @@ 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" ); @@ -69,16 +86,6 @@ } /** - * 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 @@ -88,7 +95,7 @@ public void visitBlock( final String name, final BlockEntry entry ) throws ApplicationException { - if( entry.getState() != Phase.BASE && + if( entry.getState() != Phase.BASE && null != entry.getState() ) return; getLogger().info( "Processing Block: " + name ); @@ -119,7 +126,7 @@ if( object instanceof Contextualizable ) { getLogger().debug( "Pre-Contextualize Stage" ); - ((Contextualizable)object).contextualize( m_contextBuilder.createContext( name, entry ) ); + ((Contextualizable)object).contextualize( createContext( name ) ); getLogger().debug( "Contextualize successful." ); } @@ -166,5 +173,13 @@ { throw new ApplicationException( "Failed to load block " + name, e ); } + } + + protected Context createContext( final String name ) + { + final DefaultBlockContext context = + new DefaultBlockContext( getLogger(), m_threadManager, m_baseBlockContext ); + context.put( BlockContext.NAME, name ); + return context; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]