mcconnell 2002/12/16 20:56:35
Modified: assembly/src/java/org/apache/avalon/assembly/lifecycle
DefaultDeploymentService.java
Log:
Consolidates Composable and Serviceable under a single handler.
Revision Changes Path
1.6 +42 -20
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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultDeploymentService.java 14 Dec 2002 21:04:41 -0000 1.5
+++ DefaultDeploymentService.java 17 Dec 2002 04:56:34 -0000 1.6
@@ -66,6 +66,7 @@
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.assembly.appliance.Appliance;
+import org.apache.avalon.assembly.engine.AssemblyService;
import org.apache.avalon.assembly.lifecycle.logging.LoggingService;
import org.apache.avalon.assembly.lifecycle.logging.DefaultLoggingService;
import org.apache.avalon.assembly.lifecycle.configuration.ConfigurationService;
@@ -101,6 +102,7 @@
private Context m_context;
private ServiceManager m_manager;
+ private AssemblyService m_assembly;
private LoggingService m_logging;
private ConfigurationService m_configuration;
@@ -176,6 +178,8 @@
throw new NullPointerException( "manager" );
}
+ m_assembly = (AssemblyService) manager.lookup(
"urn:assembly:engine.assembly" );
+
final String classloaderkey = "urn:assembly:engine.classloader";
if( !manager.hasService( classloaderkey ) )
{
@@ -208,7 +212,7 @@
m_contextualization = (ContextualizationService) manager.lookup( key );
}
- key = "urn:assembly:lifecycle.assembly";
+ key = "urn:assembly:lifecycle.composition";
if( manager.hasService( key ) )
{
m_composition = (CompositionService) manager.lookup( key );
@@ -290,7 +294,7 @@
//==============================================================
/**
- * Deploy an appliance based ona supplied classloader, logging channel and
+ * Deploy an appliance based on a supplied classloader, logging channel and
* containment context.
* @param classloader the classloader to use
* @param appliance the appliance to deploy
@@ -318,6 +322,25 @@
throw new NullPointerException( "context" );
}
+ //
+ // make sure we are deploying a fully assembled appliance
+ //
+
+ try
+ {
+ m_assembly.assemble( appliance );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Unresolved dependencies in appliance: " + appliance;
+ throw new DeploymentException( error, e );
+ }
+
+ //
+ // commence deployment
+ //
+
Object instance;
try
{
@@ -341,14 +364,7 @@
m_configuration.configure( appliance, instance );
m_parameters.parameterize( appliance, instance );
m_contextualization.contextualize( appliance, instance, context );
- if( instance instanceof Serviceable )
- {
- m_composition.service( appliance, instance );
- }
- else if( instance instanceof Composable )
- {
- m_composition.compose( appliance, instance );
- }
+ m_composition.service( appliance, instance );
m_initialization.initialize( appliance, instance );
m_startup.start( appliance, instance );
@@ -369,15 +385,21 @@
*/
public void decommission( Appliance appliance, Object instance )
{
- try
- {
- m_startup.stop( appliance, instance );
- }
- catch( Throwable e )
- {
- // log a warning
- }
- m_disposal.dispose( appliance, instance );
+ //
+ // make sure all dependent components are decommissioned
+ //
+
+ m_assembly.disassemble( appliance );
+
+ try
+ {
+ m_startup.stop( appliance, instance );
+ }
+ catch( Throwable e )
+ {
+ // log a warning
+ }
+ m_disposal.dispose( appliance, instance );
}
private LoggingService makeLoggingService() throws DeploymentException
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>