From b264fae6da998eb032462b7287711d891498cd3e Mon Sep 17 00:00:00 2001 From: rfeng Date: Thu, 16 Jul 2009 06:52:55 +0000 Subject: Refactor the OSGi discovery service into node-implementation-osgi git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@794553 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/sca/node/impl/NodeFactoryImpl.java | 136 ++++++++++----------- .../org/apache/tuscany/sca/node/impl/NodeImpl.java | 27 +++- 2 files changed, 90 insertions(+), 73 deletions(-) (limited to 'java/sca/modules/node-impl/src') diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java index 851f5fbe89..2f933486b1 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java @@ -24,10 +24,13 @@ import static org.apache.tuscany.sca.node.impl.NodeUtil.createURI; import static org.apache.tuscany.sca.node.impl.NodeUtil.openStream; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.security.AccessController; @@ -433,20 +436,6 @@ public class NodeFactoryImpl extends NodeFactory { DefinitionsUtil.aggregate(defs, systemDefinitions); } - /* - // Load the system definitions.xml from all of the loaded extension points - DefinitionsProviderExtensionPoint definitionsProviders = extensionPoints.getExtensionPoint(DefinitionsProviderExtensionPoint.class); - - // aggregate all the definitions into a single definitions model - try { - for (DefinitionsProvider definitionsProvider : definitionsProviders.getDefinitionsProviders()) { - DefinitionsUtil.aggregate(definitionsProvider.getDefinitions(), systemDefinitions); - } - } catch (DefinitionsProviderException e) { - throw new IllegalStateException(e); - } - */ - // create a system contribution to hold the definitions. The contribution // will be extended later with definitions from application contributions systemContribution = contributionFactory.createContribution(); @@ -477,63 +466,12 @@ public class NodeFactoryImpl extends NodeFactory { return new DefaultExtensionPointRegistry(); } - Composite configureNode(NodeConfiguration configuration) throws Exception { - - List contributions = new ArrayList(); - - // Load the specified contributions - for (ContributionConfiguration contrib : configuration.getContributions()) { - URI contributionURI = createURI(contrib.getURI()); - - URI uri = createURI(contrib.getLocation()); - if (uri.getScheme() == null) { - uri = new File(contrib.getLocation()).toURI(); - } - URL contributionURL = uri.toURL(); - - // Load the contribution - logger.log(Level.INFO, "Loading contribution: " + contributionURL); - Contribution contribution = contributionProcessor.read(null, contributionURI, contributionURL); - contributions.add(contribution); - - boolean attached = false; - for (DeploymentComposite dc : contrib.getDeploymentComposites()) { - if (dc.getContent() != null) { - Reader xml = new StringReader(dc.getContent()); - attached = attachDeploymentComposite(contribution, xml, null, attached); - } else if (dc.getLocation() != null) { - URI dcURI = createURI(dc.getLocation()); - if (!dcURI.isAbsolute()) { - Composite composite = null; - // The location is pointing to an artifact within the contribution - for (Artifact a : contribution.getArtifacts()) { - if (dcURI.toString().equals(a.getURI())) { - composite = (Composite)a.getModel(); - if (!attached) { - contribution.getDeployables().clear(); - attached = true; - } - contribution.getDeployables().add(composite); - break; - } - } - if (composite == null) { - // Not found - throw new ServiceRuntimeException("Deployment composite " + dcURI - + " cannot be found within contribution " - + contribution.getLocation()); - } - } else { - URL url = dcURI.toURL(); - InputStream is = openStream(url); - Reader xml = new InputStreamReader(is, "UTF-8"); - attached = attachDeploymentComposite(contribution, xml, url.toString(), attached); - } - } - } - analyzeProblems(); + protected Composite configureNode(NodeConfiguration configuration, List contributions) + throws Exception { + if (contributions == null) { + // Load contributions + contributions = loadContributions(configuration); } - // 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 @@ -613,7 +551,65 @@ public class NodeFactoryImpl extends NodeFactory { analyzeProblems(); return tempComposite; + } + + private List loadContributions(NodeConfiguration configuration) throws MalformedURLException, + ContributionReadException, XMLStreamException, IOException, UnsupportedEncodingException, Exception { + List contributions = new ArrayList(); + + // Load the specified contributions + for (ContributionConfiguration contrib : configuration.getContributions()) { + URI contributionURI = createURI(contrib.getURI()); + + URI uri = createURI(contrib.getLocation()); + if (uri.getScheme() == null) { + uri = new File(contrib.getLocation()).toURI(); + } + URL contributionURL = uri.toURL(); + // Load the contribution + logger.log(Level.INFO, "Loading contribution: " + contributionURL); + Contribution contribution = contributionProcessor.read(null, contributionURI, contributionURL); + contributions.add(contribution); + + boolean attached = false; + for (DeploymentComposite dc : contrib.getDeploymentComposites()) { + if (dc.getContent() != null) { + Reader xml = new StringReader(dc.getContent()); + attached = attachDeploymentComposite(contribution, xml, null, attached); + } else if (dc.getLocation() != null) { + URI dcURI = createURI(dc.getLocation()); + if (!dcURI.isAbsolute()) { + Composite composite = null; + // The location is pointing to an artifact within the contribution + for (Artifact a : contribution.getArtifacts()) { + if (dcURI.toString().equals(a.getURI())) { + composite = (Composite)a.getModel(); + if (!attached) { + contribution.getDeployables().clear(); + attached = true; + } + contribution.getDeployables().add(composite); + break; + } + } + if (composite == null) { + // Not found + throw new ServiceRuntimeException("Deployment composite " + dcURI + + " cannot be found within contribution " + + contribution.getLocation()); + } + } else { + URL url = dcURI.toURL(); + InputStream is = openStream(url); + Reader xml = new InputStreamReader(is, "UTF-8"); + attached = attachDeploymentComposite(contribution, xml, url.toString(), attached); + } + } + } + analyzeProblems(); + } + return contributions; } protected static class NodeKey { diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java index 606c4b8c50..a35f078860 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java @@ -33,6 +33,7 @@ import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.assembly.CompositeService; import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.assembly.Service; +import org.apache.tuscany.sca.contribution.Contribution; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.UtilityExtensionPoint; import org.apache.tuscany.sca.core.assembly.ActivationException; @@ -59,14 +60,32 @@ public class NodeImpl implements Node, Client { private CompositeActivator compositeActivator; private NodeConfiguration configuration; private NodeFactoryImpl manager; - + private List contributions; private NodeManager mbean; + /** + * Create a node from the configuration + * @param manager + * @param configuration + */ public NodeImpl(NodeFactoryImpl manager, NodeConfiguration configuration) { super(); this.configuration = configuration; this.manager = manager; } + + /** + * Create a node from the configuration and loaded contributions + * @param manager + * @param configuration + * @param contributions + */ + public NodeImpl(NodeFactoryImpl manager, NodeConfiguration configuration, List contributions) { + super(); + this.configuration = configuration; + this.manager = manager; + this.contributions = new ArrayList(contributions); + } public String getURI() { return getConfiguration().getURI(); @@ -83,10 +102,12 @@ public class NodeImpl implements Node, Client { this.proxyFactory = manager.proxyFactory; this.compositeActivator = manager.extensionPoints.getExtensionPoint(UtilityExtensionPoint.class).getUtility(CompositeActivator.class, - this); + manager.getNodeKey(configuration)); try { + Composite composite = manager.configureNode(configuration, contributions); + // get the top level composite for this node - compositeActivator.setDomainComposite(manager.configureNode(configuration)); + compositeActivator.setDomainComposite(composite); // Activate the composite compositeActivator.activate(compositeActivator.getDomainComposite()); -- cgit v1.2.3