summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java11
-rw-r--r--sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java73
2 files changed, 84 insertions, 0 deletions
diff --git a/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java b/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java
index 9c5d19816c..dba21e7197 100644
--- a/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java
+++ b/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java
@@ -193,4 +193,15 @@ public interface Deployer extends LifeCycleListener {
* Get the system definitions
*/
Definitions getSystemDefinitions();
+
+ /**
+ * Resolve a contributions dependencies
+ *
+ * @param c
+ * @param allContributions
+ * @param monitor
+ * @throws ContributionResolveException
+ * @throws CompositeBuilderException
+ */
+ void resolve(Contribution c, List<Contribution> dependentContributions, Monitor monitor) throws ContributionResolveException, CompositeBuilderException;
}
diff --git a/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java b/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
index ecf2adfb85..cf94c5a8b7 100644
--- a/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
+++ b/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
@@ -549,6 +549,79 @@ public class DeployerImpl implements Deployer {
return domainComposite;
}
+
+ public void resolve(Contribution c, List<Contribution> dependentContributions, Monitor monitor) throws ContributionResolveException, CompositeBuilderException {
+ init();
+ List<Contribution> contributionList = new ArrayList<Contribution>();
+ contributionList.add(c);
+
+ Contribution systemContribution = cloneSystemContribution(monitor);
+ Definitions systemDefinitions = systemContribution.getArtifacts().get(0).getModel();
+ // Build an aggregated SCA definitions model. Must be done before we try and
+ // resolve any contributions or composites as they may depend on the full
+ // definitions.xml picture
+
+ // get all definitions.xml artifacts from contributions and aggregate
+ // into the system contribution. In turn add a default import into
+ // each contribution so that, for unresolved items, the resolution
+ // processing will look in the system contribution
+ ProcessorContext context = new ProcessorContext(monitor);
+ for (Contribution contribution : contributionList) {
+ monitor.pushContext("Contribution: " + contribution.getURI());
+ try {
+ // aggregate definitions
+ for (Artifact artifact : contribution.getArtifacts()) {
+ if (!"META-INF/definitions.xml".equals(artifact.getURI())) {
+ continue;
+ }
+ Object model = artifact.getModel();
+ if (model instanceof Definitions) {
+ try {
+ monitor.pushContext("Definitions: " + artifact.getLocation());
+ DefinitionsUtil.aggregate((Definitions)model, systemDefinitions, monitor);
+ } finally {
+ monitor.popContext();
+ }
+ }
+ }
+
+ // create a default import and wire it up to the system contribution
+ // model resolver. This is the trick that makes the resolution processing
+ // skip over to the system contribution if resolution is unsuccessful
+ // in the current contribution
+ DefaultImport defaultImport = contributionFactory.createDefaultImport();
+ defaultImport.setModelResolver(systemContribution.getModelResolver());
+ contribution.getImports().add(defaultImport);
+ } finally {
+ monitor.popContext();
+ }
+ }
+
+ ExtensibleModelResolver modelResolver =
+ new ExtensibleModelResolver(new Contributions(contributionList), modelResolvers, modelFactories);
+
+ // now resolve and add the system contribution
+ contributionProcessor.resolve(systemContribution, modelResolver, context);
+ contributionList.add(systemContribution);
+
+ // pre-resolve the contributions
+ contributionsPreresolve(contributionList, modelResolver, context);
+
+ // Build the contribution dependencies
+ Set<Contribution> resolved = new HashSet<Contribution>();
+
+ for (Contribution contribution : contributionList) {
+ buildDependencies(contribution, dependentContributions, monitor);
+
+ // Resolve contributions
+ for (Contribution dependency : contribution.getDependencies()) {
+ if (!resolved.contains(dependency)) {
+ resolved.add(dependency);
+ contributionProcessor.resolve(dependency, modelResolver, context);
+ }
+ }
+ }
+ }
public Artifact loadArtifact(URI uri, URL location, Monitor monitor) throws ContributionReadException {
init();