Author: slaws
Date: Wed Aug 15 04:51:16 2007
New Revision: 566111

URL: http://svn.apache.org/viewvc?view=rev&rev=566111
Log:
TUSCANY-1512
Add in second sca binding to a service when there is the potential for remote 
connections. This new binding will give rise to a wire separate from the local 
sca binding wire so that both local and remote references can target the same 
component through the sca binding. 

Modified:
    
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/src/main/java/org/apache/tuscany/sca/binding/sca/impl/RuntimeSCAServiceBindingProvider.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
    
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/Calculator.composite
    
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/wsdl/subtract.wsdl
    
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/management/ServiceNotFoundException.java

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?view=diff&rev=566111&r1=566110&r2=566111
==============================================================================
--- 
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
 Wed Aug 15 04:51:16 2007
@@ -134,10 +134,13 @@
                                                                  
binding.getURI(), 
                                                                  
SCABinding.class.getName());
         
-        // If we find one set it into the EPR that is shared amonnst
+        // If we find one set it into the EPR that is shared amongst
         // the invokers this provider created
         if (serviceUrl == null){ 
-            throw new ServiceNotFoundException(); 
+            throw new ServiceNotFoundException("Can't find service: " + 
+                                               binding.getURI() + 
+                                               " in domain: " +
+                                               
distributedDomain.getDomainName()); 
         } else {
             serviceEPR.setURI(serviceUrl);
         }

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?view=diff&rev=566111&r1=566110&r2=566111
==============================================================================
--- 
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
 Wed Aug 15 04:51:16 2007
@@ -97,9 +97,11 @@
         // only pass on the uri if it absolute, i.e. come from the uri 
attribute
         // of the sca binding. The axis binding will sort it out for itself if 
         // it's relative
-        URI bindingURI = URI.create(this.binding.getURI());
-        if (bindingURI.isAbsolute()){
-            wsBinding.setURI(this.binding.getURI());
+        if (this.binding.getURI() != null) {
+            URI bindingURI = URI.create(this.binding.getURI());
+            if (bindingURI.isAbsolute()){
+                wsBinding.setURI(this.binding.getURI());
+            }
         }
         
         axisProvider = new Axis2SCAServiceProvider(component, 

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?view=diff&rev=566111&r1=566110&r2=566111
==============================================================================
--- 
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
 Wed Aug 15 04:51:16 2007
@@ -21,6 +21,7 @@
 
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.assembly.WireableBinding;
 import org.apache.tuscany.sca.binding.sca.DistributedSCABinding;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.distributed.domain.DistributedSCADomain;
@@ -55,8 +56,6 @@
     private DistributedSCABinding distributedBinding;
     
     private boolean started = false;
-    
- 
 
     public RuntimeSCAServiceBindingProvider(ExtensionPointRegistry 
extensionPoints,
                                             RuntimeComponent component,
@@ -67,48 +66,46 @@
         this.service = service;
         this.binding = binding;
         
-        // look to see if a distributed SCA binding implementation has
-        // been included on the classpath and store it if it has
-        ProviderFactoryExtensionPoint factoryExtensionPoint = 
extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class);
-        distributedProviderFactory = 
(BindingProviderFactory<DistributedSCABinding>)
-                                     
factoryExtensionPoint.getProviderFactory(DistributedSCABinding.class);
-        
-        // if a distributed sca binding is available and 
-        //    the target interface is remoteable and 
-        //    there is a wire to this service that crosses the node boundary
-        //then 
-        //     create a nested provider to handle the remote case
-        if ( (distributedProviderFactory != null) &&
-             (service.getInterfaceContract().getInterface().isRemotable()) ){
-            distributedBinding = new DistributedSCABindingImpl();
-            distributedBinding.setSCABinging(binding);
-            distributedProvider = (ServiceBindingProvider2)
-                                  
distributedProviderFactory.createServiceBindingProvider(component, service, 
distributedBinding);
+        // if there is potentially a wire to this service that crosses the 
node boundary 
+        if (((WireableBinding)binding).getIsRemote() == true) {        
+            // look to see if a distributed SCA binding implementation has
+            // been included on the classpath and store it if it has
+            ProviderFactoryExtensionPoint factoryExtensionPoint = 
extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class);
+            distributedProviderFactory = 
(BindingProviderFactory<DistributedSCABinding>)
+                                         
factoryExtensionPoint.getProviderFactory(DistributedSCABinding.class);
             
-            // get the url out of the binding and send it to the registry if
-            // a distributed domain is configured
-            DistributedSCADomain distributedDomain = 
((SCABindingImpl)binding).getDistributedDomain();
-            
-            if (distributedDomain != null){
-                ServiceDiscovery serviceDiscovery = 
distributedDomain.getServiceDiscovery();
+            // if a distributed sca binding is available then create a nested 
provider to handle the remote case
+            if (distributedProviderFactory != null) {
+                distributedBinding = new DistributedSCABindingImpl();
+                distributedBinding.setSCABinging(binding);
+                
+                distributedProvider = (ServiceBindingProvider2)
+                                      
distributedProviderFactory.createServiceBindingProvider(component, service, 
distributedBinding);
                 
-                // register endpoint twice to take account the formats 
-                //  ComponentName
-                //  ComponentName/ServiceName
-                
serviceDiscovery.registerServiceEndpoint(distributedDomain.getDomainName(), 
-                                                         
distributedDomain.getNodeName(), 
-                                                         component.getName(), 
-                                                         
SCABinding.class.getName(), 
-                                                         binding.getURI());
-                
serviceDiscovery.registerServiceEndpoint(distributedDomain.getDomainName(), 
-                                                         
distributedDomain.getNodeName(), 
-                                                         component.getName() + 
"/" + service.getName(), 
-                                                         
SCABinding.class.getName(), 
-                                                         binding.getURI());
+                // get the url out of the binding and send it to the registry 
if
+                // a distributed domain is configured
+                DistributedSCADomain distributedDomain = 
((SCABindingImpl)binding).getDistributedDomain();
+                
+                if (distributedDomain != null){
+                    ServiceDiscovery serviceDiscovery = 
distributedDomain.getServiceDiscovery();
+                    
+                    // register endpoint twice to take account the formats 
+                    //  ComponentName
+                    //  ComponentName/ServiceName
+                    // TODO - Can;t we get this from somewhere? What happens 
with nested components. 
+                    
serviceDiscovery.registerServiceEndpoint(distributedDomain.getDomainName(), 
+                                                             
distributedDomain.getNodeName(), 
+                                                             
component.getName(), 
+                                                             
SCABinding.class.getName(), 
+                                                             binding.getURI());
+                    
serviceDiscovery.registerServiceEndpoint(distributedDomain.getDomainName(), 
+                                                             
distributedDomain.getNodeName(), 
+                                                             
component.getName() + "/" + service.getName(), 
+                                                             
SCABinding.class.getName(), 
+                                                             binding.getURI());
+                }   
             }
-            
-        }
-        
+        } 
     }
 
     public InterfaceContract getBindingInterfaceContract() {

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java?view=diff&rev=566111&r1=566110&r2=566111
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
 Wed Aug 15 04:51:16 2007
@@ -185,6 +185,51 @@
                 throw new IllegalStateException("Provider factory not found 
for class: " + binding.getClass().getName());
             }
         }
+        
+        // support for distributed domain follows
+        // TODO - roll into above code but keeping separate so that it is 
obvious 
+        
+        // If there is an SCA binding for the service add a second one marked 
as
+        // remote in the case where the service interface is remotable. This
+        // service binding provides a separate wire that will be active if 
+        // this service is referenced remotely.  
+        SCABinding clonedSCABinding = null;
+        
+        for (Binding binding : bindings) {
+            if ((binding instanceof SCABinding) &&
+                (service.getInterfaceContract().getInterface().isRemotable())){
+                SCABinding scaBinding = (SCABinding)binding;  
+
+                BindingProviderFactory providerFactory =
+                    
(BindingProviderFactory)providerFactories.getProviderFactory(binding.getClass());
+                if (providerFactory != null) {
+                    
+                    // clone the SCA binding and fill in service details 
+                    try {
+                        clonedSCABinding = 
(SCABinding)((WireableBinding)scaBinding).clone();
+                        ((WireableBinding)clonedSCABinding).setIsRemote(true);
+                    } catch (Exception e) {
+                        // warning("The binding doesn't support clone: " + 
binding.getClass().getSimpleName(), binding);
+                    }  
+                    
+                    @SuppressWarnings("unchecked")
+                    ServiceBindingProvider bindingProvider =
+                        
providerFactory.createServiceBindingProvider((RuntimeComponent)component,
+                                                                     
(RuntimeComponentService)service,
+                                                                     
clonedSCABinding);
+                    if (bindingProvider != null) {
+                        
((RuntimeComponentService)service).setBindingProvider(clonedSCABinding, 
bindingProvider);
+                    }
+                } else {
+                    throw new IllegalStateException("Provider factory not 
found for class: " + binding.getClass().getName());
+                }
+            }
+        }
+        
+        // add the cloned SCA binding to the service as it will be used to 
look up the provider later
+        if (clonedSCABinding != null){
+            service.getBindings().add(clonedSCABinding);            
+        }
     }
 
     private void removeServiceBindingProviders(RuntimeComponent component,
@@ -219,6 +264,8 @@
                 throw new IllegalStateException("Provider factory not found 
for class: " + binding.getClass().getName());
             }
         }
+        
+        // Support for distributed domain follows
         
         // go over any targets that have not been resolved yet (as they are 
running on other nodes)
         // and try an resolve them remotely

Modified: 
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/Calculator.composite
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/Calculator.composite?view=diff&rev=566111&r1=566110&r2=566111
==============================================================================
--- 
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/Calculator.composite
 (original)
+++ 
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/Calculator.composite
 Wed Aug 15 04:51:16 2007
@@ -64,7 +64,7 @@
         <implementation.java class="calculator.SubtractServiceImpl"/>      
     </component-->  
     
-    <!--component name="SubtractServiceComponent2">
+    <!--component name="SubtractServiceComponent">
         <implementation.java class="calculator.SubtractServiceImpl"/>
         <service name="SubtractService">
             <interface.java interface="calculator.SubtractService" />
@@ -77,7 +77,7 @@
         <implementation.java class="calculator.MultiplyServiceImpl" />
     </component>
     
-    <!--component name="MultiplyServiceComponent2">
+    <!--component name="MultiplyServiceComponent">
         <implementation.java class="calculator.MultiplyServiceImpl" />
         <service>
             <interface.java interface="calculator.MultiplyService" />

Modified: 
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/wsdl/subtract.wsdl
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/wsdl/subtract.wsdl?view=diff&rev=566111&r1=566110&r2=566111
==============================================================================
--- 
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/wsdl/subtract.wsdl
 (original)
+++ 
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeA/wsdl/subtract.wsdl
 Wed Aug 15 04:51:16 2007
@@ -80,7 +80,7 @@
     
     <wsdl:service name="SubtractService">
         <wsdl:port binding="tns:SubtractSoapBinding" name="SubtractSoapPort">
-            <wsdlsoap:address 
location="http://localhost:8086/SubtractServiceComponent"/>            
+            <wsdlsoap:address 
location="http://localhost:8088/SubtractServiceComponent"/>            
         </wsdl:port>
     </wsdl:service>
 

Modified: 
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/management/ServiceNotFoundException.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/management/ServiceNotFoundException.java?view=diff&rev=566111&r1=566110&r2=566111
==============================================================================
--- 
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/management/ServiceNotFoundException.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/management/ServiceNotFoundException.java
 Wed Aug 15 04:51:16 2007
@@ -26,5 +26,9 @@
  */
 public class ServiceNotFoundException extends RuntimeException {
     private static final long serialVersionUID = 8612661660934426128L;
+    
+    public ServiceNotFoundException(String message){
+        super(message);
+    }
 
 }



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

Reply via email to