donaldp     01/04/14 22:40:53

  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/phases ShutdownPhase.java
                        StartupPhase.java
  Removed:     src/java/org/apache/phoenix/engine/facilities
                        ComponentBuilder.java DefaultComponentBuilder.java
                        SarBlockFactory.java
  Log:
  Removed need for separate COmponentBuilder facility.
  
  StartupPhase now directly implements functionality.
  
  Revision  Changes    Path
  1.12      +8 -59     
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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DefaultServerApplication.java     2001/04/15 02:32:12     1.11
  +++ DefaultServerApplication.java     2001/04/15 05:40:52     1.12
  @@ -25,7 +25,6 @@
   import org.apache.avalon.camelot.ContainerException;
   import org.apache.avalon.camelot.Entry;
   import org.apache.avalon.camelot.Factory;
  -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.LoggerBuilder;
  @@ -36,7 +35,6 @@
   import org.apache.phoenix.engine.blocks.BlockDAG;
   import org.apache.phoenix.engine.blocks.BlockEntry;
   import org.apache.phoenix.engine.blocks.RoleEntry;
  -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.DefaultLogManager;
  @@ -48,7 +46,6 @@
   import org.apache.phoenix.engine.phases.StartupPhase;
   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
  @@ -62,24 +59,10 @@
       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 BlockDAG.Traversal  m_traversal;
  +        protected BlockVisitor        m_visitor;
       }
   
       protected HashMap                  m_phases           = new HashMap();
  @@ -96,7 +79,6 @@
       protected SarClassLoader           m_classLoader;
   
       //these are the facilities (internal components) of ServerApplication
  -    protected ComponentBuilder         m_componentBuilder;
       protected LoggerBuilder            m_loggerBuilder;
       protected ComponentManagerBuilder  m_componentManagerBuilder;
       protected ConfigurationRepository  m_configurationRepository;
  @@ -140,12 +122,12 @@
       {
           PhaseEntry entry = new PhaseEntry();
           entry.m_visitor = new StartupPhase();
  -        entry.m_traversal = FORWARD;
  +        entry.m_traversal = BlockDAG.FORWARD;
           m_phases.put( "startup", entry );
           
           entry = new PhaseEntry();
           entry.m_visitor = new ShutdownPhase();
  -        entry.m_traversal = REVERSE;
  +        entry.m_traversal = BlockDAG.REVERSE;
           m_phases.put( "shutdown", entry );
       }
   
  @@ -168,7 +150,7 @@
           {
               getLogger().info( "Number of blocks to load: " + m_entries.size() );
               final PhaseEntry entry = (PhaseEntry)m_phases.get( "startup" );
  -            runPhase( entry.m_visitor, entry.m_traversal );
  +            runPhase( entry );
           }
           catch( final ApplicationException ae )
           {
  @@ -188,7 +170,7 @@
           getLogger().info( "Number of blocks to unload: " + m_entries.size() );
   
           final PhaseEntry entry = (PhaseEntry)m_phases.get( "shutdown" );
  -        runPhase( entry.m_visitor, entry.m_traversal );
  +        runPhase( entry );
   
           m_entries.clear();
       }
  @@ -208,7 +190,6 @@
           m_componentManagerBuilder = new DefaultComponentManagerBuilder();
           m_configurationRepository = new DefaultConfigurationRepository();
           m_loggerBuilder = new DefaultLoggerBuilder();
  -        m_componentBuilder = new DefaultComponentBuilder();
   
           m_classLoader = new SarClassLoader();
           m_threadManager = new DefaultThreadManager();
  @@ -236,7 +217,6 @@
   
           setupComponent( m_classLoader );
   
  -        setupComponent( m_componentBuilder );
           setupComponent( m_loggerBuilder );
           setupComponent( m_componentManagerBuilder );
           setupComponent( m_configurationRepository );
  @@ -278,39 +258,10 @@
           }
       }
   
  -    protected void runPhase( final BlockVisitor visitor, final Traversal traversal )
  +    protected void runPhase( final PhaseEntry phase )
           throws Exception
       {
  -        if( FORWARD == traversal )
  -        {
  -            final Iterator entries = list();
  -            while( entries.hasNext() )
  -            {
  -                final String name = (String)entries.next();
  -                m_dag.walkGraph( name, visitor );
  -            }
  -        }
  -        else if( REVERSE == traversal )
  -        {
  -            //TODO:
  -            final Iterator entries = list();
  -            while( entries.hasNext() )
  -            {
  -                final String name = (String)entries.next();
  -                //m_dag.reverseWalkGraph( name, visitor );
  -            }
  -        }
  -        else
  -        {
  -            //TODO: Does this make sense ????
  -            final Iterator entries = list();
  -            while( entries.hasNext() )
  -            {
  -                final String name = (String)entries.next();
  -                final BlockEntry entry = (BlockEntry)getEntry( name );
  -                visitor.visitBlock( name, entry );
  -            }
  -        }
  +        m_dag.walkGraph( phase.m_visitor, phase.m_traversal );
       }
   
       /**
  @@ -389,8 +340,6 @@
           componentManager.put( "NOT_DONE_YET", m_logManager );
           componentManager.put( "org.apache.avalon.util.thread.ThreadManager", 
m_threadManager );
           componentManager.put( "org.apache.phoenix.engine.facilities.LoggerBuilder", 
m_loggerBuilder );
  -        componentManager.put( 
"org.apache.phoenix.engine.facilities.ComponentBuilder",
  -                              m_componentBuilder );
           componentManager.put( 
"org.apache.phoenix.engine.facilities.ComponentManagerBuilder",
                                 m_componentManagerBuilder );
           componentManager.put( 
"org.apache.phoenix.engine.facilities.ConfigurationRepository",
  
  
  
  1.8       +50 -24    
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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- BlockDAG.java     2001/04/14 05:51:38     1.7
  +++ BlockDAG.java     2001/04/15 05:40:52     1.8
  @@ -7,6 +7,7 @@
    */
   package org.apache.phoenix.engine.blocks;
   
  +import java.util.ArrayList;
   import java.util.Iterator;
   import org.apache.avalon.AbstractLoggable;
   import org.apache.avalon.ComponentManager;
  @@ -17,6 +18,7 @@
   import org.apache.phoenix.Block;
   import org.apache.phoenix.metainfo.DependencyDescriptor;
   import org.apache.phoenix.metainfo.ServiceDescriptor;
  +import org.apache.avalon.util.Enum;
   
   /**
    * This is the dependency graph for blocks.
  @@ -27,31 +29,47 @@
       extends AbstractLoggable
       implements Composer
   {
  -    protected Container       m_container;
  +    public final static Traversal  FORWARD     = new Traversal( "FORWARD" );
  +    public final static Traversal  REVERSE     = new Traversal( "REVERSE" );
  +    public final static Traversal  LINEAR      = new Traversal( "LINEAR" );
   
  +    public final static class Traversal
  +        extends Enum
  +    {
  +        private Traversal( final String name )
  +        {
  +            super( name );
  +        }
  +    }
  +
  +    private Container       m_container;
  +
       public void compose( final ComponentManager componentManager )
           throws ComponentManagerException
       {
           m_container = (Container)componentManager.lookup( 
"org.apache.avalon.camelot.Container" );
       }
   
  -    public void walkGraph( final String root, final BlockVisitor visitor )
  +    public void walkGraph( final BlockVisitor visitor, final Traversal traversal )
           throws Exception
       {
  -        visitBlock( root, getBlockEntry( root ), visitor, true );
  -    }
  +        //temporary storage to record those 
  +        //that are already traversed
  +        final ArrayList completed = new ArrayList();
   
  -    public void reverseWalkGraph( final String root, final BlockVisitor visitor )
  -        throws Exception
  -    {
  -        visitBlock( root, getBlockEntry( root ), visitor, false );
  +        final Iterator entries = m_container.list();
  +        while( entries.hasNext() )
  +        {
  +            final String name = (String)entries.next();
  +            final BlockEntry entry = getBlockEntry( name );
  +            visitBlock( name, entry, visitor, traversal, completed );
  +        }
       }
   
  -    protected BlockEntry getBlockEntry( final String name )
  +    private BlockEntry getBlockEntry( final String name )
           throws Exception
       {
           return (BlockEntry)m_container.getEntry( name );
  -        //catch( final ContainerException ce )
       }
   
       /**
  @@ -60,9 +78,10 @@
        * @param name name of BlockEntry
        * @param entry the BlockEntry
        */
  -    protected void visitDependencies( final String name,
  -                                      final BlockEntry entry,
  -                                      final BlockVisitor visitor )
  +    private void visitDependencies( final String name,
  +                                    final BlockEntry entry,
  +                                    final BlockVisitor visitor,
  +                                    final ArrayList completed )
           throws Exception
       {
           getLogger().debug( "Traversing dependencies for " + name );
  @@ -81,7 +100,7 @@
               final RoleEntry roleEntry = entry.getRoleEntry( role );
               final String dependencyName = roleEntry.getName();
               final BlockEntry dependency = getBlockEntry( dependencyName );
  -            visitBlock( dependencyName, dependency, visitor, true );
  +            visitBlock( dependencyName, dependency, visitor, FORWARD, completed );
           }
       }
   
  @@ -92,7 +111,9 @@
        * @param name name of BlockEntry
        * @param entry the BlockEntry
        */
  -    protected void visitReverseDependencies( final String name, final BlockVisitor 
visitor )
  +    private void visitReverseDependencies( final String name, 
  +                                           final BlockVisitor visitor,
  +                                           final ArrayList completed )
           throws Exception
       {
           getLogger().debug( "Traversing reverse dependencies for " + name );
  @@ -114,25 +135,30 @@
                                          " as it depends on " + depends );
   
                       //finally try to traverse block
  -                    visitBlock( blockName, entry, visitor, false );
  +                    visitBlock( blockName, entry, visitor, REVERSE, completed );
                   }
               }
           }
       }
   
  -    protected void visitBlock( final String name,
  -                               final BlockEntry entry,
  -                               final BlockVisitor visitor,
  -                               final boolean forward )
  +    private void visitBlock( final String name,
  +                             final BlockEntry entry,
  +                             final BlockVisitor visitor,
  +                             final Traversal traversal,
  +                             final ArrayList completed )
           throws Exception
       {
  -        if( forward )
  +        //If already visited this block then bug out early
  +        if( completed.contains( name ) ) return;
  +        completed.add( name );
  +
  +        if( FORWARD == traversal )
           {
  -            visitDependencies( name, entry, visitor );
  +            visitDependencies( name, entry, visitor, completed );
           }
  -        else
  +        else if( REVERSE == traversal )
           {
  -            visitReverseDependencies( name, visitor );
  +            visitReverseDependencies( name, visitor, completed );
           }
   
           visitor.visitBlock( name, entry );
  
  
  
  1.5       +0 -11     
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BlockEntry.java   2001/04/15 02:32:13     1.4
  +++ BlockEntry.java   2001/04/15 05:40:52     1.5
  @@ -74,15 +74,4 @@
       {
           m_configuration = configuration;
       }
  -/*
  -    public Block getBlock()
  -    {
  -        return (Block)getInstance();
  -    }
  -
  -    public void setBlock( final Block block )
  -    {
  -        setInstance( block );
  -    }
  -*/
   }
  
  
  
  1.3       +2 -1      
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ShutdownPhase.java        2001/04/15 02:32:13     1.2
  +++ ShutdownPhase.java        2001/04/15 05:40:53     1.3
  @@ -17,6 +17,7 @@
   import org.apache.avalon.util.thread.ThreadContext;
   import org.apache.avalon.util.thread.ThreadManager;
   import org.apache.phoenix.engine.blocks.BlockEntry;
  +import org.apache.phoenix.engine.blocks.BlockVisitor;
   
   /**
    *
  @@ -24,7 +25,7 @@
    */
   public class ShutdownPhase
       extends AbstractLoggable
  -    implements Phase, Composer
  +    implements BlockVisitor, Composer
   {
       private ClassLoader                 m_classLoader;
       private ThreadManager               m_threadManager;
  
  
  
  1.3       +55 -8     
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- StartupPhase.java 2001/04/15 02:32:13     1.2
  +++ StartupPhase.java 2001/04/15 05:40:53     1.3
  @@ -19,20 +19,23 @@
   import org.apache.avalon.Loggable;
   import org.apache.avalon.Startable;
   import org.apache.avalon.atlantis.ApplicationException;
  +import org.apache.avalon.camelot.Factory;
  +import org.apache.avalon.camelot.SimpleFactory;
   import org.apache.avalon.configuration.Configurable;
   import org.apache.avalon.configuration.Configuration;
   import org.apache.avalon.util.thread.ThreadContext;
   import org.apache.avalon.util.thread.ThreadManager;
  +import org.apache.phoenix.Block;
   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;
  -import org.apache.phoenix.engine.facilities.ContextBuilder;
   import org.apache.phoenix.engine.facilities.LoggerBuilder;
  +import org.apache.phoenix.metainfo.BlockUtil;
  +import org.apache.phoenix.metainfo.ServiceDescriptor;
   
   /**
    *
  @@ -43,12 +46,14 @@
       implements BlockVisitor, Contextualizable, Composer
   {
       private ClassLoader                 m_classLoader;
  -    private ComponentBuilder            m_componentBuilder;
       private LoggerBuilder               m_loggerBuilder;
       private ComponentManagerBuilder     m_componentManagerBuilder;
       private ConfigurationRepository     m_repository;
       private ThreadManager               m_threadManager;
   
  +    ///Factory used to build instance of Block
  +    private Factory                  m_factory;
  +
       ///base context used to setup hosted blocks
       private DefaultContext           m_baseBlockContext;
   
  @@ -69,12 +74,11 @@
       {
           m_classLoader = (ClassLoader)componentManager.lookup( 
"java.lang.ClassLoader" );
   
  +        m_factory = new SimpleFactory( m_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" );
   
  @@ -110,7 +114,7 @@
           {
               //Creation stage
               getLogger().debug( "Pre-Creation Stage" );
  -            final Object object = m_componentBuilder.createComponent( name, entry );
  +            final Object object = createBlock( name, entry );
               entry.setInstance( object );
               getLogger().debug( "Creation successful." );
   
  @@ -174,8 +178,51 @@
               throw new ApplicationException( "Failed to load block " + name, e );
           }
       }
  +
  +    private Object createBlock( final String name, final BlockEntry entry )
  +        throws Exception
  +    {
  +        getLogger().info( "Creating block " + name );
  +
  +        final Block block = (Block)m_factory.create( entry.getLocator(), 
Block.class );
  +
  +        getLogger().debug( "Created block" );
  +
  +        verifyBlockServices( name, entry, block );
  +
  +        getLogger().debug( "Verified block services" );
  +
  +        return block;
  +    }
  +
  +    /**
  +     * Verify that all the services that a block
  +     * declares it provides are actually provided.
  +     *
  +     * @param name the name of block
  +     * @param blockEntry the blockEntry
  +     * @param block the Block
  +     * @exception ApplicationException if verification fails
  +     */
  +    private void verifyBlockServices( final String name,
  +                                      final BlockEntry entry,
  +                                      final Block block )
  +        throws ApplicationException
  +    {
  +        final ServiceDescriptor[] services = entry.getBlockInfo().getServices();
  +        for( int i = 0; i < services.length; i++ )
  +        {
  +            if( false == BlockUtil.implementsService( block, services[ i ] ) )
  +            {
  +                final String message = "Block " + name + " fails to implement " +
  +                    "advertised service " + services[ i ];
  +                getLogger().warn( message );
  +                throw new ApplicationException( message );
  +            }
  +        }
  +    }
   
  -    protected Context createContext( final String name )
  +    private Context createContext( final String name )
       {
           final DefaultBlockContext context =
               new DefaultBlockContext( getLogger(), m_threadManager, 
m_baseBlockContext );
  
  
  

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

Reply via email to