Author: rfeng
Date: Fri May 15 03:41:05 2009
New Revision: 774994
URL: http://svn.apache.org/viewvc?rev=774994&view=rev
Log:
Integrate the NodeConfiguration with NodeImpl
Modified:
tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/DefaultNodeConfigurationFactory.java
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/impl/NodeConfigurationImpl.java
tuscany/java/sca/modules/node-impl/META-INF/MANIFEST.MF
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeUtil.java
Modified:
tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
---
tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java
(original)
+++
tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeModelResolver.java
Fri May 15 03:41:05 2009
@@ -6,15 +6,15 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
- * under the License.
+ * under the License.
*/
package org.apache.tuscany.sca.assembly.xml;
@@ -40,35 +40,36 @@
private Contribution contribution;
private Map<QName, Composite> map = new HashMap<QName, Composite>();
-
+
public CompositeModelResolver(Contribution contribution,
FactoryExtensionPoint modelFactories) {
this.contribution = contribution;
}
public void addModel(Object resolved) {
Composite composite = (Composite)resolved;
+ // FIXME: What if two composites with the same QName are added?
map.put(composite.getName(), composite);
}
-
+
public Object removeModel(Object resolved) {
return map.remove(((Composite)resolved).getName());
}
-
+
public <T> T resolveModel(Class<T> modelClass, T unresolved) {
-
+
// Lookup a definition for the given namespace
QName qname = ((Composite)unresolved).getName();
Composite resolved = (Composite) map.get(qname);
if (resolved != null) {
return modelClass.cast(resolved);
}
-
+
// No definition found, delegate the resolution to the imports
for (Import import_ : this.contribution.getImports()) {
if (import_ instanceof NamespaceImport) {
NamespaceImport namespaceImport = (NamespaceImport)import_;
if
(namespaceImport.getNamespace().equals(qname.getNamespaceURI())) {
-
+
// Delegate the resolution to the import resolver
resolved =
namespaceImport.getModelResolver().resolveModel(Composite.class,
(Composite)unresolved);
if (!resolved.isUnresolved()) {
@@ -79,5 +80,5 @@
}
return (T)unresolved;
}
-
+
}
Modified:
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
---
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
(original)
+++
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
Fri May 15 03:41:05 2009
@@ -225,13 +225,4 @@
* @return The node configuration
*/
public abstract NodeConfiguration loadConfiguration(InputStream xml);
-
- public static void main(String args[]) {
- NodeFactory factory = NodeFactory.newInstance();
- NodeConfiguration nodeConfiguration =
-
factory.createNodeConfiguration().setDomainURI("http://d1").setURI("http://node1")
- .addContribution("http://c1", "file:/a.jar");
- Node node = factory.createNode(nodeConfiguration).start();
-
- }
}
Modified:
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/DefaultNodeConfigurationFactory.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/DefaultNodeConfigurationFactory.java?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
---
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/DefaultNodeConfigurationFactory.java
(original)
+++
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/DefaultNodeConfigurationFactory.java
Fri May 15 03:41:05 2009
@@ -24,5 +24,5 @@
/**
* Default NodeConfigurationFactory
*/
-public class DefaultNodeConfigurationFactory extends
NodeConfigurationFactoryImpl {
+public class DefaultNodeConfigurationFactory extends
NodeConfigurationFactoryImpl implements NodeConfigurationFactory {
}
Modified:
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/impl/NodeConfigurationImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/impl/NodeConfigurationImpl.java?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
---
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/impl/NodeConfigurationImpl.java
(original)
+++
tuscany/java/sca/modules/node-api/src/main/java/org/apache/tuscany/sca/node/configuration/impl/NodeConfigurationImpl.java
Fri May 15 03:41:05 2009
@@ -78,33 +78,40 @@
}
public NodeConfiguration addBinding(QName bindingType, String... baseURIs)
{
- // TODO Auto-generated method stub
- return null;
+ BindingConfiguration binding = new
BindingConfigurationImpl().setBindingType(bindingType);
+ for (String u : baseURIs) {
+ binding.addBaseURI(u);
+ }
+ return addBinding(binding);
}
public NodeConfiguration addBinding(QName bindingType, URI... baseURIs) {
- // TODO Auto-generated method stub
- return null;
+ BindingConfiguration binding = new
BindingConfigurationImpl().setBindingType(bindingType);
+ for (URI u : baseURIs) {
+ binding.addBaseURI(u.toString());
+ }
+ return addBinding(binding);
}
public NodeConfiguration addContribution(String contributionURI, String
location) {
- // TODO Auto-generated method stub
- return null;
+ ContributionConfiguration contribution = new
ContributionConfigurationImpl(contributionURI, location);
+ return addContribution(contribution);
}
public NodeConfiguration addContribution(String contributionURI, URL
location) {
- // TODO Auto-generated method stub
- return null;
+ return addContribution(contributionURI, location.toString());
}
public NodeConfiguration addContribution(URI contributionURI, URL
location) {
- // TODO Auto-generated method stub
- return null;
+ return addContribution(contributionURI.toString(),
location.toString());
}
- public NodeConfiguration addContribution(URL... location) {
- // TODO Auto-generated method stub
- return null;
+ public NodeConfiguration addContribution(URL... locations) {
+ for (URL url : locations) {
+ ContributionConfiguration contribution = new
ContributionConfigurationImpl(url.toString(), url.toString());
+ addContribution(contribution);
+ }
+ return this;
}
public NodeConfiguration addDeploymentComposite(String contributionURI,
InputStream content) {
@@ -131,4 +138,12 @@
throw new IllegalArgumentException("Contribution is not found (uri=" +
uri + ")");
}
+ public String toString() {
+ if (domainURI != null) {
+ return "{" + domainURI + "}" + uri;
+ } else {
+ return uri;
+ }
+ }
+
}
Modified: tuscany/java/sca/modules/node-impl/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl/META-INF/MANIFEST.MF?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
--- tuscany/java/sca/modules/node-impl/META-INF/MANIFEST.MF (original)
+++ tuscany/java/sca/modules/node-impl/META-INF/MANIFEST.MF Fri May 15 03:41:05
2009
@@ -32,6 +32,7 @@
org.apache.tuscany.sca.definitions;version="2.0.0",
org.apache.tuscany.sca.definitions.util;version="2.0.0",
org.apache.tuscany.sca.definitions.xml;version="2.0.0",
+ org.apache.tuscany.sca.extensibility;version="2.0.0",
org.apache.tuscany.sca.monitor;version="2.0.0",
org.apache.tuscany.sca.node;version="2.0.0",
org.apache.tuscany.sca.node.configuration;version="2.0.0",
Modified:
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
---
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
(original)
+++
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
Fri May 15 03:41:05 2009
@@ -19,16 +19,24 @@
package org.apache.tuscany.sca.node.impl;
+import static org.apache.tuscany.sca.node.impl.NodeUtil.openStream;
+
+import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamReader;
+import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
+import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
import org.apache.tuscany.sca.node.configuration.NodeConfiguration;
+import org.apache.tuscany.sca.node.configuration.NodeConfigurationFactory;
import
org.apache.tuscany.sca.node.configuration.xml.NodeConfigurationProcessor;
import org.oasisopen.sca.ServiceRuntimeException;
@@ -43,34 +51,84 @@
@Override
public Node createNode(String configurationURI) {
- return new NodeImpl(configurationURI);
+ try {
+ URL url = new URL(configurationURI);
+ InputStream is = openStream(url);
+ NodeConfiguration configuration = loadConfiguration(is);
+ is.close();
+ return new NodeImpl(configuration);
+ } catch (IOException e) {
+ throw new ServiceRuntimeException(e);
+ }
}
@Override
public Node createNode(String compositeURI, Contribution... contributions)
{
- return new NodeImpl(compositeURI, contributions);
+ NodeConfigurationFactory factory = this;
+ NodeConfiguration configuration = factory.createNodeConfiguration();
+ for (Contribution c : contributions) {
+ configuration.addContribution(c.getURI(), c.getLocation());
+ }
+ if (compositeURI != null && configuration.getContributions().size() >
0) {
+
configuration.getContributions().get(0).addDeploymentComposite(NodeUtil.createURI(compositeURI));
+ }
+ return new NodeImpl(configuration);
}
@Override
public Node createNode(String compositeURI, String compositeContent,
Contribution... contributions) {
- return new NodeImpl(compositeURI, compositeContent, contributions);
+ NodeConfigurationFactory factory = this;
+ NodeConfiguration configuration = factory.createNodeConfiguration();
+ for (Contribution c : contributions) {
+ configuration.addContribution(c.getURI(), c.getLocation());
+ }
+ if (compositeContent != null &&
configuration.getContributions().size() > 0) {
+
configuration.getContributions().get(0).addDeploymentComposite(compositeContent);
+ }
+ return new NodeImpl(configuration);
}
@Override
public Node createNode() {
- return new NodeImpl();
+ String location =
+ ContributionLocationHelper
+
.getContributionLocation(org.apache.tuscany.sca.contribution.Contribution.SCA_CONTRIBUTION_META);
+ if (location == null) {
+ location =
+ ContributionLocationHelper
+
.getContributionLocation(org.apache.tuscany.sca.contribution.Contribution.SCA_CONTRIBUTION_GENERATED_META);
+ }
+ if (location == null) {
+ throw new ServiceRuntimeException("No SCA contributions are found
on the classpath");
+ }
+ return createNode(null, new
Contribution("http://contributions/default", location));
}
@Override
public Node createNode(NodeConfiguration configuration) {
- return null;
+ return new NodeImpl(configuration);
+ }
+
+ /**
+ * @param <T>
+ * @param factory
+ * @return
+ * @throws Exception
+ */
+ private <T> T getFactory(Class<T> factory) throws Exception {
+ ServiceDeclaration sd =
ServiceDiscovery.getInstance().getFirstServiceDeclaration(factory.getName());
+ if (sd != null) {
+ return factory.cast(sd.loadClass().newInstance());
+ } else {
+ return factory.cast(factory.getMethod("newInstance").invoke(null));
+ }
}
@Override
public NodeConfiguration loadConfiguration(InputStream xml) {
try {
- XMLInputFactory inputFactory = XMLInputFactory.newInstance();
- XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
+ XMLInputFactory inputFactory = getFactory(XMLInputFactory.class);
+ XMLOutputFactory outputFactory =
getFactory(XMLOutputFactory.class);
XMLStreamReader reader = inputFactory.createXMLStreamReader(xml);
NodeConfigurationProcessor processor = new
NodeConfigurationProcessor(this, inputFactory, outputFactory);
reader.nextTag();
Modified:
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
---
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
(original)
+++
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
Fri May 15 03:41:05 2009
@@ -21,25 +21,28 @@
import static java.lang.System.currentTimeMillis;
import static org.apache.tuscany.sca.node.impl.NodeUtil.createURI;
+import static org.apache.tuscany.sca.node.impl.NodeUtil.openStream;
-import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
import java.net.URI;
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
@@ -56,11 +59,11 @@
import org.apache.tuscany.sca.contribution.DefaultImport;
import org.apache.tuscany.sca.contribution.Export;
import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import
org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
import
org.apache.tuscany.sca.contribution.processor.ExtendedURLArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
-import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
import
org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
import
org.apache.tuscany.sca.contribution.processor.ValidationSchemaExtensionPoint;
import org.apache.tuscany.sca.contribution.resolver.DefaultImportModelResolver;
@@ -88,8 +91,10 @@
import org.apache.tuscany.sca.monitor.Problem;
import org.apache.tuscany.sca.monitor.Problem.Severity;
import org.apache.tuscany.sca.node.Client;
-import org.apache.tuscany.sca.node.ContributionLocationHelper;
import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.configuration.ContributionConfiguration;
+import org.apache.tuscany.sca.node.configuration.DeploymentComposite;
+import org.apache.tuscany.sca.node.configuration.NodeConfiguration;
import org.apache.tuscany.sca.provider.DefinitionsProvider;
import org.apache.tuscany.sca.provider.DefinitionsProviderException;
import org.apache.tuscany.sca.provider.DefinitionsProviderExtensionPoint;
@@ -117,10 +122,6 @@
// The node configuration name, used for logging
private String configurationName;
- // The composite loaded into this node
- private Composite composite;
- private boolean useDeploymentComposite;
-
private ExtensionPointRegistry extensionPoints;
private Monitor monitor;
private ExtendedURLArtifactProcessor<Contribution> contributionProcessor;
@@ -139,97 +140,15 @@
private WorkScheduler workScheduler;
private Contribution systemContribution;
private Definitions systemDefinitions;
- private URLArtifactProcessor<Composite> compositeDocumentProcessor;
-
- /**
- * Constructs a new SCA node.
- */
- NodeImpl() {
- configurationName = "default";
- logger.log(Level.INFO, "Creating node: " + configurationName);
-
- String root =
ContributionLocationHelper.getContributionLocation("META-INF/sca-contribution.xml");
- if (root == null) {
- throw new ServiceRuntimeException("no
META-INF/sca-contribution.xml found");
- }
+ NodeImpl(NodeConfiguration configuration) {
+ logger.log(Level.INFO, "Creating node: " + configuration.getURI());
try {
// Initialize the runtime
init();
- Map<String, String> contributions = new HashMap<String, String>();
- contributions.put(root, root);
-
// Configure the node
- configureNode(contributions, null, null);
-
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- /**
- * Constructs a new SCA node.
- *
- * @param configurationURI the URI of the node configuration information.
- */
- NodeImpl(String configurationURI) {
- throw new IllegalStateException("not supported");
- }
-
- /**
- * Constructs a new SCA node.
- *
- * @param compositeURI
- * @param nodeContributions
- */
- NodeImpl(String compositeURI, org.apache.tuscany.sca.node.Contribution[]
nodeContributions) {
- configurationName = compositeURI;
- logger.log(Level.INFO, "Creating node: " + configurationName);
-
- try {
- // Initialize the runtime
- init();
-
- // Create contribution models
- Map<String, String> contributions = new HashMap<String, String>();
- for (org.apache.tuscany.sca.node.Contribution c :
nodeContributions) {
- contributions.put(c.getURI(), c.getLocation());
- }
-
- // Configure the node
- configureNode(contributions, compositeURI, null);
-
- } catch (Exception e) {
- throw new ServiceRuntimeException(e);
- }
- }
-
- /**
- * Constructs a new SCA node.
- *
- * @param compositeURI
- * @param compositeContent
- * @param nodeContributions
- */
- NodeImpl(String compositeURI, String compositeContent,
org.apache.tuscany.sca.node.Contribution[] nodeContributions) {
- configurationName = compositeURI;
- logger.log(Level.INFO, "Creating node: " + configurationName);
-
- try {
- // Initialize the runtime
- init();
-
- // Read the composite model
- logger.log(Level.INFO, "Loading composite: " + compositeURI);
-
- Map<String, String> contributions = new HashMap<String, String>();
- for (org.apache.tuscany.sca.node.Contribution c :
nodeContributions) {
- contributions.put(c.getURI(), c.getLocation());
- }
-
- // Configure the node
- configureNode(contributions, compositeURI, compositeContent);
+ configureNode(configuration);
} catch (Exception e) {
throw new ServiceRuntimeException(e);
@@ -298,9 +217,6 @@
URLArtifactProcessorExtensionPoint docProcessorExtensions =
extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
contributionProcessor = (ExtendedURLArtifactProcessor<Contribution>)
docProcessorExtensions.getProcessor(Contribution.class);
- // Create Composite Document processor
- compositeDocumentProcessor =
docProcessorExtensions.getProcessor(Composite.class);
-
// Get the model resolvers
modelResolvers =
extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class);
@@ -367,17 +283,16 @@
}
}
- private void configureNode(Map<String, String> contributionLocations,
String defaultCompositeURI, String defaultCompositeContent) throws Exception {
-
+ private void configureNode(NodeConfiguration configuration) throws
Exception {
List<Contribution> contributions = new ArrayList<Contribution>();
// Load the specified contributions
- for (String c : contributionLocations.keySet()) {
- URI contributionURI = NodeUtil.createURI(c);
+ for (ContributionConfiguration contrib :
configuration.getContributions()) {
+ URI contributionURI = createURI(contrib.getURI());
- URI uri = createURI(contributionLocations.get(c));
+ URI uri = createURI(contrib.getLocation());
if (uri.getScheme() == null) {
- uri = new File(contributionLocations.get(c)).toURI();
+ uri = new File(contrib.getLocation()).toURI();
}
URL contributionURL = uri.toURL();
@@ -385,6 +300,42 @@
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();
}
@@ -439,78 +390,29 @@
}
}
- composite = getDefaultComposite(contributions, defaultCompositeURI,
defaultCompositeContent);
-
- // Find the composite in the given contributions
- boolean found = false;
- if (!useDeploymentComposite) {
- Artifact compositeFile = contributionFactory.createArtifact();
- compositeFile.setUnresolved(true);
- compositeFile.setURI(composite.getURI());
- for (Contribution contribution : contributions) {
- ModelResolver resolver = contribution.getModelResolver();
-
- Artifact resolvedArtifact =
resolver.resolveModel(Artifact.class, compositeFile);
- if (!resolvedArtifact.isUnresolved() &&
resolvedArtifact.getModel() instanceof Composite) {
-
- if (!composite.isUnresolved()) {
-
- // The composite content was passed into the node and
read into a composite model,
- // don't use the composite found in the contribution,
use that composite, but just resolve
- // it within the context of the contribution
- compositeProcessor.resolve(composite, resolver);
-
- } else {
-
- // Use the resolved composite we've found in the
contribution
- composite = (Composite)resolvedArtifact.getModel();
- }
- found = true;
- break;
- } // end if
- } // end for
- }
-
- if (!found) {
- if (!useDeploymentComposite) {
- // If the composite was not found, then it must be a separate
composite file outside any of the contributions
- // - a "composite by value" - this requires its URI to be
absolute and pointing at the composite file itself.
- // First read in the composite file to create a composite
model object...
- URI compositeURI = new URI(composite.getURI());
- URL compositeURL = compositeURI.toURL();
- composite = compositeDocumentProcessor.read(compositeURL,
compositeURI, compositeURL);
- if (composite == null) {
- throw new IllegalArgumentException("Composite not found: "
+ compositeURI);
- }
- }
-
- // Resolve the "composite by value" against the FIRST contribution
- Contribution contribution = contributions.get(0);
- ModelResolver resolver = contribution.getModelResolver();
- compositeProcessor.resolve(composite, resolver);
- if (composite.isUnresolved()) {
- throw new IllegalArgumentException("Could not resolve
composite: " + composite.getURI()
- + " in contribution "
- + contribution.getURI());
- }
- } // end if
-
- // Build the composite and wire the components included in it
- compositeBuilder.build(composite, systemDefinitions, monitor);
- analyzeProblems();
-
- // build the endpoint references
- endpointReferenceBuilder.build(composite, systemDefinitions, monitor);
- analyzeProblems();
-
// Create a top level composite to host our composite
// This is temporary to make the activator happy
Composite tempComposite = assemblyFactory.createComposite();
tempComposite.setName(new QName(SCA11_TUSCANY_NS, "_tempComposite"));
tempComposite.setURI(SCA11_TUSCANY_NS);
- // Include the node composite in the top-level composite
- tempComposite.getIncludes().add(composite);
+ for (Contribution contribution : contributions) {
+ for (Composite composite : contribution.getDeployables()) {
+
+ // Build the composite and wire the components included in it
+ compositeBuilder.build(composite, systemDefinitions, monitor);
+ analyzeProblems();
+
+ // build the endpoint references
+ endpointReferenceBuilder.build(composite, systemDefinitions,
monitor);
+ analyzeProblems();
+
+ // Include the node composite in the top-level composite
+ tempComposite.getIncludes().add(composite);
+
+ }
+
+ }
// Set the top level composite on the composite activator as
// logic in callable reference resolution relies on this being
@@ -519,6 +421,41 @@
}
+ private boolean attachDeploymentComposite(Contribution contribution,
Reader xml, String location, boolean attached)
+ throws XMLStreamException, ContributionReadException {
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(xml);
+ reader.nextTag();
+
+ // Read the composite model
+ Composite composite = (Composite)compositeProcessor.read(reader);
+ reader.close();
+
+ // Create an artifact for the deployment composite
+ Artifact artifact = contributionFactory.createArtifact();
+ String uri = composite.getName().getLocalPart() + ".composite";
+ artifact.setURI(uri);
+ // Set the location to avoid NPE
+ if (location == null) {
+ location = uri;
+ }
+ artifact.setLocation(location);
+ artifact.setModel(composite);
+ artifact.setUnresolved(false);
+ // Add it to the contribution
+ contribution.getArtifacts().add(artifact);
+
+ // Replace the deployable composites with the deployment composites
+ // Clear the deployable composites if it's the first deployment
composite
+ if (!attached) {
+ contribution.getDeployables().clear();
+ attached = true;
+ }
+ contribution.getDeployables().add(composite);
+ // REVIEW: Is it needed?
+ contribution.getModelResolver().addModel(composite);
+ return attached;
+ }
+
private void buildDependencies(Contribution contribution,
List<Contribution> contributions, Monitor monitor) {
contribution.getDependencies().clear();
@@ -603,11 +540,13 @@
try {
- // Activate the composite
- compositeActivator.activate(composite);
+ for (Composite composite :
compositeActivator.getDomainComposite().getIncludes()) {
+ // Activate the composite
+ compositeActivator.activate(composite);
- // Start the composite
- compositeActivator.start(composite);
+ // Start the composite
+ compositeActivator.start(composite);
+ }
SCAClientImpl.addDomain(getDomainName(), this);
@@ -625,12 +564,17 @@
try {
SCAClientImpl.removeDomain(getDomainName());
+ List<Composite> composites =
compositeActivator.getDomainComposite().getIncludes();
+ for (Composite composite : composites) {
+
+ // Stop the composite
+ compositeActivator.stop(composite);
- // Stop the composite
- compositeActivator.stop(composite);
+ // Deactivate the composite
+ compositeActivator.deactivate(composite);
- // Deactivate the composite
- compositeActivator.deactivate(composite);
+ }
+ composites.clear();
} catch (ActivationException e) {
throw new IllegalStateException(e);
@@ -690,9 +634,11 @@
// Lookup the component
Component component = null;
- for (Component compositeComponent : composite.getComponents()) {
- if (compositeComponent.getName().equals(componentName)) {
- component = compositeComponent;
+ for (Composite composite :
compositeActivator.getDomainComposite().getIncludes()) {
+ for (Component compositeComponent : composite.getComponents()) {
+ if (compositeComponent.getName().equals(componentName)) {
+ component = compositeComponent;
+ }
}
}
@@ -749,46 +695,6 @@
}
}
- /*
- * Sets a default composite by using any deployable one.
- */
- private Composite getDefaultComposite(List<Contribution> contributions,
String defaultCompositeURI, String content) throws Exception {
- Composite composite = assemblyFactory.createComposite();
- composite.setUnresolved(true);
-
- if (content != null && content.length() > 0) {
-
- XMLStreamReader reader = inputFactory.createXMLStreamReader(new
ByteArrayInputStream(content.getBytes("UTF-8")));
- reader.nextTag();
-
- // Read the composite model
- composite = (Composite)compositeProcessor.read(reader);
- if (composite != null && defaultCompositeURI != null) {
- composite.setURI(defaultCompositeURI);
- }
- analyzeProblems();
- useDeploymentComposite = true;
- return composite;
-
- } else if (defaultCompositeURI != null && defaultCompositeURI.length()
> 0) {
- composite.setURI(defaultCompositeURI);
- return composite;
-
- } else {
- // just use the first deployable composte
- for (Contribution contribution : contributions) {
- for (Composite c : contribution.getDeployables()) {
- // Ensure that we pick a composite that has actually been
found in its contribution!!
- if( c.getURI() != null ) {
- composite.setURI(c.getURI());
- return composite;
- }
- }
- }
- }
- throw new ServiceRuntimeException("no deployable composite found");
- }
-
public ExtensionPointRegistry getExtensionPoints() {
return extensionPoints;
}
Modified:
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeUtil.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeUtil.java?rev=774994&r1=774993&r2=774994&view=diff
==============================================================================
---
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeUtil.java
(original)
+++
tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeUtil.java
Fri May 15 03:41:05 2009
@@ -6,20 +6,24 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
- * under the License.
+ * under the License.
*/
package org.apache.tuscany.sca.node.impl;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
import java.util.logging.Logger;
import org.apache.tuscany.sca.contribution.Contribution;
@@ -48,7 +52,7 @@
*/
static URI createURI(String uri) {
URI returnURI = null;
-
+
try {
returnURI = URI.create(uri);
} catch( Exception e) {
@@ -61,4 +65,17 @@
return returnURI;
}
+ /**
+ * Open a URL connection without cache
+ * @param url
+ * @return
+ * @throws IOException
+ */
+ static InputStream openStream(URL url) throws IOException {
+ InputStream is = null;
+ URLConnection connection = url.openConnection();
+ connection.setUseCaches(false);
+ is = connection.getInputStream();
+ return is;
+ }
}