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