You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2007/11/20 15:52:24 UTC

svn commit: r596700 - in /incubator/tuscany/java/sca: itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/ modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/ modules/binding-sca-axis2/src...

Author: slaws
Date: Tue Nov 20 06:52:20 2007
New Revision: 596700

URL: http://svn.apache.org/viewvc?rev=596700&view=rev
Log:
Support the removal of a contribution
Tidy node closedown
Make the domain proxy always available to the sca binding in order to manage cross composite comms within a node when no domain is started

Added:
    incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeMemoryTestCase.java
Modified:
    incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/ConversationWSDLTestCase.java
    incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/NonConversationalCallbackTestCase.java
    incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/RequestScopeTestCase.java
    incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatefulTestCase.java
    incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatelessTestCase.java
    incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatefulTestCase.java
    incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatelessTestCase.java
    incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingProviderFactory.java
    incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAReferenceBindingProvider.java
    incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java
    incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/NodeFactoryImpl.java
    incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCABindingProviderFactory.java
    incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAReferenceBindingProvider.java
    incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAServiceBindingProvider.java
    incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java
    incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java
    incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java
    incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java
    incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java
    incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java
    incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/Calculator.composite
    incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/META-INF/sca-contribution.xml
    incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeB/META-INF/sca-deployables/Calculator.composite
    incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeC/Calculator.composite
    incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeD/META-INF/sca-deployables/Calculator.composite
    incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
    incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactoryImpl.java

Modified: incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/ConversationWSDLTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/ConversationWSDLTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/ConversationWSDLTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/ConversationWSDLTestCase.java Tue Nov 20 06:52:20 2007
@@ -37,12 +37,12 @@
 
 public class ConversationWSDLTestCase {
 
-    private SCADomain domain;
+    private SCANode node; 
     private ConversationalClient conversationalStatelessClientStatefulService;    
 
     @Before
     public void setUp() throws Exception {
-        SCANode node = SCANodeFactory.newInstance().createSCANode(null, null);
+        node = SCANodeFactory.newInstance().createSCANode(null, null);
         node.addContribution("mycontribution",      
                              ConversationWSDLTestCase.class.getResource("/ConversationalWSDL/."));                                                                    
         node.addToDomainLevelComposite(new QName("http://conversations", "ConversationalWSDLITest"));
@@ -56,9 +56,8 @@
 
     @After
     public void tearDown() throws Exception {
-        if (domain != null) {
-            domain.close();
-        }
+        node.getDomain().destroy();
+        conversationalStatelessClientStatefulService = null;
     }
 
     @Test

Modified: incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/NonConversationalCallbackTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/NonConversationalCallbackTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/NonConversationalCallbackTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/NonConversationalCallbackTestCase.java Tue Nov 20 06:52:20 2007
@@ -91,6 +91,14 @@
     @AfterClass
     public static void tearDown() throws Exception {
         domain.destroy();
+        domain = null;
+        conversationalStatelessClientStatelessService = null;
+        conversationalStatelessClientStatefulService = null;
+        conversationalStatefulClientStatelessService = null;
+        conversationalStatefulClientStatefulService = null; 
+        conversationalStatelessClientRequestService = null;
+        conversationalStatefulClientNonConversationalCallbackStatelessService = null;    
+        
     }
     
     private static void resetCallStack() {

Modified: incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/RequestScopeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/RequestScopeTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/RequestScopeTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/RequestScopeTestCase.java Tue Nov 20 06:52:20 2007
@@ -51,7 +51,7 @@
 
     @BeforeClass
     public static void setUp() throws Exception {
-    	try {
+    	try {    
                 SCANode node = SCANodeFactory.newInstance().createSCANode(null, null);
                 node.addContribution("mycontribution",
                                      StatefulStatefulTestCase.class.getResource("/Conversational/."));                                                                     
@@ -91,6 +91,13 @@
     @AfterClass
     public static void tearDown() throws Exception {
         domain.destroy();
+        domain = null;
+        conversationalStatelessClientStatelessService = null;
+        conversationalStatelessClientStatefulService = null;
+        conversationalStatefulClientStatelessService = null;
+        conversationalStatefulClientStatefulService = null; 
+        conversationalStatelessClientRequestService = null;
+        conversationalStatefulClientNonConversationalCallbackStatelessService = null;            
     }
     
     private static void resetCallStack() {

Modified: incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatefulTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatefulTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatefulTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatefulTestCase.java Tue Nov 20 06:52:20 2007
@@ -92,6 +92,13 @@
     @AfterClass
     public static void tearDown() throws Exception {
         domain.destroy();
+        domain = null;
+        conversationalStatelessClientStatelessService = null;
+        conversationalStatelessClientStatefulService = null;
+        conversationalStatefulClientStatelessService = null;
+        conversationalStatefulClientStatefulService = null; 
+        conversationalStatelessClientRequestService = null;
+        conversationalStatefulClientNonConversationalCallbackStatelessService = null;    
     }
     
     private static void resetCallStack() {

Modified: incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatelessTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatelessTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatelessTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatefulStatelessTestCase.java Tue Nov 20 06:52:20 2007
@@ -91,6 +91,13 @@
     @AfterClass
     public static void tearDown() throws Exception {
         domain.destroy();
+        domain = null;
+        conversationalStatelessClientStatelessService = null;
+        conversationalStatelessClientStatefulService = null;
+        conversationalStatefulClientStatelessService = null;
+        conversationalStatefulClientStatefulService = null; 
+        conversationalStatelessClientRequestService = null;
+        conversationalStatefulClientNonConversationalCallbackStatelessService = null;    
     }
     
     private static void resetCallStack() {

Modified: incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatefulTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatefulTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatefulTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatefulTestCase.java Tue Nov 20 06:52:20 2007
@@ -91,6 +91,13 @@
     @AfterClass
     public static void tearDown() throws Exception {
         domain.destroy();
+        domain = null;
+        conversationalStatelessClientStatelessService = null;
+        conversationalStatelessClientStatefulService = null;
+        conversationalStatefulClientStatelessService = null;
+        conversationalStatefulClientStatefulService = null; 
+        conversationalStatelessClientRequestService = null;
+        conversationalStatefulClientNonConversationalCallbackStatelessService = null;    
     }
     
     private static void resetCallStack() {

Modified: incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatelessTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatelessTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatelessTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/conversations-ws/src/test/java/org/apache/tuscany/sca/itest/conversational/StatelessStatelessTestCase.java Tue Nov 20 06:52:20 2007
@@ -91,6 +91,13 @@
     @AfterClass
     public static void tearDown() throws Exception {
         domain.destroy();
+        domain = null;
+        conversationalStatelessClientStatelessService = null;
+        conversationalStatelessClientStatefulService = null;
+        conversationalStatefulClientStatelessService = null;
+        conversationalStatefulClientStatefulService = null; 
+        conversationalStatelessClientRequestService = null;
+        conversationalStatefulClientNonConversationalCallbackStatelessService = null;    
     }
     
     private static void resetCallStack() {

Modified: incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingProviderFactory.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingProviderFactory.java (original)
+++ incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingProviderFactory.java Tue Nov 20 06:52:20 2007
@@ -43,30 +43,26 @@
     
     private MessageFactory messageFactory;
     private ServletHost servletHost;
-    private SCANode node = null;
+    private NodeFactory nodeFactory = null;
 
     public Axis2SCABindingProviderFactory(ExtensionPointRegistry extensionPoints) {
         ServletHostExtensionPoint servletHosts = extensionPoints.getExtensionPoint(ServletHostExtensionPoint.class);
         this.servletHost = servletHosts.getServletHosts().get(0);
         ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
         this.messageFactory = modelFactories.getFactory(MessageFactory.class);
-        NodeFactory nodeFactory = modelFactories.getFactory(NodeFactory.class);
-        
-        if (nodeFactory != null) {
-            this.node = nodeFactory.getNode();
-        }
+        nodeFactory = modelFactories.getFactory(NodeFactory.class);
     }    
 
     public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
                                                                    RuntimeComponentReference reference,
                                                                    DistributedSCABinding binding) {
-        return new Axis2SCAReferenceBindingProvider(node, component, reference, binding, servletHost, messageFactory);
+        return new Axis2SCAReferenceBindingProvider(nodeFactory, component, reference, binding, servletHost, messageFactory);
     }
 
     public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
                                                                RuntimeComponentService service,
                                                                DistributedSCABinding binding) {
-        return new Axis2SCAServiceBindingProvider(node, component, service, binding, servletHost, messageFactory);
+        return new Axis2SCAServiceBindingProvider(nodeFactory, component, service, binding, servletHost, messageFactory);
     }
 
     public Class<DistributedSCABinding> getModelType() {

Modified: incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAReferenceBindingProvider.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAReferenceBindingProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAReferenceBindingProvider.java Tue Nov 20 06:52:20 2007
@@ -35,6 +35,7 @@
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.node.NodeFactory;
 import org.apache.tuscany.sca.node.SCANode;
 import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
 import org.apache.tuscany.sca.runtime.EndpointReference;
@@ -50,7 +51,7 @@
  */
 public class Axis2SCAReferenceBindingProvider implements ReferenceBindingProvider {
 
-	private SCANode node;
+    private NodeFactory nodeFactory;
     private RuntimeComponent component;
     private RuntimeComponentReference reference;
     private SCABinding binding;
@@ -60,13 +61,13 @@
     private EndpointReference serviceEPR = null;
     private EndpointReference callbackEPR = null;
 
-    public Axis2SCAReferenceBindingProvider(SCANode node,
-    		                                RuntimeComponent component,
+    public Axis2SCAReferenceBindingProvider(NodeFactory nodeFactory,
+    		                            RuntimeComponent component,
                                             RuntimeComponentReference reference,
                                             DistributedSCABinding binding,
                                             ServletHost servletHost,
                                             MessageFactory messageFactory) {
-    	this.node = node;
+    	this.nodeFactory = nodeFactory;
         this.component = component;
         this.reference = reference;
         this.binding = binding.getSCABinding();
@@ -111,16 +112,16 @@
      */
     public EndpointReference getServiceEndpoint(){
         
-        if ( serviceEPR == null && node != null ){
+        if ( serviceEPR == null && nodeFactory.getNode() != null ){
             // try to resolve the service endpoint with the registry 
-            SCADomainSPI domainProxy = (SCADomainSPI)node.getDomain();
+            SCADomainSPI domainProxy = (SCADomainSPI)nodeFactory.getNode().getDomain();
             
             if (domainProxy != null){
             
 	            // The binding URI might be null in the case where this reference is completely
 	            // dynamic, for example, in the case of callbacks
 	            if (binding.getURI() != null) {
-	                String serviceUrl = domainProxy.findServiceEndpoint(node.getDomain().getURI(), 
+	                String serviceUrl = domainProxy.findServiceEndpoint(nodeFactory.getNode().getDomain().getURI(), 
 	                                                                         binding.getURI(), 
 	                                                                         SCABinding.class.getName());
 	                

Modified: incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCAServiceBindingProvider.java Tue Nov 20 06:52:20 2007
@@ -40,6 +40,7 @@
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.node.NodeFactory;
 import org.apache.tuscany.sca.node.SCANode;
 import org.apache.tuscany.sca.provider.ServiceBindingProvider;
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
@@ -55,7 +56,7 @@
     
     private final static Logger logger = Logger.getLogger(Axis2SCAServiceBindingProvider.class.getName());
 
-    private SCANode node;
+    private NodeFactory nodeFactory;
     private SCABinding binding;
     private Axis2ServiceProvider axisProvider;
     private WebServiceBinding wsBinding;
@@ -63,13 +64,13 @@
     private boolean started = false;
 
 
-    public Axis2SCAServiceBindingProvider(SCANode node,
+    public Axis2SCAServiceBindingProvider(NodeFactory nodeFactory,
     		                          RuntimeComponent component,
                                           RuntimeComponentService service,
                                           DistributedSCABinding binding,
                                           ServletHost servletHost,
                                           MessageFactory messageFactory) {
-    	this.node = node;
+     	this.nodeFactory = nodeFactory;
         this.binding = binding.getSCABinding();
         wsBinding = (new DefaultWebServiceBindingFactory()).createWebServiceBinding();
         
@@ -94,9 +95,9 @@
                                                    messageFactory);
         
 
-        if (node != null){
+        if ((nodeFactory != null) && (nodeFactory.getNode() != null)){
             
-            SCADomainSPI domainProxy = (SCADomainSPI)node.getDomain();
+            SCADomainSPI domainProxy = (SCADomainSPI)nodeFactory.getNode().getDomain();
             
             if (domainProxy != null) {
 
@@ -135,7 +136,7 @@
                     // The node url will have been set via init parameters in the web app
                     URL nodeUrl;
                     try {
-                        URI tmpURI = new URI(node.getURI());
+                        URI tmpURI = new URI(nodeFactory.getNode().getURI());
                         nodeUrl = tmpURI.toURL();
                     } catch (Exception ex) {
                         throw new IllegalStateException("Node running inside a webapp and node was not created with a valid node url");
@@ -176,16 +177,16 @@
                 }
     		        		
                 try {
-                    domainProxy.registerServiceEndpoint(node.getDomain().getURI(), 
-                                                        node.getURI(), 
+                    domainProxy.registerServiceEndpoint(nodeFactory.getNode().getDomain().getURI(), 
+                                                        nodeFactory.getNode().getURI(), 
                                                         componentServiceName, 
                                                         SCABinding.class.getName(), 
                                                         componentServiceUrlString);
                 } catch(Exception ex) {
                     logger.log(Level.WARNING, 
                                "Unable to  register service: "  +
-                               node.getDomain().getURI() + " " +
-                               node.getURI() + " " +
+                               nodeFactory.getNode().getDomain().getURI() + " " +
+                               nodeFactory.getNode().getURI() + " " +
                                componentServiceName + " " +
                                SCABinding.class.getName() + " " +
                                componentServiceUrlString);

Modified: incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/NodeFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/NodeFactoryImpl.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/NodeFactoryImpl.java (original)
+++ incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/NodeFactoryImpl.java Tue Nov 20 06:52:20 2007
@@ -44,4 +44,8 @@
     	return node;
     }
     
+    public void setNode(SCANode node){
+        this.node = node;
+    }    
+    
 }

Modified: incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCABindingProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCABindingProviderFactory.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCABindingProviderFactory.java (original)
+++ incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCABindingProviderFactory.java Tue Nov 20 06:52:20 2007
@@ -39,30 +39,25 @@
 public class RuntimeSCABindingProviderFactory implements BindingProviderFactory<SCABinding> {
     
     private ExtensionPointRegistry extensionPoints;
-    private SCANode node = null;
+    private NodeFactory nodeFactory;
     
     public RuntimeSCABindingProviderFactory(ExtensionPointRegistry extensionPoints) {
         this.extensionPoints = extensionPoints;
         ModelFactoryExtensionPoint factories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
-        NodeFactory domainFactory = factories.getFactory(NodeFactory.class);
-        
-        if (domainFactory != null) {
-        	node = domainFactory.getNode(); 
-        }
-        
+        nodeFactory = factories.getFactory(NodeFactory.class);        
     } 
     
     public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
                                                                    RuntimeComponentReference reference,
                                                                    SCABinding binding) {
               
-        return  new RuntimeSCAReferenceBindingProvider(extensionPoints, node, component, reference, binding);
+        return  new RuntimeSCAReferenceBindingProvider(extensionPoints, nodeFactory, component, reference, binding);
     }
 
     public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
                                                                RuntimeComponentService service,
                                                                SCABinding binding) {
-        return new RuntimeSCAServiceBindingProvider(extensionPoints, node, component, service, binding);
+        return new RuntimeSCAServiceBindingProvider(extensionPoints, nodeFactory, component, service, binding);
     }
 
     public Class<SCABinding> getModelType() {

Modified: incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAReferenceBindingProvider.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAReferenceBindingProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAReferenceBindingProvider.java Tue Nov 20 06:52:20 2007
@@ -27,6 +27,7 @@
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.node.NodeFactory;
 import org.apache.tuscany.sca.node.SCANode;
 import org.apache.tuscany.sca.provider.BindingProviderFactory;
 import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
@@ -49,7 +50,7 @@
  */
 public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvider {
 
-    private SCANode node;
+    private NodeFactory nodeFactory;
     private RuntimeComponent component;
     private RuntimeComponentReference reference;
     private SCABinding binding;
@@ -59,11 +60,11 @@
     private ReferenceBindingProvider distributedProvider = null;
 
     public RuntimeSCAReferenceBindingProvider(ExtensionPointRegistry extensionPoints,
-    		                                  SCANode domain,
+                                              NodeFactory nodeFactory,
                                               RuntimeComponent component,
                                               RuntimeComponentReference reference,
                                               SCABinding binding) {
-        this.node = domain;
+        this.nodeFactory = nodeFactory;
         this.component = component;
         this.reference = reference;
         this.binding = binding;
@@ -98,11 +99,11 @@
             // reference, e.g. a callback, so check the domain to see if the service is available
             // at this node. The binding uri might be null here if the dynamic reference has been
             // fully configured yet. It won't have all of the information until invocation time
-            if ((node != null) && (binding.getURI() != null)) {
-                SCADomainSPI domainProxy = (SCADomainSPI)node.getDomain();
+            if ( (nodeFactory != null) && (nodeFactory.getNode() != null) && (binding.getURI() != null)) {
+                SCADomainSPI domainProxy = (SCADomainSPI)nodeFactory.getNode().getDomain();
 
                 String serviceUrl =
-                    domainProxy.findServiceEndpoint(node.getDomain().getURI(),
+                    domainProxy.findServiceEndpoint(nodeFactory.getNode().getDomain().getURI(),
                                                          binding.getURI(),
                                                          SCABinding.class.getName());
                 if ((serviceUrl == null) || serviceUrl.equals("")) {
@@ -132,7 +133,7 @@
                         + reference.getName());
                 }
 
-                if (node == null) {
+                if (nodeFactory.getNode() == null) {
                     throw new IllegalStateException("No distributed domain available for component: " + component
                         .getName()
                         + " and reference: "
@@ -189,13 +190,15 @@
             RuntimeWire wire = reference.getRuntimeWire(binding);
             Invoker invoker = getInvoker(wire, operation);
             if (invoker == null) {
-                throw new ServiceUnavailableException("No service invoker is available for reference " + reference
-                    .getName()
+                throw new ServiceUnavailableException("Service not found for component "
+                    + component.getName()
+                    + " reference " 
+                    + reference.getName()
                     + " (bindingURI="
                     + binding.getURI()
                     + " operation="
                     + operation.getName()
-                    + ").");
+                    + "). Ensure that the composite containing the service it loaded and started somewhere in the SCA domain");
             }
             return invoker;
         }

Modified: incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAServiceBindingProvider.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAServiceBindingProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-sca/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAServiceBindingProvider.java Tue Nov 20 06:52:20 2007
@@ -19,10 +19,13 @@
 
 package org.apache.tuscany.sca.binding.sca.impl;
 
+import java.net.URI;
+
 import org.apache.tuscany.sca.assembly.SCABinding;
 import org.apache.tuscany.sca.binding.sca.DistributedSCABinding;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.node.NodeFactory;
 import org.apache.tuscany.sca.node.SCANode;
 import org.apache.tuscany.sca.provider.BindingProviderFactory;
 import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
@@ -40,18 +43,18 @@
  */
 public class RuntimeSCAServiceBindingProvider implements ServiceBindingProvider {
   
-	private SCANode node; 
+    private NodeFactory nodeFactory; 
     private RuntimeComponentService service;
     private BindingProviderFactory<DistributedSCABinding> distributedProviderFactory;
     private ServiceBindingProvider distributedProvider;
     private DistributedSCABinding distributedBinding;
     
     public RuntimeSCAServiceBindingProvider(ExtensionPointRegistry extensionPoints,
-    		                                SCANode node,
+    		                            NodeFactory nodeFactory,
                                             RuntimeComponent component,
                                             RuntimeComponentService service,
                                             SCABinding binding) {
-    	this.node = node;
+    	this.nodeFactory = nodeFactory;
         this.service = service;
         // if there is potentially a wire to this service that crosses the node boundary 
         if (service.getInterfaceContract().getInterface().isRemotable()) {  
@@ -71,7 +74,7 @@
             // - distributed domain in which to look for remote endpoints 
             // - remotable interface on the service
             if (distributedProviderFactory != null) {
-                if (this.node != null) {
+                if ((this.nodeFactory != null) && (this.nodeFactory.getNode() != null)) {
                     if (!service.getInterfaceContract().getInterface().isRemotable()) {
                         throw new IllegalStateException("Reference interface not remoteable for component: "+
                                                         component.getName() +
@@ -131,6 +134,21 @@
         if (distributedProvider != null) {
             distributedProvider.stop();
         }
+        
+        if (distributedBinding != null) {
+            // reset the binding URI to null so that if the composite containing the component
+            // with the service/binding is restarted the binding will have the correct URI set
+            SCABinding scaBinding = distributedBinding.getSCABinding();
+            try {
+                URI tempURI = new URI(scaBinding.getURI());
+                if (!tempURI.isAbsolute()){
+                    scaBinding.setURI(null);
+                }
+            } catch (Exception ex){
+                scaBinding.setURI(null);
+            } 
+        }
+        
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java (original)
+++ incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java Tue Nov 20 06:52:20 2007
@@ -81,6 +81,7 @@
     // management runtime
     protected ReallySmallRuntime domainManagementRuntime;
     protected ContributionService domainManagementContributionService;
+    protected Contribution domainManagementContribution = null;
     protected Composite domainManagementComposite;
     protected DomainManagerNodeImpl domainManagerNode;
           

Modified: incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCADomainProxyImpl.java Tue Nov 20 06:52:20 2007
@@ -133,7 +133,7 @@
         // add the node into the local domain model 
         super.addNode(nodeImpl.getURI(), nodeImpl.getURI());
         
-        // the registration of the node with the node is delayed until
+        // the registration of the node with the domain is delayed until
         // after the runtime has been started
         start();
     }
@@ -144,7 +144,7 @@
         nodeManagerInitService.setNode(nodeImpl);   
         
         if (domainModel.getDomainURL() != null){
-            // add the 
+            // add the node to the domain
         
             try {
                 // create the node manager endpoint
@@ -173,10 +173,7 @@
     }
     
     public void removeNode(SCANode nodeImpl) throws DomainException {
-        
-        // remove this object from the node manager service
-        //nodeManagerInitService.removeNode(nodeImpl);
-        
+                
         // remove the node from the local domain model
         super.removeNode(nodeImpl.getURI());
         
@@ -193,6 +190,9 @@
             }
         }  
         
+        // remove this object from the node manager service
+        nodeManagerInitService.setNode(null);        
+        
         this.nodeImpl = null;
     }  
     
@@ -302,14 +302,13 @@
                            
                 // add node composite to the management domain
                 domainManagementContributionService = domainManagementRuntime.getContributionService();
-                Contribution contribution = null;
-
-                contribution = domainManagementContributionService.contribute("nodedomain", 
-                                                                              contributionURL, 
-                                                                              false);
+                domainManagementContribution = domainManagementContributionService.contribute("nodedomain", 
+                                                                                              contributionURL, 
+                                                                                              false);
                 
                 Composite composite = null;
-                for (DeployedArtifact artifact: contribution.getArtifacts()) {
+                
+                for (DeployedArtifact artifact: domainManagementContribution.getArtifacts()) {
                     if (domainCompositeName.equals(artifact.getURI())) {
                         composite = (Composite)artifact.getModel();
                     }
@@ -384,10 +383,45 @@
         }
     }
     
+    public void stop() throws DomainException {
+        try {
+            Composite composite = domainManagementComposite.getIncludes().get(0);
+            
+            domainManagementRuntime.getCompositeActivator().stop(composite);
+            domainManagementRuntime.getCompositeActivator().deactivate(composite);
+            
+            if (nodeImpl != null){
+                nodeImpl.stop();
+            } else {
+                domainManagementRuntime.stop();   
+            }
+        } catch (Exception ex) {
+            throw new DomainException(ex);
+        }
+    }
+    
     public void destroy() throws DomainException {
         try {
-          // Stop the domain
-          domainManagementRuntime.stop();
+            if (nodeImpl != null){
+                nodeImpl.destroy();
+            } else {
+                Composite composite = domainManagementComposite.getIncludes().get(0);
+                
+                domainManagementRuntime.getCompositeActivator().stop(composite);
+                domainManagementRuntime.getCompositeActivator().deactivate(composite);
+                
+                domainManagementComposite.getIncludes().clear();
+                domainManagementRuntime.getContributionService().remove(domainManagementContribution.getURI());
+                
+                domainManagementRuntime.stop(); 
+                
+                domainManagementRuntime = null;
+                domainManagementComposite = null;
+                
+                domainManagerService = null;
+                nodeManagerInitService = null;
+            }
+ 
         } catch (Exception ex) {
             throw new DomainException(ex);
         }

Modified: incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java Tue Nov 20 06:52:20 2007
@@ -27,6 +27,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -49,6 +50,7 @@
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.contribution.resolver.impl.ModelResolverImpl;
+import org.apache.tuscany.sca.contribution.service.ContributionException;
 import org.apache.tuscany.sca.contribution.service.ContributionService;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.assembly.ActivationException;
@@ -89,11 +91,19 @@
     // the domain that the node belongs to. This object acts as a proxy to the domain
     private SCADomain scaDomain;
     
+    // the started status of the node
+    private boolean nodeStarted = false;
+    
     // collection for managing contributions that have been added to the node 
     private Map<String, Contribution> contributions = new HashMap<String, Contribution>();    
     private Map<QName, Composite> composites = new HashMap<QName, Composite>();
     private Map<String, Composite> compositeFiles = new HashMap<String, Composite>();
-    private List<QName> compositesToStart = new ArrayList<QName>();
+    
+    private QName nodeManagementCompositeName = new QName("http://tuscany.apache.org/xmlns/tuscany/1.0", "node");
+    
+    // Used to pipe node information into the model
+    NodeFactoryImpl nodeFactory;
+    
        
     // methods defined on the implementation only
        
@@ -149,11 +159,7 @@
                ServerSocket socket = new ServerSocket(0);
                nodeURI = "http://" + host + ":" + socket.getLocalPort();
                socket.close();
-            } else {
-                if (!nodeURI.endsWith("/")) {
-                    nodeURI += "/";
-                }
-            }
+            } 
             
             // check whether node uri is an absolute url,  
             try {
@@ -180,15 +186,13 @@
                 }
             }            
             
-            // If a non-null domain name is provided make the node available to the model
+            // make the node available to the model
             // this causes the runtime to start registering binding-sca service endpoints
-            // with the domain so only makes sense if we know we have a domain to talk to
-            if (domainURI != null) {
-                ModelFactoryExtensionPoint factories = nodeRuntime.getExtensionPointRegistry().getExtensionPoint(ModelFactoryExtensionPoint.class);
-                NodeFactoryImpl nodeFactory = new NodeFactoryImpl(this);
-                factories.addFactory(nodeFactory);    
-            }
- 
+            // with the domain proxy
+            ModelFactoryExtensionPoint factories = nodeRuntime.getExtensionPointRegistry().getExtensionPoint(ModelFactoryExtensionPoint.class);
+            nodeFactory = new NodeFactoryImpl(this);
+            factories.addFactory(nodeFactory); 
+            
             // Create an in-memory domain level composite
             AssemblyFactory assemblyFactory = nodeRuntime.getAssemblyFactory();
             nodeComposite = assemblyFactory.createComposite();
@@ -258,20 +262,43 @@
     // API methods 
     
     public void start() throws NodeException {
-        startComposites();
+        if (!nodeStarted){
+            startComposites();
+            nodeStarted = true;
+        }
     }
     
     public void stop() throws NodeException {
-        stopComposites();
+        if (nodeStarted){
+            stopComposites();
+            nodeStarted = false;
+        } 
     }
     
     public void destroy() throws NodeException {
         try {
-            if (compositesToStart.size() != 0) {
-                stopComposites();
-            }
-            removeAllContributions();           
-            nodeRuntime.stop();
+            stop();
+            
+            removeAllContributions(); 
+            
+            ModelFactoryExtensionPoint factories = nodeRuntime.getExtensionPointRegistry().getExtensionPoint(ModelFactoryExtensionPoint.class);
+            factories.removeFactory(nodeFactory); 
+            nodeFactory.setNode(null);
+            
+            ((SCADomainProxyImpl)scaDomain).removeNode(this);  
+            ((SCADomainProxyImpl)scaDomain).destroy();
+            
+            // node runtime is stopped by the domain proxy once it has
+            // removed the management components
+            
+            scaDomain = null;            
+            nodeRuntime = null;
+            contributions = null;
+            composites = null;
+            compositeFiles = null;
+            
+        } catch(NodeException ex) {
+            throw ex;            
         } catch (Exception ex) {
             throw new NodeException(ex);
         }
@@ -318,10 +345,10 @@
                         compositeFiles.put(composite.getURI(), composite);
                     }
                 }
-                
-                // remember all the deployable composites ready to be started
+
+                // place all the deployable composites into the node level composite
                 for (Composite composite : contribution.getDeployables()) {
-                    compositesToStart.add(composite.getName());
+                    nodeComposite.getIncludes().add(composite);
                 }  
                 
                 // add the contribution to the domain. It will generally already be there
@@ -329,8 +356,9 @@
                 ((SCADomainProxyImpl)scaDomain).registerContribution(nodeURI, contributionURI, contributionURL.toExternalForm());                  
                 
             } else {
-                    throw new ActivationException("Contribution " + contributionURL + " not found");
+                    throw new NodeException("Contribution " + contributionURL + " not found");
             }  
+            
         } catch (Exception ex) {
             throw new NodeException(ex);
         }        
@@ -340,9 +368,14 @@
         try {
 
             Contribution contribution = contributions.get(contributionURI);
-            for (Composite composite : contribution.getDeployables()) {
-                    startComposite(composite);
-            }  
+            
+            if (contribution != null){
+                for (Composite composite : contribution.getDeployables()) {
+                        startComposite(composite);
+                }  
+            } else {
+                throw new NodeException("Contribution " + contributionURI + " not added");
+            }
 
         } catch (ActivationException e) {
             throw new NodeException(e);
@@ -350,9 +383,29 @@
             throw new NodeException(e);
         }
     }
+    
+    public void stopContribution(String contributionURI) throws NodeException {
+        try {
+
+            Contribution contribution = contributions.get(contributionURI);
+            
+            if (contribution != null){
+                for (Composite composite : contribution.getDeployables()) {
+                        stopComposite(composite);
+                }  
+            } else {
+                throw new NodeException("Contribution " + contributionURI + " not added");
+            }
+
+        } catch (ActivationException e) {
+            throw new NodeException(e);
+        } 
+    }    
 
     public void removeContribution(String contributionURI) throws NodeException {
         try { 
+            stopContribution(contributionURI);
+            
             Contribution contribution = contributions.get(contributionURI);
             
             // remove the local record of composites associated with this contribution
@@ -361,67 +414,87 @@
                     Composite composite = (Composite)artifact.getModel();
                     composites.remove(composite.getName());
                     compositeFiles.remove(composite.getURI());
-                    compositesToStart.remove(composite.getName());
                 }
             }            
         
-            // remove the contribution from the runtime
+            // remove the contribution from the contribution service
             nodeRuntime.getContributionService().remove(contributionURI);
             
+            // remove all the deployable composites from the node level composite
+            for (Composite composite : contribution.getDeployables()) {
+                nodeComposite.getIncludes().remove(composite);
+            }
+            
             // remove the local record of the contribution
             contributions.remove(contributionURI);
-        } catch (Exception ex) {
+
+        } catch (ContributionException ex) {
             throw new NodeException(ex);
-        }   
+        }  
 
     }
 
     private void removeAllContributions() throws NodeException {
         try {     
-            // Remove all contributions
+            // copy the keys so we don't get a concurrency error
+            List<String> keys = new ArrayList<String>();
+            
             for (String contributionURI : contributions.keySet()){
-                nodeRuntime.getContributionService().remove(contributionURI);
+                keys.add(contributionURI);
             }
             
-            // remove local records
-            contributions.clear();
-            composites.clear();
-            compositeFiles.clear();
-            compositesToStart.clear();
-            
+            // Remove all contributions
+            for (String contributionURI : keys){
+                removeContribution(contributionURI);
+            }
         } catch (Exception ex) {
             throw new NodeException(ex);
-        }   
+        }              
     }
     
     public void addToDomainLevelComposite(QName compositeName) throws NodeException {
-        // if the named composite is not already in the list then add it
-        Composite composite = composites.get(compositeName);
-        if (composite == null) {
-            throw new NodeException("Composite not found: " + compositeName);
-        }
-        if (compositesToStart.indexOf(compositeName) == -1 ){
-            compositesToStart.add(compositeName);  
-        }
+        try {         
+            // if the named composite is not already in the list then add it
+            Composite composite = composites.get(compositeName);
+            if (composite == null) {
+                throw new NodeException("Composite not found: " + compositeName);
+            }
+                   
+            
+            // include in top level domain
+            nodeComposite.getIncludes().add(composite);
+             
+        } catch (Exception ex) {
+            throw new NodeException(ex);
+        }          
     }
     
     public void addToDomainLevelComposite(String compositePath) throws NodeException {
-        // if the composite is not already in the list then add it
-        Composite composite = compositeFiles.get(compositePath);
-        if (composite == null) {
-            throw new NodeException("Composite file not found: " + compositePath);
-        }
-        QName compositeName = composite.getName();
-        if (compositesToStart.indexOf(compositeName) == -1 ){
-            compositesToStart.add(compositeName);  
-        }
+        try {           
+            // if the composite is not already in the list then add it
+            Composite composite = compositeFiles.get(compositePath);
+            if (composite == null) {
+                throw new NodeException("Composite file not found: " + compositePath);
+            }       
+            
+            // include in top level domain    
+            nodeComposite.getIncludes().add(composite); 
+               
+        } catch (Exception ex) {
+            throw new NodeException(ex);
+        }         
     }
 
     /**
      * Configure the default HTTP port for this node.
-     */
+     * The motivation here is to set the default binding on the servlet container
+     * based on whatever information is available. In particular if no Node URL is 
+     * provided then one of the ports from the first composite is used so that 
+     * some recognizable default is provided for any bindings that are specified
+     * without URIs 
+     */    
     private void configureDefaultPort() {
-        Composite composite = composites.get(compositesToStart.get(0));
+        Composite composite = composites.get(nodeComposite.getIncludes().get(0));
         if (composite == null) {
             return;
         }
@@ -477,7 +550,7 @@
 
     private void startComposites() throws NodeException {
         try {
-            if (compositesToStart.size() == 0 ){
+            if (nodeComposite.getIncludes().size() == 0 ){
                 logger.log(Level.INFO, nodeURI + 
                                        " has no composites to start" );
             } else {
@@ -485,11 +558,10 @@
                 // Configure the default server port for the node
                 configureDefaultPort();
                 
-                for (QName compositeName : compositesToStart) {
-                    Composite composite = composites.get(compositeName);
-                    if (composite == null) {
-                        logger.log(Level.INFO, "Composite not found during start: " + compositeName);
-                    } else {
+                for (Composite composite : nodeComposite.getIncludes()) {
+                    // don't try and restart the management composite
+                    // they will already have been started by the domain proxy
+                    if (!composite.getName().equals(nodeManagementCompositeName)){
                         startComposite(composite);
                     }
                 }
@@ -503,8 +575,7 @@
     private void startComposite(Composite composite) throws CompositeBuilderException, ActivationException {
         logger.log(Level.INFO, "Starting composite: " + composite.getName());
         
-        // Add the composite to the top level domain
-        nodeComposite.getIncludes().add(composite);
+        // Create the model for the composite
         nodeRuntime.getCompositeBuilder().build(composite); 
         
         // activate the composite
@@ -521,19 +592,15 @@
     private void stopComposites() throws NodeException {
         
         try {
-            if (compositesToStart.size() == 0 ){
-                throw new NodeException("Stopping node " + 
-                                        nodeURI + 
-                                        " with no composite started");
-            }
-            for (QName compositeName : compositesToStart) {
-                Composite composite = composites.get(compositeName);   
 
-                stopComposite(composite);
+            for (Composite composite : nodeComposite.getIncludes()) { 
+                // don't try and stop the management composite
+                // if we do that we can't manage the node
+                if (!composite.getName().equals(nodeManagementCompositeName)){
+                    stopComposite(composite);
+                }
             }
-            
-        } catch (NodeException ex) {
-            throw ex;                  
+                            
         } catch (Exception ex) {
             throw new NodeException(ex);
         }              

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java Tue Nov 20 06:52:20 2007
@@ -73,9 +73,9 @@
             domain.addContribution("nodeB", cl.getResource("nodeB/"));
             domain.addContribution("nodeC", cl.getResource("nodeC/"));
             
-            domain.addToDomainLevelComposite(new QName("http://sample", "Calculator"));
+            domain.addToDomainLevelComposite(new QName("http://sample", "CalculatorC"));
             
-            domain.startComposite(new QName("http://sample", "Calculator"));
+            domain.startComposite(new QName("http://sample", "CalculatorC"));
             
             calculatorServiceA = domain.getService(CalculatorService.class, "CalculatorServiceComponentA");
             calculatorServiceB = domain.getService(CalculatorService.class, "CalculatorServiceComponentB");
@@ -106,7 +106,7 @@
 
     @Test
     public void testCalculator() throws Exception {       
-        
+        /*
         // Calculate
         Assert.assertEquals(calculatorServiceA.add(3, 2), 5.0);
         Assert.assertEquals(calculatorServiceA.subtract(3, 2), 1.0);
@@ -116,6 +116,6 @@
         Assert.assertEquals(calculatorServiceB.subtract(3, 2), 1.0);
         Assert.assertEquals(calculatorServiceB.multiply(3, 2), 6.0);
         Assert.assertEquals(calculatorServiceB.divide(3, 2), 1.5);
-       
+      */ 
     }
 }

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java Tue Nov 20 06:52:20 2007
@@ -79,7 +79,7 @@
             // explicitly ask for composite to be started
             nodeC = nodeFactory.createSCANode("http://localhost:8300/nodeC", "http://localhost:9999");
             nodeC.addContribution("nodeC", cl.getResource("nodeC/"));
-            nodeC.addToDomainLevelComposite(new QName("http://sample", "Calculator")); 
+            nodeC.addToDomainLevelComposite(new QName("http://sample", "CalculatorC")); 
             nodeC.start();
 
             SCADomainFinder domainFinder = SCADomainFinder.newInstance();
@@ -105,6 +105,12 @@
         nodeB.destroy();    
         nodeC.destroy();
     }
+    
+    //@Test
+    public void testKeepServerRunning() throws Exception {
+        System.out.println("press enter to continue");
+        System.in.read();
+    }    
 
     @Test
     public void testCalculator() throws Exception {       

Added: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeMemoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeMemoryTestCase.java?rev=596700&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeMemoryTestCase.java (added)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeMemoryTestCase.java Tue Nov 20 06:52:20 2007
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.node.impl;
+
+
+import javax.xml.namespace.QName;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.domain.SCADomain;
+import org.apache.tuscany.sca.domain.SCADomainFactory;
+import org.apache.tuscany.sca.node.SCADomainFinder;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import calculator.AddService;
+import calculator.CalculatorService;
+import calculator.SubtractService;
+
+/**
+ * Runs a distributed domain in a single VM by using and in memory 
+ * implementation of the distributed domain. The test repeatedly
+ * creates and destroys the node to see if memory is being leaked.
+ * Looking for leaked memory is a manual task.
+ */
+public class NodeMemoryTestCase {
+    
+    @Test
+    public void testDoNothing() throws Exception {
+        
+    }
+    
+    //@Test
+    public void testNodeMemoryUseage() throws Exception {   
+        
+        ClassLoader cl = NodeMemoryTestCase.class.getClassLoader();
+        SCANodeFactory nodeFactory;
+        SCANode   node;
+        CalculatorService calculatorServiceB;
+        SubtractService subtractServiceC;
+
+        for(int i=0; i < 40; i++) {
+            
+            nodeFactory = SCANodeFactory.newInstance();
+            node = nodeFactory.createSCANode("http://localhost:8200/node", null);
+            node.addContribution("nodeB", cl.getResource("nodeB/"));
+            node.addContribution("nodeC", cl.getResource("nodeC/"));
+            node.addToDomainLevelComposite(new QName("http://sample", "CalculatorC"));
+            node.start();   
+            
+            calculatorServiceB = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentB");
+            subtractServiceC = node.getDomain().getService(SubtractService.class, "SubtractServiceComponentC");
+            
+            for(int j=0; j < 20; j++){
+                Assert.assertEquals(calculatorServiceB.subtract(3, 2), 1.0); 
+                Assert.assertEquals(subtractServiceC.subtract(3, 2), 1.0); 
+            }
+            
+            node.destroy();
+        }
+        
+        //com.ibm.jvm.Dump.HeapDump();          
+    }          
+}

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java Tue Nov 20 06:52:20 2007
@@ -43,8 +43,10 @@
  */
 public class StandaloneNodeTestCase {
     
+    private static SCANodeFactory nodeFactory;
     private static SCANode   node;
     private static CalculatorService calculatorServiceD;
+    private static CalculatorService calculatorServiceB;
     private static AddService addServiceD;
     private static SubtractService subtractServiceC;
     private static ClassLoader cl;
@@ -57,17 +59,7 @@
             System.out.println("Setting up add node");
             
             cl = StandaloneNodeTestCase.class.getClassLoader();
-            
-            SCANodeFactory nodeFactory = SCANodeFactory.newInstance();
-            
-            // rely on meta data to start composite
-            node = nodeFactory.createSCANode("http://localhost:8200/node", null);
-            node.addContribution("nodeC", cl.getResource("nodeC/"));
-            node.addToDomainLevelComposite(new QName("http://sample", "Calculator"));
-            node.start();
-           
-            // get a reference to various services in the node
-            subtractServiceC = node.getDomain().getService(SubtractService.class, "SubtractServiceComponentC");            
+            nodeFactory = SCANodeFactory.newInstance();
             
         } catch(Exception ex){
             System.err.println(ex.toString());
@@ -80,33 +72,66 @@
         // stop the node      
         node.destroy();    
     }
+    
+    @Test
+    public void testAddContributionAndStartNode() throws Exception {       
+        node = nodeFactory.createSCANode("http://localhost:8200/node", null);
+        node.addContribution("nodeC", cl.getResource("nodeC/"));
+        node.addToDomainLevelComposite(new QName("http://sample", "CalculatorC"));
+        node.start();
+       
+        // get a reference to various services in the node
+        subtractServiceC = node.getDomain().getService(SubtractService.class, "SubtractServiceComponentC");            
+      
+    }    
 
     @Test
     public void testSubtract() throws Exception {       
         Assert.assertEquals(subtractServiceC.subtract(3, 2), 1.0);        
     }
     
+    //@Test
+    public void testKeepServerRunning1() throws Exception {
+        System.out.println("press enter to continue");
+        System.in.read();
+    }  
+    
     @Test
-    public void testAddSecondContribution() throws Exception {       
+    public void testStopNode() throws Exception {       
         node.stop();
         try {
             subtractServiceC.subtract(3, 2); 
+            Assert.fail();
         } catch (Exception ex) {
            // System.out.println(ex.toString());
-        }
-        
+        }       
+    }    
+    
+    @Test
+    public void testAddOtherContributionsAndStartNode() throws Exception {       
+        node.addContribution("nodeB", cl.getResource("nodeB/"));
         node.addContribution("nodeD", cl.getResource("nodeD/"));
         node.start();
         subtractServiceC = node.getDomain().getService(SubtractService.class, "SubtractServiceComponentC");
         calculatorServiceD = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentD");
+        calculatorServiceB = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentB");
         addServiceD = node.getDomain().getService(AddService.class, "AddServiceComponentD");        
         
     } 
     
+    //@Test
+    public void testKeepServerRunning2() throws Exception {
+        System.out.println("press enter to continue");
+        System.in.read();
+    }    
+    
     @Test
-    public void testCalculate() throws Exception {       
-        
-        // Calculate       
+    public void testCalculate() throws Exception {         
+        // Calculate   
+        Assert.assertEquals(calculatorServiceB.add(3, 2), 5.0);
+        Assert.assertEquals(calculatorServiceB.subtract(3, 2), 1.0);
+        Assert.assertEquals(calculatorServiceB.multiply(3, 2), 6.0);
+        Assert.assertEquals(calculatorServiceB.divide(3, 2), 1.5);
         Assert.assertEquals(calculatorServiceD.add(3, 2), 5.0);
         Assert.assertEquals(calculatorServiceD.subtract(3, 2), 1.0);
         Assert.assertEquals(calculatorServiceD.multiply(3, 2), 6.0);
@@ -114,5 +139,40 @@
         Assert.assertEquals(addServiceD.add(3, 2), 5.0);
         Assert.assertEquals(subtractServiceC.subtract(3, 2), 1.0);        
         
-    }    
+    } 
+    
+    @Test
+    public void testRemoveContribution() throws Exception { 
+        node.stop();
+        node.removeContribution("nodeD");
+        
+        try {
+            calculatorServiceD.add(3, 2);
+            Assert.fail();
+        } catch (Exception ex) {
+            // System.out.println(ex.toString());
+        }            
+
+        calculatorServiceD = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentD");
+             
+        try {       
+            Assert.assertEquals(calculatorServiceD.add(3, 2), 5.0);
+            Assert.fail();
+        } catch (Exception ex) {
+            // System.out.println(ex.toString());
+        } 
+        
+    }
+    
+    @Test
+    public void testAddContributionBackAgain() throws Exception {       
+       
+        node.addContribution("nodeD", cl.getResource("nodeD/"));  
+        node.start();
+        
+        calculatorServiceD = node.getDomain().getService(CalculatorService.class, "CalculatorServiceComponentD");
+               
+        Assert.assertEquals(calculatorServiceD.add(3, 2), 5.0);
+    }
+            
 }

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/Calculator.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/Calculator.composite?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/Calculator.composite (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/Calculator.composite Tue Nov 20 06:52:20 2007
@@ -20,7 +20,7 @@
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
            targetNamespace="http://sample"
            xmlns:sample="http://sample"
-           name="Calculator">
+           name="CalculatorA">
 
     <component name="CalculatorServiceComponentA">
 		<implementation.java class="calculator.CalculatorServiceImpl"/>

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/META-INF/sca-contribution.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/META-INF/sca-contribution.xml?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/META-INF/sca-contribution.xml (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeA/META-INF/sca-contribution.xml Tue Nov 20 06:52:20 2007
@@ -20,5 +20,5 @@
 <contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
 	      targetNamespace="http://sample"
               xmlns:sample="http://sample">
-   <deployable composite="sample:Calculator"/>
+   <deployable composite="sample:CalculatorA"/>
 </contribution>

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeB/META-INF/sca-deployables/Calculator.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeB/META-INF/sca-deployables/Calculator.composite?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeB/META-INF/sca-deployables/Calculator.composite (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeB/META-INF/sca-deployables/Calculator.composite Tue Nov 20 06:52:20 2007
@@ -20,7 +20,7 @@
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
            targetNamespace="http://sample"
            xmlns:sample="http://sample"
-           name="Calculator">
+           name="CalculatorB">
            
     <component name="CalculatorServiceComponentB">
 		<implementation.java class="calculator.CalculatorServiceImpl"/>

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeC/Calculator.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeC/Calculator.composite?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeC/Calculator.composite (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeC/Calculator.composite Tue Nov 20 06:52:20 2007
@@ -20,7 +20,7 @@
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
            targetNamespace="http://sample"
            xmlns:sample="http://sample"
-           name="Calculator">
+           name="CalculatorC">
 
     <component name="SubtractServiceComponentC">
         <implementation.java class="calculator.SubtractServiceImpl" />

Modified: incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeD/META-INF/sca-deployables/Calculator.composite
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeD/META-INF/sca-deployables/Calculator.composite?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeD/META-INF/sca-deployables/Calculator.composite (original)
+++ incubator/tuscany/java/sca/modules/node-impl/src/test/resources/nodeD/META-INF/sca-deployables/Calculator.composite Tue Nov 20 06:52:20 2007
@@ -20,7 +20,7 @@
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
            targetNamespace="http://sample"
            xmlns:sample="http://sample"
-           name="CalculatorFull">
+           name="CalculatorD">
            
     <component name="CalculatorServiceComponentD">
 		<implementation.java class="calculator.CalculatorServiceImpl"/>

Modified: incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java (original)
+++ incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactory.java Tue Nov 20 06:52:20 2007
@@ -28,10 +28,17 @@
 public interface NodeFactory {
     
     /**
-     * Returns the domain object
+     * Returns the node object
      * 
-     * @return the domain 
+     * @return the node 
      */
     public SCANode getNode();
+    
+    /**
+     * Set the node object
+     * 
+     * @param node the node  
+     */
+    public void setNode(SCANode node);
     
 }

Modified: incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactoryImpl.java?rev=596700&r1=596699&r2=596700&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactoryImpl.java (original)
+++ incubator/tuscany/java/sca/modules/node/src/main/java/org/apache/tuscany/sca/node/NodeFactoryImpl.java Tue Nov 20 06:52:20 2007
@@ -44,4 +44,13 @@
     	return node;
     }
     
+    /**
+     * Set the node object
+     * 
+     * @param node the node  
+     */
+    public void setNode(SCANode node){
+        this.node = node;
+    }
+    
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org