OK. I didn't know that. Please go ahead to swap back. Thanks, Raymond ________________________________________________________________ Raymond Feng rf...@apache.org Apache Tuscany PMC member and committer: tuscany.apache.org Co-author of Tuscany SCA In Action book: www.tuscanyinaction.com Personal Web Site: www.enjoyjava.com ________________________________________________________________
On Sep 20, 2011, at 3:40 AM, Simon Laws wrote: > 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