On Mon, Sep 19, 2011 at 11:55 PM, <rf...@apache.org> wrote: > Author: rfeng > Date: Mon Sep 19 22:55:37 2011 > New Revision: 1172881 > > URL: http://svn.apache.org/viewvc?rev=1172881&view=rev > Log: > Add the ablity to load the contributions/composite for a given node > configuration without starting the node > > Modified: > > tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java > > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java > > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java > > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java > > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java > > Modified: > tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java > URL: > http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java?rev=1172881&r1=1172880&r2=1172881&view=diff > ============================================================================== > --- > tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java > (original) > +++ > tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java > Mon Sep 19 22:55:37 2011 > @@ -18,7 +18,6 @@ > */ > package org.apache.tuscany.sca.invocation; > > -import java.util.List; > import java.util.Map; > > import org.apache.tuscany.sca.assembly.Endpoint; > > Modified: > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java > URL: > http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java?rev=1172881&r1=1172880&r2=1172881&view=diff > ============================================================================== > --- > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java > (original) > +++ > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java > Mon Sep 19 22:55:37 2011 > @@ -39,9 +39,11 @@ import java.util.List; > import java.util.Map; > import java.util.Properties; > > +import org.apache.tuscany.sca.core.ExtensionPointRegistry; > import > org.apache.tuscany.sca.node.configuration.DefaultNodeConfigurationFactory; > import org.apache.tuscany.sca.node.configuration.NodeConfiguration; > import org.apache.tuscany.sca.node.configuration.NodeConfigurationFactory; > +import org.apache.tuscany.sca.node.extensibility.NodeExtension; > import org.oasisopen.sca.ServiceReference; > import org.oasisopen.sca.ServiceRuntimeException; > > @@ -633,10 +635,27 @@ public abstract class NodeFactory extend > */ > public abstract NodeConfiguration loadConfiguration(InputStream xml, URL > base); > > - public abstract <T> T getExtensionPointRegistry(); > + /** > + * Get the ExtensionPointRegistry > + * @return > + */ > + public abstract ExtensionPointRegistry getExtensionPointRegistry(); > > + /** > + * Initialize the factory > + */ > public abstract void init(); > > - public void setAutoDestroy(boolean b) { > - } > + /** > + * Set auto destroy flag when all nodes are stopped > + * @param b > + */ > + public abstract void setAutoDestroy(boolean b); > + > + /** > + * Create and load the node for the purpose of metadata introspection > + * @param configuration > + * @return The extended Node > + */ > + public abstract NodeExtension loadNode(NodeConfiguration configuration); > } > > Modified: > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java > URL: > http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java?rev=1172881&r1=1172880&r2=1172881&view=diff > ============================================================================== > --- > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java > (original) > +++ > tuscany/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java > Mon Sep 19 22:55:37 2011 > @@ -24,15 +24,39 @@ import org.apache.tuscany.sca.core.Exten > import org.apache.tuscany.sca.node.Node; > import org.apache.tuscany.sca.node.configuration.NodeConfiguration; > > +/** > + * An extended Node interface to provide more metadata for Tuscany extensions > + * @version $Rev $Date$ > + * @tuscany.spi.extension.asclient > + */ > public interface NodeExtension extends Node { > > + /** > + * Get the node URI > + * @return The Tuscany node URI > + */ > String getURI(); > > + /** > + * Get the domain URI > + * @return The SCA domain URI > + */ > String getDomainURI(); > > + /** > + * Get the node configuration > + * @return The node cofiguration > + */ > NodeConfiguration getConfiguration(); > > + /** > + * Get the domain composite > + * @return The domain composite > + */ > Composite getDomainComposite(); > - > + > + /** > + * Get the extension point registry > + */ > ExtensionPointRegistry getExtensionPointRegistry(); > } > > Modified: > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java > URL: > http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java?rev=1172881&r1=1172880&r2=1172881&view=diff > ============================================================================== > --- > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java > (original) > +++ > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java > Mon Sep 19 22:55:37 2011 > @@ -73,6 +73,7 @@ import org.apache.tuscany.sca.node.confi > import org.apache.tuscany.sca.node.configuration.DeploymentComposite; > import org.apache.tuscany.sca.node.configuration.NodeConfiguration; > import org.apache.tuscany.sca.node.configuration.NodeConfigurationFactory; > +import org.apache.tuscany.sca.node.extensibility.NodeExtension; > import org.apache.tuscany.sca.runtime.DomainRegistryFactory; > import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; > import org.apache.tuscany.sca.runtime.RuntimeProperties; > @@ -482,4 +483,22 @@ public class NodeFactoryImpl extends Nod > autoDestroy = b; > } > > + /** > + * Create and load a node > + * @param configuration > + * @return The node > + */ > + public NodeExtension loadNode(NodeConfiguration configuration) { > + Node node = createNode(configuration); > + > + try { > + NodeImpl nodeImpl = ((NodeImpl) node); > + nodeImpl.load(); > + return nodeImpl; > + } catch (Throwable e) { > + throw new ServiceRuntimeException(e); > + } > + } > + > + > } > > Modified: > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java > URL: > http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java?rev=1172881&r1=1172880&r2=1172881&view=diff > ============================================================================== > --- > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java > (original) > +++ > tuscany/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java > Mon Sep 19 22:55:37 2011 > @@ -53,8 +53,8 @@ import org.apache.tuscany.sca.node.exten > import org.apache.tuscany.sca.node.extensibility.NodeExtension; > import org.apache.tuscany.sca.runtime.ActivationException; > import org.apache.tuscany.sca.runtime.CompositeActivator; > -import org.apache.tuscany.sca.runtime.DomainRegistryFactory; > import org.apache.tuscany.sca.runtime.DomainRegistry; > +import org.apache.tuscany.sca.runtime.DomainRegistryFactory; > import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory; > import org.apache.tuscany.sca.runtime.RuntimeComponent; > import org.apache.tuscany.sca.runtime.RuntimeComponentService; > @@ -114,50 +114,29 @@ public class NodeImpl implements Node, N > public Node start() { > logger.log(nodeFactory.quietLogging? Level.FINE : Level.INFO, > "Starting node: " + configuration.getURI() + " domain: " + > configuration.getDomainURI()); > > - nodeFactory.init(); > - nodeFactory.addNode(configuration, this); > - this.proxyFactory = nodeFactory.proxyFactory; > - > try { > - Monitor monitor = nodeFactory.monitorFactory.createMonitor(); > - ProcessorContext context = new ProcessorContext(monitor); > - > - // Set up the thead context monitor > - Monitor tcm = > nodeFactory.monitorFactory.setContextMonitor(monitor); > - try { > - // Use the lack of the contributions collection as an > indicator for when the node > - // is being started for the first time. If it is the first > time do all the work > - // to read the contributions and create the domain composite > - if (contributions == null) { > - contributions = > nodeFactory.loadContributions(configuration, context); > - } > - > - if (domainComposite == null) { > - > - UtilityExtensionPoint utilities = > nodeFactory.registry.getExtensionPoint(UtilityExtensionPoint.class); > - this.compositeActivator = > utilities.getUtility(CompositeActivator.class); > + load(); > > - domainComposite = > nodeFactory.configureNode(configuration, contributions, context); > + nodeFactory.addNode(configuration, this); > + this.proxyFactory = nodeFactory.proxyFactory; > > - DomainRegistryFactory domainRegistryFactory = > ExtensibleDomainRegistryFactory.getInstance(nodeFactory.registry); > - DomainRegistry domainRegistry = > - > domainRegistryFactory.getEndpointRegistry(configuration.getDomainRegistryURI(), > configuration.getDomainURI()); > - > - this.compositeContext = > - new CompositeContext(nodeFactory.registry, > - domainRegistry, > - domainComposite, > - configuration.getDomainURI(), > - configuration.getURI(), > - > nodeFactory.getDeployer().getSystemDefinitions()); > - // Pass down the context attributes > - > compositeContext.getAttributes().putAll(configuration.getAttributes()); > - } > - > - } finally { > - // Reset the thread context monitor > - nodeFactory.monitorFactory.setContextMonitor(tcm); > - } > + // Set up the node context > + UtilityExtensionPoint utilities = > nodeFactory.registry.getExtensionPoint(UtilityExtensionPoint.class); > + this.compositeActivator = > utilities.getUtility(CompositeActivator.class); > + > + DomainRegistryFactory domainRegistryFactory = > + > ExtensibleDomainRegistryFactory.getInstance(nodeFactory.registry); > + DomainRegistry domainRegistry = > + > domainRegistryFactory.getEndpointRegistry(configuration.getDomainRegistryURI(), > + > configuration.getDomainURI()); > + > + this.compositeContext = > + new CompositeContext(nodeFactory.registry, domainRegistry, > domainComposite, > + configuration.getDomainURI(), > configuration.getURI(), nodeFactory > + > .getDeployer().getSystemDefinitions()); > + // Pass down the context attributes > + > compositeContext.getAttributes().putAll(configuration.getAttributes()); > + > > // Activate the composite > compositeActivator.activate(compositeContext, domainComposite); > @@ -197,6 +176,33 @@ public class NodeImpl implements Node, N > > } > > + public void load() throws Throwable { > + nodeFactory.init(); > + > + Monitor monitor = nodeFactory.monitorFactory.createMonitor(); > + ProcessorContext context = new ProcessorContext(monitor); > + > + // Set up the thead context monitor > + Monitor tcm = nodeFactory.monitorFactory.setContextMonitor(monitor); > + try { > + // Use the lack of the contributions collection as an indicator > for when the node > + // is being started for the first time. If it is the first time > do all the work > + // to read the contributions and create the domain composite > + if (contributions == null) { > + contributions = nodeFactory.loadContributions(configuration, > context); > + } > + > + if (domainComposite == null) { > + domainComposite = nodeFactory.configureNode(configuration, > contributions, context); > + } > + > + > + } finally { > + // Reset the thread context monitor > + nodeFactory.monitorFactory.setContextMonitor(tcm); > + } > + } > + > public void stop() { > logger.log(nodeFactory.quietLogging? Level.FINE : Level.INFO, > "Stopping node: " + configuration.getURI()); > > > >
This change effectively swaps round the load and addNode actions. + load(); - domainComposite = nodeFactory.configureNode(configuration, contributions, context); + nodeFactory.addNode(configuration, this); The addNode needs to come first as the builer relies on being able to get at the nodes in order to build the full contribution list for import/export processing. Am re-building with these lines swapped round. Simon -- Apache Tuscany committer: tuscany.apache.org Co-author of a book about Tuscany and SCA: tuscanyinaction.com