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]