mcconnell 2002/12/20 21:17:22
Modified: assembly/src/java/org/apache/avalon/assembly/appliance
Appliance.java DefaultAppliance.java
DependencyGraph.java
assembly/src/java/org/apache/avalon/assembly/engine
Engine.java EngineClassLoader.java
assembly/src/java/org/apache/avalon/assembly/lifecycle
DefaultDeploymentService.java
assembly/src/test/org/apache/avalon/assembly/engine
EngineTestCase.java
Log:
Rationalizing some of the services and getting them into appliance and out of the
core engine.
Revision Changes Path
1.13 +13 -1
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/Appliance.java
Index: Appliance.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/Appliance.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Appliance.java 21 Dec 2002 03:46:46 -0000 1.12
+++ Appliance.java 21 Dec 2002 05:17:22 -0000 1.13
@@ -57,6 +57,7 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.assembly.lifestyle.LifestyleException;
+import org.apache.avalon.assembly.lifecycle.AssemblyException;
import org.apache.avalon.meta.info.DependencyDescriptor;
import org.apache.avalon.meta.info.StageDescriptor;
import org.apache.avalon.meta.model.Profile;
@@ -240,6 +241,17 @@
* @return the set of extension provider appliances.
*/
Appliance[] getExtensionProviders();
+
+ /**
+ * Assemble the appliance.
+ * @exception AssemblyException if an error occurs during appliance assembly
+ */
+ public void assemble() throws AssemblyException;
+
+ /**
+ * Disassemble the appliance.
+ */
+ public void disassemble();
/**
* Creation of a instance of the component type managed by the appliance
1.17 +39 -12
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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- DefaultAppliance.java 21 Dec 2002 03:44:08 -0000 1.16
+++ DefaultAppliance.java 21 Dec 2002 05:17:22 -0000 1.17
@@ -71,9 +71,12 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.assembly.engine.Engine;
+import org.apache.avalon.assembly.engine.EngineClassLoader;
import org.apache.avalon.assembly.lifestyle.LifestyleException;
import org.apache.avalon.assembly.lifestyle.LifestyleService;
import org.apache.avalon.assembly.lifestyle.LifestyleHandler;
+import org.apache.avalon.assembly.lifecycle.AssemblyService;
+import org.apache.avalon.assembly.lifecycle.AssemblyException;
import org.apache.avalon.meta.info.DependencyDescriptor;
import org.apache.avalon.meta.info.Type;
import org.apache.avalon.meta.info.StageDescriptor;
@@ -110,7 +113,12 @@
/**
* The lifestyle service from which the appliance lifestyle handler is
established.
*/
- private Engine m_engine;
+ private EngineClassLoader m_engine;
+
+ /**
+ * The lifestyle service from which the appliance lifestyle handler is
established.
+ */
+ private AssemblyService m_assembly;
/**
* The appliance context.
@@ -169,11 +177,6 @@
private Map m_deployment;
/**
- * The activation policy.
- */
- private boolean m_activation;
-
- /**
* The appliance name.
*/
private String m_name;
@@ -183,7 +186,8 @@
//==============================================================
public DefaultAppliance(
- Engine engine, ApplianceContext context, Context system, Logger logger )
+ EngineClassLoader engine, LifestyleService lifestyle, AssemblyService
assembly,
+ ApplianceContext context, Context system, Logger logger )
throws ApplianceException
{
if( engine == null )
@@ -194,6 +198,14 @@
{
throw new NullPointerException( "context" );
}
+ if( lifestyle == null )
+ {
+ throw new NullPointerException( "lifestyle" );
+ }
+ if( assembly == null )
+ {
+ throw new NullPointerException( "assembly" );
+ }
if( system == null )
{
throw new NullPointerException( "system" );
@@ -203,11 +215,11 @@
throw new NullPointerException( "logger" );
}
+ m_assembly = assembly;
m_context = context;
m_logger = logger;
m_engine = engine;
m_system = system;
- m_activation = context.getActivationPolicy();
try
{
@@ -278,9 +290,7 @@
try
{
- m_handler =
- m_engine.createLifestyleHandler(
- this, system );
+ m_handler = lifestyle.createHandler( this, engine, system );
}
catch( Throwable e )
{
@@ -418,7 +428,7 @@
*/
public boolean getActivationPolicy()
{
- return m_activation;
+ return m_context.getActivationPolicy();
}
/**
@@ -583,6 +593,23 @@
"Lifestyle handler raised a release error in appliance: " + this;
throw new ApplianceRuntimeException( error, e );
}
+ }
+
+ /**
+ * Assemble the appliance.
+ * @exception AssemblyException if an error occurs during appliance assembly
+ */
+ public void assemble() throws AssemblyException
+ {
+ m_assembly.assemble( this );
+ }
+
+ /**
+ * Disassemble the appliance.
+ */
+ public void disassemble()
+ {
+ m_assembly.disassemble( this );
}
public String toString()
1.5 +22 -1
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/DependencyGraph.java
Index: DependencyGraph.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/appliance/DependencyGraph.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DependencyGraph.java 21 Dec 2002 03:28:37 -0000 1.4
+++ DependencyGraph.java 21 Dec 2002 05:17:22 -0000 1.5
@@ -315,6 +315,16 @@
final ArrayList order )
{
//
+ // get the context provider appliance
+ //
+
+ Appliance contextProvider = appliance.getContextProvider();
+ if( contextProvider != null )
+ {
+ visitcomponent( contextProvider, true, done, order );
+ }
+
+ //
// get all of the extensions the provide extension
// support to the subject appliance
//
@@ -393,6 +403,17 @@
{
visitcomponent( other, false, done, order );
}
+ }
+
+ //
+ // check if the 'other' appliance is used by this 'appliance'
+ // as a context provider
+ //
+
+ final Appliance contextProvider = other.getContextProvider();
+ if( ( contextProvider != null ) && contextProvider.equals( appliance ) )
+ {
+ visitcomponent( other, false, done, order );
}
//
1.10 +2 -10
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/Engine.java
Index: Engine.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/Engine.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Engine.java 19 Dec 2002 10:37:26 -0000 1.9
+++ Engine.java 21 Dec 2002 05:17:22 -0000 1.10
@@ -73,16 +73,9 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development
Team</a>
* @version $Revision$ $Date$
*/
-public interface Engine extends AssemblyService
+public interface Engine
{
/**
- * Creation of a new lifestyle handler.
- * @param appliance the appliance that the handler will manage
- * @param context the system context
- */
- LifestyleHandler createLifestyleHandler( Appliance appliance, Context context );
-
- /**
* Dynamic registration of a type and associated profiles with the container.
* @param path the path to the appliance implementation class
* @return the appliance
@@ -106,7 +99,6 @@
* @return the appliance
*/
Appliance resolve( DependencyDescriptor dependency ) throws Exception;
-
/**
* Resolve an appliance capable of supporting a service
1.15 +20 -45
avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/EngineClassLoader.java
Index: EngineClassLoader.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/EngineClassLoader.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- EngineClassLoader.java 21 Dec 2002 03:28:37 -0000 1.14
+++ EngineClassLoader.java 21 Dec 2002 05:17:22 -0000 1.15
@@ -765,28 +765,6 @@
}
//==============================================================
- // AssemblyService
- //==============================================================
-
- /**
- * Assemble the supplied appliance.
- * @param appliance the object to assembly
- */
- public void assemble( Appliance appliance ) throws AssemblyException
- {
- m_assembly.assemble( appliance );
- }
-
- /**
- * Disassemble the supplied appliance.
- * @param appliance the object to disassembly
- */
- public void disassemble( Appliance appliance )
- {
- m_assembly.disassemble( appliance );
- }
-
- //==============================================================
// Engine
//==============================================================
@@ -800,17 +778,6 @@
}
/**
- * Creation of a new lifestyle handler.
- * @param appliance the appliance that the handler will manage
- * @param context the system context
- * @param map supplimentary deployment context
- */
- public LifestyleHandler createLifestyleHandler( Appliance appliance, Context
context )
- {
- return m_lifestyle.createHandler( appliance, this, context );
- }
-
- /**
* Register a type and associated profiles with the container.
* @param path the path to the appliance implementation class
* @return the appliance
@@ -885,7 +852,7 @@
context.setPartitionName( partition );
context.makeReadOnly();
appliance = createAppliance( context, true );
- assemble( appliance );
+ appliance.assemble();
}
}
return appliance;
@@ -938,7 +905,7 @@
context.setPartitionName( partition );
context.makeReadOnly();
appliance = createAppliance( context, true );
- assemble( appliance );
+ appliance.assemble();
}
}
return appliance;
@@ -1010,8 +977,20 @@
try
{
Constructor constructor = clazz.getConstructor(
- new Class[]{ Engine.class, ApplianceContext.class,
Context.class, Logger.class } );
- Object[] args = new Object[]{ this, context, system, logger };
+ new Class[]{
+ EngineClassLoader.class,
+ LifestyleService.class,
+ AssemblyService.class,
+ ApplianceContext.class,
+ Context.class,
+ Logger.class } );
+ Object[] args = new Object[]{
+ this,
+ m_lifestyle,
+ m_assembly,
+ context,
+ system,
+ logger };
return (Appliance) constructor.newInstance( args );
}
catch( NoSuchMethodException nsme )
@@ -1021,6 +1000,8 @@
+ classname
+ "' does not implement a constructor matching the pattern: ( "
+ Engine.class.getName()
+ + ", " + LifestyleService.class.getName()
+ + ", " + AssemblyService.class.getName()
+ ", " + ApplianceContext.class.getName()
+ ", " + Context.class.getName()
+ ", " + Logger.class.getName()
@@ -1043,7 +1024,7 @@
}
else
{
- return new DefaultAppliance( this, context, system, logger );
+ return new DefaultAppliance( this, m_lifestyle, m_assembly, context,
system, logger );
}
}
@@ -1120,11 +1101,6 @@
private DeploymentService bootstrapDeploymentService( Map facilities )
throws ServiceException
{
- if( m_assembly == null )
- {
- throw new IllegalStateException( "assembly" );
- }
-
try
{
DefaultDeploymentService deployment = new DefaultDeploymentService();
@@ -1132,7 +1108,6 @@
MappedServiceManager manager = new MappedServiceManager( facilities );
manager.put("urn:assembly:logging.manager", m_logging );
manager.put("urn:assembly:engine.classloader", this );
- manager.put("urn:assembly:engine.assembly", m_assembly );
deployment.service( manager );
deployment.contextualize( new DefaultContext() );
deployment.initialize();
1.10 +3 -7
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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- DefaultDeploymentService.java 20 Dec 2002 11:54:28 -0000 1.9
+++ DefaultDeploymentService.java 21 Dec 2002 05:17:22 -0000 1.10
@@ -102,8 +102,6 @@
private Context m_context;
private ServiceManager m_manager;
- private AssemblyService m_assembly;
-
private LoggingService m_logging;
private ConfigurationService m_configuration;
private ContextualizationService m_contextualization;
@@ -178,8 +176,6 @@
throw new NullPointerException( "manager" );
}
- m_assembly = (AssemblyService) manager.lookup(
"urn:assembly:engine.assembly" );
-
final String classloaderkey = "urn:assembly:engine.classloader";
if( !manager.hasService( classloaderkey ) )
{
@@ -328,7 +324,7 @@
try
{
- m_assembly.assemble( appliance );
+ appliance.assemble();
}
catch( Throwable e )
{
@@ -403,7 +399,7 @@
if( disassemble )
{
- m_assembly.disassemble( appliance );
+ appliance.disassemble();
}
try
1.10 +1 -1
avalon-sandbox/assembly/src/test/org/apache/avalon/assembly/engine/EngineTestCase.java
Index: EngineTestCase.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/assembly/src/test/org/apache/avalon/assembly/engine/EngineTestCase.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- EngineTestCase.java 21 Dec 2002 03:28:38 -0000 1.9
+++ EngineTestCase.java 21 Dec 2002 05:17:22 -0000 1.10
@@ -215,7 +215,7 @@
DefaultApplianceContext context = new DefaultApplianceContext( profile
);
context.makeReadOnly();
Appliance appliance = m_engine.createAppliance( context, false );
- m_engine.assemble( appliance );
+ appliance.assemble();
assertTrue( appliance.access() != null );
}
catch( Throwable e )
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>