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]