On Tue, Sep 20, 2011 at 3:52 PM, Raymond Feng <enjoyj...@gmail.com> wrote:
> 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
>
>

No problem Raymond. I notice you beat me to it.

Simon


-- 
Apache Tuscany committer: tuscany.apache.org
Co-author of a book about Tuscany and SCA: tuscanyinaction.com

Reply via email to