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

Reply via email to