summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2011-09-19 22:55:37 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2011-09-19 22:55:37 +0000
commit9bd25321d03e2577f115597742f4c2c48ddcd9cc (patch)
tree492da9d9f7466bfe6082b5dc29d1bed57608debd
parenteca8de9ef142245d65c69b97d10167849f9d56dd (diff)
Add the ablity to load the contributions/composite for a given node configuration without starting the node
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1172881 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java1
-rw-r--r--sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java25
-rw-r--r--sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java26
-rw-r--r--sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java19
-rw-r--r--sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java86
5 files changed, 112 insertions, 45 deletions
diff --git a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java
index 2bafdb64b8..b6196b3aa4 100644
--- a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java
+++ b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java
@@ -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;
diff --git a/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java b/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
index 0965f9bc79..0aa01a477d 100644
--- a/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
+++ b/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
@@ -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 extends DefaultNodeConfigurationFactory {
*/
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);
}
diff --git a/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java b/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java
index 80c304b078..6a436e7fa3 100644
--- a/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java
+++ b/sca-java-2.x/trunk/modules/node-api/src/main/java/org/apache/tuscany/sca/node/extensibility/NodeExtension.java
@@ -24,15 +24,39 @@ import org.apache.tuscany.sca.core.ExtensionPointRegistry;
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();
}
diff --git a/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java b/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
index 2d46a8659b..a97f40e943 100644
--- a/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
+++ b/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeFactoryImpl.java
@@ -73,6 +73,7 @@ import org.apache.tuscany.sca.node.configuration.DefaultNodeConfigurationFactory
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 NodeFactory {
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);
+ }
+ }
+
+
}
diff --git a/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java b/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
index aae077b11c..eaffdac602 100644
--- a/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
+++ b/sca-java-2.x/trunk/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
@@ -53,8 +53,8 @@ import org.apache.tuscany.sca.node.extensibility.NodeActivatorExtensionPoint;
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, NodeExtension {
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());
+ // Set up the node context
+ UtilityExtensionPoint utilities = nodeFactory.registry.getExtensionPoint(UtilityExtensionPoint.class);
+ this.compositeActivator = utilities.getUtility(CompositeActivator.class);
- 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());
- }
+ DomainRegistryFactory domainRegistryFactory =
+ ExtensibleDomainRegistryFactory.getInstance(nodeFactory.registry);
+ DomainRegistry domainRegistry =
+ domainRegistryFactory.getEndpointRegistry(configuration.getDomainRegistryURI(),
+ configuration.getDomainURI());
- } finally {
- // Reset the thread context monitor
- nodeFactory.monitorFactory.setContextMonitor(tcm);
- }
+ 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, NodeExtension {
}
+ 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());