mcconnell 2004/01/03 10:14:59
Modified: merlin/composition/api/src/java/org/apache/avalon/composition/model
Tag: Ver_3_4 ContextModel.java DependencyModel.java
StageModel.java
merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl
Tag: Ver_3_4 DefaultContextModel.java
DefaultDependencyModel.java
DefaultDeploymentModel.java DefaultStageModel.java
Resources.properties
Log:
Incorporate assembly logic into DeploymentModel.
Revision Changes Path
No revision
No revision
1.1.1.1.2.1 +2 -2
avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/ContextModel.java
Index: ContextModel.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/ContextModel.java,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.2.1
diff -u -r1.1.1.1 -r1.1.1.1.2.1
--- ContextModel.java 24 Sep 2003 09:31:16 -0000 1.1.1.1
+++ ContextModel.java 3 Jan 2004 18:14:58 -0000 1.1.1.1.2.1
@@ -59,7 +59,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
* @version $Revision$ $Date$
*/
-public interface ContextModel
+public interface ContextModel extends Dependent
{
/**
* The default context strategy interface class.
1.1.1.1.2.1 +2 -3
avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/DependencyModel.java
Index: DependencyModel.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/DependencyModel.java,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.2.1
diff -u -r1.1.1.1 -r1.1.1.1.2.1
--- DependencyModel.java 24 Sep 2003 09:31:16 -0000 1.1.1.1
+++ DependencyModel.java 3 Jan 2004 18:14:58 -0000 1.1.1.1.2.1
@@ -60,7 +60,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
* @version $Revision$ $Date$
*/
-public interface DependencyModel
+public interface DependencyModel extends Dependent
{
/**
* Return the dependency descriptor for the model.
@@ -89,5 +89,4 @@
* @return the accepted candidates in ranked order
*/
ServiceDescriptor[] filter( ServiceDescriptor[] candidates );
-
}
1.1.1.1.2.1 +2 -3
avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/StageModel.java
Index: StageModel.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/StageModel.java,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.2.1
diff -u -r1.1.1.1 -r1.1.1.1.2.1
--- StageModel.java 24 Sep 2003 09:31:22 -0000 1.1.1.1
+++ StageModel.java 3 Jan 2004 18:14:58 -0000 1.1.1.1.2.1
@@ -61,7 +61,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
* @version $Revision$ $Date$
*/
-public interface StageModel
+public interface StageModel extends Dependent
{
/**
* Return the stage descriptor for the model.
@@ -91,5 +91,4 @@
* @return the accepted candidates in ranked order
*/
ExtensionDescriptor[] filter( ExtensionDescriptor[] candidates );
-
}
No revision
No revision
1.3.2.1 +5 -5
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContextModel.java
Index: DefaultContextModel.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContextModel.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- DefaultContextModel.java 1 Jan 2004 23:34:45 -0000 1.3
+++ DefaultContextModel.java 3 Jan 2004 18:14:58 -0000 1.3.2.1
@@ -55,6 +55,7 @@
import java.lang.reflect.Constructor;
import org.apache.avalon.composition.model.ContextModel;
+import org.apache.avalon.composition.model.Model;
import org.apache.avalon.composition.model.ModelException;
import org.apache.avalon.composition.model.DeploymentContext;
import org.apache.avalon.excalibur.i18n.ResourceManager;
@@ -77,7 +78,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
* @version $Revision$ $Date$
*/
-public class DefaultContextModel extends AbstractLogEnabled implements ContextModel
+public class DefaultContextModel extends DefaultDependent implements ContextModel
{
//==============================================================
// static
@@ -129,8 +130,7 @@
ContextDirective directive, DeploymentContext context )
throws ModelException
{
- if( null == logger )
- throw new NullPointerException( "logger" );
+ super( logger );
if( null == descriptor )
throw new NullPointerException( "descriptor" );
@@ -265,7 +265,7 @@
}
/**
- * Return the context objct established for the component.
+ * Return the context object established for the component.
*
* @return the context object
*/
1.4.2.1 +13 -12
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDependencyModel.java
Index: DefaultDependencyModel.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDependencyModel.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- DefaultDependencyModel.java 22 Dec 2003 21:46:02 -0000 1.4
+++ DefaultDependencyModel.java 3 Jan 2004 18:14:58 -0000 1.4.2.1
@@ -52,6 +52,7 @@
import java.util.ArrayList;
+import org.apache.avalon.composition.model.Model;
import org.apache.avalon.composition.model.DependencyModel;
import org.apache.avalon.composition.model.ModelException;
import org.apache.avalon.composition.data.DependencyDirective;
@@ -69,18 +70,18 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
* @version $Revision$ $Date$
*/
-public class DefaultDependencyModel extends AbstractLogEnabled implements
DependencyModel
+public class DefaultDependencyModel extends DefaultDependent implements
DependencyModel
{
- //==============================================================
+ //--------------------------------------------------------------
// static
- //==============================================================
+ //--------------------------------------------------------------
private static final Resources REZ =
ResourceManager.getPackageResources( DefaultDependencyModel.class );
- //==============================================================
+ //--------------------------------------------------------------
// immutable state
- //==============================================================
+ //--------------------------------------------------------------
private final DependencyDescriptor m_descriptor;
@@ -92,9 +93,9 @@
private final String m_source;
- //==============================================================
+ //--------------------------------------------------------------
// constructor
- //==============================================================
+ //--------------------------------------------------------------
/**
* Creation of a new dependency model.
@@ -110,10 +111,10 @@
final DependencyDescriptor descriptor, DependencyDirective directive )
throws ModelException
{
- if( logger == null ) throw new NullPointerException( "logger" );
+ super( logger );
+
if( descriptor == null ) throw new NullPointerException( "descriptor" );
- enableLogging( logger );
m_descriptor = descriptor;
m_directive = directive;
m_partition = partition;
@@ -146,9 +147,9 @@
}
}
- //==============================================================
+ //--------------------------------------------------------------
// DependencyModel
- //==============================================================
+ //--------------------------------------------------------------
/**
* Return the dependency descriptor.
1.9.2.2 +177 -3
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDeploymentModel.java
Index: DefaultDeploymentModel.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDeploymentModel.java,v
retrieving revision 1.9.2.1
retrieving revision 1.9.2.2
diff -u -r1.9.2.1 -r1.9.2.2
--- DefaultDeploymentModel.java 3 Jan 2004 15:38:50 -0000 1.9.2.1
+++ DefaultDeploymentModel.java 3 Jan 2004 18:14:58 -0000 1.9.2.2
@@ -60,6 +60,7 @@
import org.apache.avalon.composition.model.DeploymentModel;
import org.apache.avalon.composition.model.DeploymentContext;
import org.apache.avalon.composition.model.Model;
+import org.apache.avalon.composition.model.ModelRepository;
import org.apache.avalon.composition.model.ModelException;
import org.apache.avalon.composition.model.SystemContext;
import org.apache.avalon.composition.model.StageModel;
@@ -279,6 +280,134 @@
return;
}
+ if( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "assembly phase" );
+ }
+
+ ModelRepository repository =
+ m_context.getContainmentContext().getModelRepository();
+
+ //
+ // check if we need a contextualization handler
+ //
+
+ if( getContextModel() != null )
+ {
+ Class clazz = getContextModel().getStrategyClass();
+ if( !clazz.getName().equals(
ContextModel.DEFAULT_STRATEGY_CLASSNAME ) )
+ {
+ //
+ // we need to load a deployment phase context strategy handler
+ // using the strategy interface as the extension handler key
+ //
+
+ StageDescriptor stage =
+ new StageDescriptor( clazz.getName() );
+ Model provider = repository.getModel( stage );
+ if( null == provider )
+ {
+ final String error =
+ REZ.getString(
+ "assembly.context.error",
+ getQualifiedName(),
+ clazz.getName() );
+ throw new AssemblyException( error );
+ }
+ else
+ {
+ getContextModel().setProvider( provider );
+ }
+
+ /*
+ #
+ # TO DO = verify that the stage is a context handler
+ #
+
+ Class handler = m_contextProvider.getDeploymentClass();
+
+ if( !ContextualizationHandler.class.isAssignableFrom( handler )
)
+ {
+ final String error =
+ REZ.getString(
+ "assembly.context-strategy.bad-class.error",
+ handler.getName() );
+ throw new AssemblyException( error );
+ }
+ */
+
+ if( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "assigning context provider: " + provider );
+ }
+ }
+ }
+
+ //
+ // get the dependency models for the type and resolve providers
+ //
+
+ DependencyModel[] dependencies = getDependencyModels();
+ for( int i=0; i<dependencies.length; i++ )
+ {
+ DependencyModel dependency = dependencies[i];
+ final String key = dependency.getDependency().getKey();
+ final Model model =
+ repository.getModel( dependency.getDependency() );
+ if( null == model )
+ {
+ final String error =
+ REZ.getString(
+ "assembly.dependency.error",
+ getQualifiedName(), key );
+ throw new AssemblyException( error );
+ }
+ else
+ {
+ dependency.setProvider( model );
+ if( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "assigning service provider for key ("
+ + key + "): "
+ + model );
+ }
+ }
+ }
+
+ //
+ // get the stage models for the type and resolve providers
+ //
+
+ StageModel[] stages = getStageModels();
+ for( int i=0; i<stages.length; i++ )
+ {
+ StageModel stage = stages[i];
+ final String key = stage.getStage().getKey();
+ final Model model =
+ repository.getModel( stage.getStage() );
+ if( null == model )
+ {
+ final String error =
+ REZ.getString(
+ "assembly.stage.error",
+ getQualifiedName(), key );
+ throw new AssemblyException( error );
+ }
+ else
+ {
+ stage.setProvider( model );
+ if( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug(
+ "assigning stage provider ("
+ + key + "): "
+ + model );
+ }
+ }
+ }
+
m_assembly.setEnabled( true );
}
}
@@ -295,6 +424,27 @@
return;
}
+ getLogger().debug( "dissassembly phase" );
+
+ StageModel[] stages = getStageModels();
+ for( int i=0; i<stages.length; i++ )
+ {
+ StageModel stage = stages[i];
+ stage.clearProvider();
+ }
+
+ DependencyModel[] dependencies = getDependencyModels();
+ for( int i=0; i<dependencies.length; i++ )
+ {
+ DependencyModel dependency = dependencies[i];
+ dependency.clearProvider();
+ }
+
+ if( null != getContextModel() )
+ {
+ getContextModel().clearProvider();
+ }
+
m_assembly.setEnabled( false );
}
}
@@ -313,7 +463,31 @@
throw new IllegalStateException( error );
}
- return new Model[0];
+ final ArrayList list = new ArrayList();
+ if( null != getContextModel() )
+ {
+ Model provider = getContextModel().getProvider();
+ if( provider != null )
+ {
+ list.add( provider );
+ }
+ }
+
+ StageModel[] stages = getStageModels();
+ for( int i=0; i<stages.length; i++ )
+ {
+ StageModel stage = stages[i];
+ list.add( stage.getProvider() );
+ }
+
+ DependencyModel[] dependencies = getDependencyModels();
+ for( int i=0; i<dependencies.length; i++ )
+ {
+ DependencyModel dependency = dependencies[i];
+ list.add( dependency.getProvider() );
+ }
+
+ return (Model[]) list.toArray( new Model[0] );
}
//--------------------------------------------------------------
@@ -330,7 +504,6 @@
return m_context.getType().getServices();
}
-
/**
* Return TRUE is this model is capable of supporting a supplied
* depedendency.
@@ -690,6 +863,7 @@
{
return m_contextModel;
}
+
/**
* Return the dependency models for this component type.
1.2.2.1 +5 -4
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultStageModel.java
Index: DefaultStageModel.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultStageModel.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- DefaultStageModel.java 28 Oct 2003 20:21:00 -0000 1.2
+++ DefaultStageModel.java 3 Jan 2004 18:14:58 -0000 1.2.2.1
@@ -52,6 +52,7 @@
import java.util.ArrayList;
+import org.apache.avalon.composition.model.Model;
import org.apache.avalon.composition.model.StageModel;
import org.apache.avalon.composition.model.ModelException;
import org.apache.avalon.composition.data.StageDirective;
@@ -69,7 +70,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
* @version $Revision$ $Date$
*/
-public class DefaultStageModel extends AbstractLogEnabled implements StageModel
+public class DefaultStageModel extends DefaultDependent implements StageModel
{
//==============================================================
// static
@@ -105,10 +106,10 @@
final StageDescriptor descriptor, StageDirective directive )
throws ModelException
{
- if( logger == null ) throw new NullPointerException( "logger" );
+ super( logger );
+
if( descriptor == null ) throw new NullPointerException( "descriptor" );
- enableLogging( logger );
m_descriptor = descriptor;
m_directive = directive;
1.2.2.1 +12 -1
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/Resources.properties
Index: Resources.properties
===================================================================
RCS file:
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/Resources.properties,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- Resources.properties 7 Oct 2003 17:41:36 -0000 1.2
+++ Resources.properties 3 Jan 2004 18:14:58 -0000 1.2.2.1
@@ -40,6 +40,16 @@
deployment.context.internal.error=The context key [{0}] was recognized but could
not be fulfilled as no context entry manager has be assigned to handle the request.
deployment.registration.override.error=Illegal attempt to override an existing
model entry [{0}].
+assembly.context.error=Assembly of appliance [{0}] could not be completed due to an
unresolvable custom contextualization stage dependency for the interface [{1}].
+assembly.dependency.error=Assembly of appliance [{0}] could not be completed due to
an unresolvable service dependency for the key [{1}].
+assembly.stage.error=Assembly of appliance [{0}] could not be completed due to an
unresolvable stage dependency for the key [{1}].
+assembly.transitional.error=Illegal attempt to assemble [{0}] while the appliance
is in a state of transition.
+assembly.reassembly.error=Illegal attempt to re-assemble appliance [{0}].
+assembly.dissassembly.transitional.error=Illegal attempt to dissassemble [{0}]
while the appliance is in a state of transition.
+assembly.dissassembly.state.error=Illegal attempt to dissassemble a dissassembled
appliance [{0}].
+assembly.context-strategy.bad-class.error=Context strategy handler class [{0}] does
not implement the org.apache.avalon.activation.lifecycle.ContextualizationHandler
interface defined in the container classloader.
+
+
# DefaultSystemContext
# ====================
system.context.base.not-a-directory.error="Base directory argument is not a
directory: {0}.
@@ -115,4 +125,5 @@
dependency.bad-key.error=The supplied key [{0}] is unknown within the model
[{1}{2}].
dependency.incompatible.error=Cannot process a selection for key [{0}] because an
source directive has been declared.
dependency.invalid-criteria.error=Unknown criteria: [{0}] declared under the
selection criteria referencing the feature: [{1}].
-dependency.path.debug=Assigned source [{0}] for the dependency key [{1}].
\ No newline at end of file
+dependency.path.debug=Assigned source [{0}] for the dependency key [{1}].
+
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]