Author: slaws
Date: Wed Dec 19 17:27:10 2007
New Revision: 605781

URL: http://svn.apache.org/viewvc?rev=605781&view=rev
Log:
Changes to make the distributed store tutorial example work with recent domain 
changes. The domain changes make the domain responsible for managing the wiring 
of composites in the domain and pushing this down to nodes. Nodes are still 
reporting service endpoints to the domain but the next piece of work is to put 
in some static configuration options so endpoints can be determined at the 
domain level and the code in the node removed.  Currently the pushing of 
endpoints down to the node involves composite updates and starting stopping 
components. Most of this change is fixing the bindings that the tutorial uses 
to make the starting and stopping work more correctly.  

Modified:
    
incubator/tuscany/java/sca/itest/callablereferences/src/test/java/org/apache/tuscany/sca/itest/callableref/CallableReferenceRemoteTestCase.java
    
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/DomainWireBuilderImpl.java
    
incubator/tuscany/java/sca/modules/binding-ejb/src/main/java/org/apache/tuscany/sca/binding/ejb/impl/EJBBindingProcessor.java
    
incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
    
incubator/tuscany/java/sca/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java
    
incubator/tuscany/java/sca/modules/domain-impl/src/main/java/org/apache/tuscany/sca/domain/impl/SCADomainImpl.java
    
incubator/tuscany/java/sca/modules/host-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java
    
incubator/tuscany/java/sca/modules/host-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatServer.java
    
incubator/tuscany/java/sca/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.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/DomainAPITestCase.java
    
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java

Modified: 
incubator/tuscany/java/sca/itest/callablereferences/src/test/java/org/apache/tuscany/sca/itest/callableref/CallableReferenceRemoteTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callablereferences/src/test/java/org/apache/tuscany/sca/itest/callableref/CallableReferenceRemoteTestCase.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/itest/callablereferences/src/test/java/org/apache/tuscany/sca/itest/callableref/CallableReferenceRemoteTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/itest/callablereferences/src/test/java/org/apache/tuscany/sca/itest/callableref/CallableReferenceRemoteTestCase.java
 Wed Dec 19 17:27:10 2007
@@ -70,7 +70,10 @@
             nodeB = nodeFactory.createSCANode("http://localhost:8200/nodeB";, 
"http://localhost:9999";);
             nodeB.addContribution("nodeB", cl.getResource("nodeB/"));
             nodeB.addToDomainLevelComposite(new QName("http://foo";, 
"CompositeB"));
-            nodeB.start();                  
+            nodeB.start();
+            
+            // wait for doamin to intialize
+            Thread.sleep(1000);
             
             // get a reference to the calculator service from domainA
             // which will be running this component
@@ -87,6 +90,12 @@
         nodeB.destroy();
     }
 
+    //@Test
+    public void testKeepServerRunning1() throws Exception {
+        System.out.println("press enter to continue");
+        System.in.read();
+    } 
+    
     @Test
     public void testBReference() {
         assertEquals("BComponent", acomponent.fooB());

Modified: 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/DomainWireBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/DomainWireBuilderImpl.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/DomainWireBuilderImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/DomainWireBuilderImpl.java
 Wed Dec 19 17:27:10 2007
@@ -157,9 +157,9 @@
                             return service; 
                         }
                     }
-                } else {
+                } else if (component.getServices().size() == 1) {
                     return component.getServices().get(0);
-                }
+                } 
             }
         }          
 
@@ -238,7 +238,7 @@
                                                 break;
                                             }
                                         }
-                                    } else {
+                                    } else if 
(tmpComponent.getServices().size() == 1) {
                                         service = 
tmpComponent.getServices().get(0);
                                         break;
                                     }

Modified: 
incubator/tuscany/java/sca/modules/binding-ejb/src/main/java/org/apache/tuscany/sca/binding/ejb/impl/EJBBindingProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ejb/src/main/java/org/apache/tuscany/sca/binding/ejb/impl/EJBBindingProcessor.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/binding-ejb/src/main/java/org/apache/tuscany/sca/binding/ejb/impl/EJBBindingProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/binding-ejb/src/main/java/org/apache/tuscany/sca/binding/ejb/impl/EJBBindingProcessor.java
 Wed Dec 19 17:27:10 2007
@@ -135,7 +135,16 @@
         // Write a <binding.ejb>
         writer.writeStartElement(Constants.SCA10_NS, EJBBinding.BINDING_EJB);
 
-        // FIXME Implement
+        if (ejbBinding.getName() != null){
+            writer.writeAttribute(EJBBinding.NAME, ejbBinding.getName());
+        }
+        
+        if (ejbBinding.getURI() != null){
+            writer.writeAttribute(EJBBinding.URI, ejbBinding.getURI());
+        }        
+        
+        
+        // FIXME Implement the rest
 
         writer.writeEndElement();
     }

Modified: 
incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
 Wed Dec 19 17:27:10 2007
@@ -23,6 +23,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.servlet.ServletContext;
+
 import org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding;
 import org.apache.tuscany.sca.binding.jsonrpc.JSONRPCServiceServlet;
 import org.apache.tuscany.sca.binding.jsonrpc.ScaDomainScriptServlet;
@@ -108,6 +110,7 @@
         if (!mapping.endsWith("*")) {
             mapping += "*";
         }
+                
         servletHost.addServletMapping(mapping, serviceServlet);
         servletMappings.add(mapping);
         servletHost.addServletMapping(binding.getURI(), serviceServlet);

Modified: 
incubator/tuscany/java/sca/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/binding-sca-xml/src/test/java/org/apace/tuscany/sca/binding/sca/xml/WriteTestCase.java
 Wed Dec 19 17:27:10 2007
@@ -96,10 +96,7 @@
         assertNotNull(componentType);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         staxProcessor.write(componentType, bos);
-        assertEquals("<?xml version='1.0' encoding='UTF-8'?><componentType 
xmlns=\"http" +
-                     "://www.osoa.org/xmlns/sca/1.0\"><service 
name=\"CalculatorService\">" +
-                     "<binding.sca /></service><reference 
name=\"addService\"><binding.sca />" +
-                     "</reference></componentType>",
+        assertEquals("<?xml version='1.0' encoding='UTF-8'?><componentType 
xmlns=\"http://www.osoa.org/xmlns/sca/1.0\"; 
xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\";><service 
name=\"CalculatorService\"><binding.sca /></service><reference 
name=\"addService\"><binding.sca /></reference></componentType>",
                      bos.toString());
         //System.err.println(bos.toString());
     }
@@ -110,18 +107,7 @@
         assertNotNull(composite);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         staxProcessor.write(composite, bos);
-        assertEquals(
-            "<?xml version='1.0' encoding='UTF-8'?><composite 
xmlns=\"http://www.osoa.org/xmln"; +
-            "s/sca/1.0\" targetNamespace=\"http://calc\"; 
name=\"Calculator\"><service name=\"Calcul" +
-            "atorService\" promote=\"CalculatorServiceComponent\"><binding.sca 
/></service><comp" +
-            "onent name=\"CalculatorServiceComponent\"><reference 
name=\"addService\" target=\"Add" +
-            "ServiceComponent\"><binding.sca /></reference><reference 
name=\"subtractService\" t" +
-            "arget=\"SubtractServiceComponent\" /><reference 
name=\"multiplyService\" target=\"Mul" +
-            "tiplyServiceComponent\" /><reference name=\"divideService\" 
target=\"DivideServiceCo" +
-            "mponent\" /></component><component 
name=\"AddServiceComponent\"><service><binding.s" +
-            "ca /></service></component><component 
name=\"SubtractServiceComponent\" /><compone" +
-            "nt name=\"MultiplyServiceComponent\" /><component 
name=\"DivideServiceComponent\" />" +
-            "</composite>",
+        assertEquals("<?xml version='1.0' encoding='UTF-8'?><composite 
xmlns=\"http://www.osoa.org/xmlns/sca/1.0\"; 
xmlns:ns1=\"http://www.osoa.org/xmlns/sca/1.0\"; targetNamespace=\"http://calc\"; 
name=\"Calculator\"><service name=\"CalculatorService\" 
promote=\"CalculatorServiceComponent\"><binding.sca /></service><component 
name=\"CalculatorServiceComponent\"><reference name=\"addService\" 
target=\"AddServiceComponent\"><binding.sca /></reference><reference 
name=\"subtractService\" target=\"SubtractServiceComponent\" /><reference 
name=\"multiplyService\" target=\"MultiplyServiceComponent\" /><reference 
name=\"divideService\" target=\"DivideServiceComponent\" 
/></component><component name=\"AddServiceComponent\"><service><binding.sca 
/></service></component><component name=\"SubtractServiceComponent\" 
/><component name=\"MultiplyServiceComponent\" /><component 
name=\"DivideServiceComponent\" /></composite>",
             bos.toString() );
         //System.err.println(bos.toString());
     }

Modified: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java
 Wed Dec 19 17:27:10 2007
@@ -185,13 +185,13 @@
      * @param uri
      * @throws XMLStreamException
      */
-    private void writeElementPrefix(XMLStreamWriter writer, String uri) throws 
XMLStreamException {
+    private String writeElementPrefix(XMLStreamWriter writer, String uri) 
throws XMLStreamException {
         if (uri == null) {
-            return;
+            return null;
         }
         String prefix = writer.getPrefix(uri);
         if (prefix != null) {
-            return;
+            return null;
         } else {
             
             // Find an available prefix and bind it to the given uri 
@@ -203,6 +203,7 @@
                 }
             }
             writer.setPrefix(prefix, uri);
+            return prefix;
         }
         
     }
@@ -215,9 +216,13 @@
      * @throws XMLStreamException
      */
     protected void writeStart(XMLStreamWriter writer, String uri, String name, 
XAttr... attrs) throws XMLStreamException {
-        writeElementPrefix(writer, uri);
+        String prefix = writeElementPrefix(writer, uri);
         writeAttributePrefixes(writer, attrs);
         writer.writeStartElement(uri, name);
+        
+        if (prefix != null){
+            writer.writeNamespace(prefix,uri); 
+        }
         writeAttributes(writer, attrs);
     }
 

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=605781&r1=605780&r2=605781&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
 Wed Dec 19 17:27:10 2007
@@ -24,7 +24,12 @@
 import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -120,7 +125,12 @@
     protected DomainModel domainModel;
     
     // management services
-    private SCADomainManagerInitService domainManagerInitService;   
+    private SCADomainManagerInitService domainManagerInitService;
+    
+    // runs the domain update for nodes that are telling the domain 
+    // that something has changed
+    private ScheduledExecutorService scheduler;
+    private DomainUpdateProcessor domainUpdateProcessor;
     
     // Implementation methods
      
@@ -241,7 +251,11 @@
                 throw new ActivationException("Domain management contribution 
" + 
                                               domainCompositeName + 
                                               " not found on the classpath");
-            }       
+            }  
+            
+            // Get a scheduler and scheduled a task to be run in the future 
indefinitely until its explicitly shutdown.
+            domainUpdateProcessor = new DomainUpdateProcessor();
+            this.scheduler = Executors.newSingleThreadScheduledExecutor();
             
         } catch(Exception ex) {
             throw new DomainException(ex);
@@ -259,6 +273,12 @@
                 if 
(node.getDeployedComposites().containsKey(composite.getName())){
                     try {
                         if (((NodeModelImpl)node).getSCANodeManagerService() 
!= null) {
+                            
+                            logger.log(Level.INFO, "Updating node: " + 
+                                                   node.getNodeURI() + 
+                                                   " with composite: " + 
+                                                   compositeXML);
+                            
                             // notify node
                             
((NodeModelImpl)node).getSCANodeManagerService().updateComposite(composite.getName().toString(),
 
                                                                                
              Base64Binary.encode(compositeXML.getBytes()));
@@ -359,9 +379,6 @@
                                               " doesn't match a composite in 
the contribution " +
                                               contributionURI );
                 }
-                
-                // build the contribution to create the services and references
-                domainManagementRuntime.getCompositeBuilder().build(composite);
             }
         } catch(DomainException ex) {   
             throw ex;
@@ -393,7 +410,9 @@
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         try {
             XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
+            
//outputFactory.setProperty("javax.xml.stream.isPrefixDefaulting",Boolean.TRUE);
             XMLStreamWriter writer = outputFactory.createXMLStreamWriter(bos);
+            
             processor.write(composite, writer);
             writer.flush();
             writer.close();
@@ -447,7 +466,9 @@
             // if the node was started by the domain we already know it's 
running
             if (node.getLifecycleState() != LifecyleState.RUNNING){
                 node.setLifecycleState(LifecyleState.RUNNING);
-                notifyDomainChange();
+                
+                // run the update in a separate thread so that the caller 
doesn't block
+                scheduler.execute(domainUpdateProcessor);
             }
         } else {
             logger.log(Level.WARNING, "trying to start node: " + 
@@ -463,7 +484,9 @@
             // if the node was stopped by the domain we already know it's 
running
             if (node.getLifecycleState() == LifecyleState.RUNNING){
                 node.setLifecycleState(LifecyleState.DEPLOYED);
-                notifyDomainChange();
+                
+                // run the update in a separate thread so that the caller 
doesn't block
+                scheduler.execute(domainUpdateProcessor);
             }                
         } else {
             logger.log(Level.WARNING, "trying to stop node: " + 
@@ -485,6 +508,8 @@
                 if ((node != null) && (contributionModel != null)) {
                     node.getContributions().put(contributionURI, 
contributionModel);
                 } 
+            } else {
+                // TODO - throw and exception here ?
             }
             
         } catch (Exception ex) {
@@ -546,6 +571,7 @@
                             
contributionModel.getDeployedComposites().put(compositeQName, compositeModel);
                             node.getDeployedComposites().put(compositeQName, 
compositeModel);
                             
domainModel.getDeployedComposites().put(compositeQName, compositeModel);
+                            
domainManagementRuntime.getCompositeBuilder().build(compositeModel.getComposite());
 
                             
domainModel.getDomainLevelComposite().getIncludes().add(compositeModel.getComposite());
                         }
                     }
@@ -760,6 +786,9 @@
             
             // Stop the SCA runtime that the domain is using
             domainManagementRuntime.stop();
+            
+            // stop the scheduler 
+            scheduler.shutdownNow();
                         
         } catch(ActivationException ex) {
             throw new DomainException(ex); 
@@ -885,25 +914,31 @@
     public void addToDomainLevelComposite(QName compositeName) throws 
DomainException {
         // find this composite and add the composite as a deployed composite
         
-        for (ContributionModel contribution : 
domainModel.getContributions().values()){
-            CompositeModel composite = 
contribution.getComposites().get(compositeName);
-            if (composite != null) {
-                domainModel.getDeployedComposites().put(compositeName, 
composite);
-                
domainModel.getDomainLevelComposite().getIncludes().add(composite.getComposite());
+        try {
+            for (ContributionModel contribution : 
domainModel.getContributions().values()){
+                CompositeModel composite = 
contribution.getComposites().get(compositeName);
+                if (composite != null) {
+                    // build the contribution to create the services and 
references
+                    domainModel.getDeployedComposites().put(compositeName, 
composite);
+                    
domainManagementRuntime.getCompositeBuilder().build(composite.getComposite());  
              
+                    
domainModel.getDomainLevelComposite().getIncludes().add(composite.getComposite());
+                }
             }
+        } catch (Exception ex){
+            throw new DomainException(ex);
         }
     }
       
     public void removeFromDomainLevelComposite(QName compositeQName) throws 
DomainException {
 
-        
domainModel.getDomainLevelComposite().getIncludes().remove(domainModel.getDeployedComposites().get(compositeQName));
+        
domainModel.getDomainLevelComposite().getIncludes().remove(domainModel.getDeployedComposites().get(compositeQName).getComposite());
         domainModel.getDeployedComposites().remove(compositeQName);
         
         ContributionModel contributionModel = 
findContributionFromComposite(compositeQName);
         contributionModel.getDeployedComposites().remove(compositeQName);
         
         for(NodeModel node : domainModel.getNodes().values()) {
-            if ( node.getDeployedComposites().containsValue(compositeQName)){
+            if ( node.getDeployedComposites().containsKey(compositeQName)){
                 try {
                     if (node.getLifecycleState() == LifecyleState.RUNNING) {
                         
((NodeModelImpl)node).getSCANodeManagerService().stop();
@@ -1045,7 +1080,7 @@
                 
         // stop all the nodes running this composite
         for(NodeModel node : domainModel.getNodes().values()) {
-            if ( node.getDeployedComposites().containsValue(compositeName)){
+            if ( node.getDeployedComposites().containsKey(compositeName)){
                 try {
                     if (node.getLifecycleState() == LifecyleState.RUNNING) {
                         node.setLifecycleState(LifecyleState.DEPLOYED);
@@ -1213,5 +1248,23 @@
             }
         }
     }
+    
+    // This inner class processes domain wiring actions on a separate thread 
so that
+    // we don't have nodes block when they register the fact that they have 
started
+    class DomainUpdateProcessor implements Runnable {
+
+        public DomainUpdateProcessor() {
+        }
+        
+        public void run() {
+               
+            try {
+                notifyDomainChange();
+            } catch (Exception ex) {
+                logger.log(Level.SEVERE, "Error notifying domain update: " + 
+                                         ex.toString());
+            }
+        }
+    }    
 
 }

Modified: 
incubator/tuscany/java/sca/modules/host-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/host-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/host-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyServer.java
 Wed Dec 19 17:27:10 2007
@@ -335,6 +335,15 @@
         List<ServletMapping> mappings =
             new 
ArrayList<ServletMapping>(Arrays.asList(servletHandler.getServletMappings()));
         String path = uri.getPath();
+        
+        if (!path.startsWith("/")) {
+            path = '/' + path;
+        }
+        
+        if (!path.startsWith(contextPath)) {
+            path = contextPath + path;
+        }
+        
         for (ServletMapping mapping : mappings) {
             if (Arrays.asList(mapping.getPathSpecs()).contains(path)) {
                 try {
@@ -369,6 +378,15 @@
         List<ServletMapping> mappings =
             new 
ArrayList<ServletMapping>(Arrays.asList(servletHandler.getServletMappings()));
         String path = uri.getPath();
+        
+        if (!path.startsWith("/")) {
+            path = '/' + path;
+        }
+        
+        if (!path.startsWith(contextPath)) {
+            path = contextPath + path;
+        }
+        
         for (ServletMapping mapping : mappings) {
             if (Arrays.asList(mapping.getPathSpecs()).contains(path)) {
                 try {
@@ -383,7 +401,9 @@
         }
         if (removedServlet != null) {
             servletHandler.setServletMappings(mappings.toArray(new 
ServletMapping[mappings.size()]));
-        } 
+        } else {
+            logger.info("Trying to Remove servlet mapping: " + path + " where 
mapping is not registered");
+        }
         
         return removedServlet;
     }

Modified: 
incubator/tuscany/java/sca/modules/host-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatServer.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatServer.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/host-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatServer.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/host-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatServer.java
 Wed Dec 19 17:27:10 2007
@@ -307,6 +307,15 @@
         }
         
         String mapping = uri.getPath();
+        
+        if (!mapping.startsWith("/")) {
+            mapping = '/' + mapping;
+        }
+        
+        if (!mapping.startsWith(contextPath)) {
+            mapping = contextPath + mapping;
+        }
+        
         Context context = port.getHost().map(mapping);
         MappingData md = new MappingData();
         MessageBytes mb = MessageBytes.newInstance();
@@ -340,6 +349,15 @@
         }
         
         String mapping = uri.getPath();
+        
+        if (!mapping.startsWith("/")) {
+            mapping = '/' + mapping;
+        }
+        
+        if (!mapping.startsWith(contextPath)) {
+            mapping = contextPath + mapping;
+        }
+        
         Context context = port.getHost().map(mapping);
         MappingData md = new MappingData();
         MessageBytes mb = MessageBytes.newInstance();
@@ -363,10 +381,16 @@
                 // seem harmful, will find a better solution for the next 
release
             }
             context.removeChild(servletWrapper);
-            servletWrapper.destroyServlet();
+            try {
+                servletWrapper.destroyServlet();
+            } catch (Exception ex){
+                // Temporary hack to stop destruction of servlets without 
servlet
+                // context 
+            }
             //logger.info("Remove Servlet mapping: " + suri);
             return servletWrapper.getServlet();
         } else {
+            logger.info("Trying to Remove servlet mapping: " + mapping + " 
where mapping is not registered");
             return null;
         }
     }

Modified: 
incubator/tuscany/java/sca/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-widget/src/main/java/org/apache/tuscany/sca/implementation/widget/WidgetImplementationProcessor.java
 Wed Dec 19 17:27:10 2007
@@ -105,7 +105,10 @@
     public void write(WidgetImplementation implementation, XMLStreamWriter 
writer) throws ContributionWriteException, XMLStreamException {
         
         // Write <implementation.resource>
+        writer.setPrefix("widget",IMPLEMENTATION_WIDGET.getNamespaceURI());
         writer.writeStartElement(IMPLEMENTATION_WIDGET.getNamespaceURI(), 
IMPLEMENTATION_WIDGET.getLocalPart());
+        
writer.writeNamespace("widget",IMPLEMENTATION_WIDGET.getNamespaceURI());
+      
         
         if (implementation.getLocation() != null) {
             writer.writeAttribute("location", implementation.getLocation());

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=605781&r1=605780&r2=605781&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
 Wed Dec 19 17:27:10 2007
@@ -114,10 +114,7 @@
     NodeFactoryImpl nodeFactory;
     
     // domain level wiring 
-    DomainBuilder domainBuilder;
-    List<Binding> removeCandidates = new ArrayList<Binding>();
-    List<Binding> addCandidates = new ArrayList<Binding>();
-    
+    DomainBuilder domainBuilder;  
        
     // methods defined on the implementation only
        
@@ -835,8 +832,8 @@
         } catch (Exception ex) {
             throw new NodeException(ex);
         }       
+
         
-/*        
         // for each component in the composite compare it against the live 
component
         for (Component newComponent : newComposite.getComponents()){
             for (Component component : composite.getComponents()){         
@@ -846,87 +843,10 @@
                         for (Reference reference : component.getReferences()) 
{           
                             if 
(reference.getName().equals(newReference.getName())) {
                                 boolean referenceChanged = false;
-                                Binding removalCandidates[] = new 
Binding[reference.getBindings().size()];
-                                int bindingIndex = 0;
-                                for (Binding binding : 
reference.getBindings()){ 
-                                    removalCandidates[bindingIndex] = binding;
-                                    bindingIndex++;
-                                }
-                                
-                                for (Binding newBinding : 
newReference.getBindings()){
-                                    boolean bindingFound = false;
-                                    bindingIndex = 0;
-                                    for (Binding binding : 
reference.getBindings()){                
-                                        if 
(binding.getName().equals(newBinding.getName())){
-                                            if ((binding.getURI() != null) && 
-                                                (newBinding.getURI() != null) 
&&
-                                                
!binding.getURI().equals(newBinding.getURI())){
-                                                
binding.setURI(newBinding.getURI());
-                                                referenceChanged = true;
-                                                
-                                                logger.log(Level.INFO, 
"Updating component " + 
-                                                                       
component.getName() + 
-                                                                       " 
reference " + 
-                                                                       
reference.getName() +
-                                                                       " 
binding " + 
-                                                                       
binding.getClass().getName() + 
-                                                                       " URI " 
+ 
-                                                                       
binding.getURI());
-                                            }
-                                            bindingFound = true;
-                                            removalCandidates[bindingIndex] = 
null;
-                                        }
-                                        bindingIndex++;
-                                    }
-                                    
-                                    // if the new binding is not currently 
deployed then add it
-                                    if (bindingFound == false){
-                                        
reference.getBindings().add(newBinding);
-                                        referenceChanged = true;
-                                    }
-                                }
-                                
-                                // remove all of the old bindings
-                                for ( int i = 0; i < removalCandidates.length; 
i++){
-                                    if (removalCandidates[i] != null){
-                                        
reference.getBindings().remove(removalCandidates[i]);
-                                        referenceChanged = true;
-                                    }
-                                }
+                                List<Binding> removeCandidates = new 
ArrayList<Binding>();
+                                List<Binding> addCandidates = new 
ArrayList<Binding>();
                                 
-                                // if the node is running restart the reference
-                                if (referenceChanged && nodeStarted){
-                                    
nodeRuntime.getCompositeActivator().deactivate((RuntimeComponent)component, 
-                                                                               
     (RuntimeComponentReference)reference);
-                                    
-                                    
nodeRuntime.getCompositeActivator().start((RuntimeComponent)component, 
-                                                                              
(RuntimeComponentReference)reference);
-                                    
-                                }                                
-                            }
-                        }
-                    }
-                    
-                    // TODO - compare other parts of the component
-                }
-            }
-        }
-        
-        // TODO - Compare other parts of the composite?
-    } 
-*/
-        
-        // for each component in the composite compare it against the live 
component
-        for (Component newComponent : newComposite.getComponents()){
-            for (Component component : composite.getComponents()){         
-                if (component.getName().equals(newComponent.getName())){
-                    // compare the component references
-                    for (Reference newReference : 
newComponent.getReferences()){
-                        for (Reference reference : component.getReferences()) 
{           
-                            if 
(reference.getName().equals(newReference.getName())) {
-                                boolean referenceChanged = false;
-                                removeCandidates.clear();
-                                addCandidates.clear();
+                                
removeCandidates.addAll(reference.getBindings());
                                 
                                 for (Binding newBinding : 
newReference.getBindings()){
                                     boolean bindingFound = false;
@@ -949,9 +869,8 @@
                                                                        
binding.getURI());
                                             }
                                             bindingFound = true;
-                                        } else {
-                                            removeCandidates.add(binding);
-                                        }
+                                            removeCandidates.remove(binding);
+                                        } 
                                     }
                                     
                                     if (bindingFound == false){

Modified: 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java?rev=605781&r1=605780&r2=605781&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainAPITestCase.java
 Wed Dec 19 17:27:10 2007
@@ -124,8 +124,7 @@
     @Test
     public void testAddAndUpdateContribution() throws Exception {  
         try {
-            
-System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            
+                       
             domain.addContribution("nodeA", cl.getResource("nodeA/"));
             domain.addContribution("nodeB", cl.getResource("nodeB/"));
             domain.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorA"));

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=605781&r1=605780&r2=605781&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
 Wed Dec 19 17:27:10 2007
@@ -88,6 +88,9 @@
             nodeC.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorC"));
             nodeC.start();
             
+            // wait for domain to configure
+            Thread.sleep(1000);
+            
         } catch(Exception ex){
             ex.printStackTrace();
         }  



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to