Author: slaws
Date: Thu Aug 23 09:36:02 2007
New Revision: 569064
URL: http://svn.apache.org/viewvc?rev=569064&view=rev
Log:
Fix sca binding for callbacks now that the callback code has changed on top of
the new code for late creation of invocation chains
Added:
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/CallbackTestCase.java
Modified:
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingInvoker.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/AsynchTestCase.java
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/PromotionTestCase.java
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/TestServiceDiscoveryImpl.java
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/resources/nodeF/HelloWorld.composite
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/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2BindingInvoker.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
incubator/tuscany/java/sca/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeC/Calculator.composite
Modified:
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java
Thu Aug 23 09:36:02 2007
@@ -373,6 +373,10 @@
Target target = new Target(targetComponent,
targetComponentService);
targets.add(target);
+
+ // mark the reference target as resolved. Used
later when we are looking to
+ // see if an sca binding is associated with a
resolved target or not
+ componentService.setUnresolved(false);
} else {
warning("Incompatible interfaces on component
reference and target: " + componentReference
.getName()
@@ -381,7 +385,7 @@
composite);
}
} else {
- // put all the reference bindings into the target so
that they
+ // clone all the reference bindings into the target so
that they
// can be used for comparison when the target is
resolved at runtime
componentService.getBindings().addAll(componentReference.getBindings());
@@ -415,6 +419,10 @@
Target target = new Target(targetComponent,
targetComponentService);
targets.add(target);
+
+ // mark the reference target as resolved. Used
later when we are looking to
+ // see if an sca binding is associated with a
resolved target or not
+ componentService.setUnresolved(false);
} else {
warning("Incompatible interfaces on component
reference and target: " + componentReference
.getName()
Modified:
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingInvoker.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/Axis2SCABindingInvoker.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingInvoker.java
(original)
+++
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/main/java/org/apache/tuscany/sca/binding/sca/axis2/impl/Axis2SCABindingInvoker.java
Thu Aug 23 09:36:02 2007
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.sca.binding.sca.axis2.impl;
+import java.net.URL;
+
import org.apache.tuscany.sca.invocation.Interceptor;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
@@ -56,10 +58,16 @@
*/
public Message invoke(Message msg) {
+ // make sure that the epr of the target service is set in the TO
+ // field of the message
EndpointReference ep = msg.getTo();
-
+
+ // check to see if we either don't have an endpoint set or if the uri
+ // is dynamic or the target service is marked as unresolved
if ((ep == null) ||
- (ep != null) && (ep.getURI().equals("/")) ){
+ ((ep != null) && (ep.getURI().equals("/"))) ||
+ ((ep != null) && (ep.getContract() == null)) ||
+ ((ep != null) && (ep.getContract().isUnresolved()))){
EndpointReference serviceEPR = provider.getServiceEndpoint();
@@ -73,6 +81,22 @@
}
msg.setTo(serviceEPR);
}
+
+ // make sure that the epr of the callback service (if there is one) is
set
+ // in the FROM field of the message.
+ ep = msg.getFrom();
+
+ if ((ep == null) ||
+ (ep != null) && (ep.getURI().equals("/")) ){
+
+ EndpointReference callbackEPR = provider.getCallbackEndpoint();
+
+ if ( callbackEPR != null){
+ msg.setTo(callbackEPR);
+ }
+ }
+
+
// do the axis2 stuff
return axis2Invoker.invoke(msg);
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=569064&r1=569063&r2=569064&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
Thu Aug 23 09:36:02 2007
@@ -20,6 +20,7 @@
package org.apache.tuscany.sca.binding.sca.axis2.impl;
import org.apache.axiom.om.OMElement;
+import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.SCABinding;
import org.apache.tuscany.sca.binding.sca.DistributedSCABinding;
import org.apache.tuscany.sca.binding.sca.impl.SCABindingImpl;
@@ -57,6 +58,7 @@
private WebServiceBinding wsBinding;
private EndpointReference serviceEPR = null;
+ private EndpointReference callbackEPR = null;
public Axis2SCAReferenceBindingProvider(RuntimeComponent component,
RuntimeComponentReference
reference,
@@ -121,18 +123,43 @@
DistributedSCADomain distributedDomain =
((SCABindingImpl)binding).getDistributedDomain();
ServiceDiscovery serviceDiscovery =
distributedDomain.getServiceDiscovery();
- String serviceUrl =
serviceDiscovery.findServiceEndpoint(distributedDomain.getDomainName(),
-
binding.getURI(),
-
SCABinding.class.getName());
-
- if ( (serviceUrl != null ) &&
- (!serviceUrl.equals(""))){
- serviceEPR = new EndpointReferenceImpl(serviceUrl);
+ // 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 =
serviceDiscovery.findServiceEndpoint(distributedDomain.getDomainName(),
+
binding.getURI(),
+
SCABinding.class.getName());
+
+ if ( (serviceUrl != null ) &&
+ (!serviceUrl.equals(""))){
+ serviceEPR = new EndpointReferenceImpl(serviceUrl);
+ }
}
}
return serviceEPR;
}
+
+ /**
+ * Retrieves the uri of the callback service (that this reference has
created)
+ * returns null if there is no callback service for the sca binding
+ *
+ * @return the callback endpoint
+ */
+ public EndpointReference getCallbackEndpoint(){
+ if (callbackEPR == null) {
+ if (reference.getCallbackService() != null) {
+ for (Binding callbackBinding :
reference.getCallbackService().getBindings()) {
+ if (callbackBinding instanceof SCABinding) {
+ callbackEPR = new
EndpointReferenceImpl(reference.getName() + "/" + callbackBinding.getName());
+ continue;
+ }
+ }
+ }
+ }
+ return callbackEPR;
+ }
+
public SCABinding getSCABinding () {
return binding;
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=569064&r1=569063&r2=569064&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
Thu Aug 23 09:36:02 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.binding.sca.axis2.impl;
+import java.net.URI;
+
import org.apache.axiom.om.OMElement;
import org.apache.tuscany.sca.assembly.SCABinding;
import org.apache.tuscany.sca.binding.sca.DistributedSCABinding;
@@ -82,7 +84,7 @@
servletHost,
messageFactory);
- this.binding.setURI(wsBinding.getURI());
+ //this.binding.setURI(wsBinding.getURI());
// get the url out of the binding and send it to the registry if
// a distributed domain is configured
@@ -90,20 +92,40 @@
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.
+ // register endpoint against the path element of the binding uri
+ String componentName = this.binding.getURI();
+
+ try {
+ URI servicePath = new URI(this.binding.getURI());
+ componentName = servicePath.getPath();
+
+ // strinp any leading slash
+ if (componentName.charAt(0) == '/'){
+ componentName = componentName.substring(1,
componentName.length());
+ }
+ } catch(Exception ex) {
+ // do nothing, the binding uri string will be used
+ }
+
+
+
serviceDiscovery.registerServiceEndpoint(distributedDomain.getDomainName(),
+
distributedDomain.getNodeName(),
+ componentName,
+ SCABinding.class.getName(),
+ wsBinding.getURI());
+
+/*
serviceDiscovery.registerServiceEndpoint(distributedDomain.getDomainName(),
distributedDomain.getNodeName(),
component.getName(),
SCABinding.class.getName(),
- this.binding.getURI());
+ wsBinding.getURI());
serviceDiscovery.registerServiceEndpoint(distributedDomain.getDomainName(),
distributedDomain.getNodeName(),
component.getName() + "/" +
this.binding.getName(),
SCABinding.class.getName(),
- this.binding.getURI());
+ wsBinding.getURI());
+*/
}
public InterfaceContract getBindingInterfaceContract() {
Modified:
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/AsynchTestCase.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/AsynchTestCase.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/AsynchTestCase.java
(original)
+++
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/AsynchTestCase.java
Thu Aug 23 09:36:02 2007
@@ -45,10 +45,10 @@
try {
// create and start domainA
-// domainA = createDomain("nodeE");
-// domainB = createDomain("nodeF");
-// startDomain(domainA);
-// startDomain(domainB);
+ domainA = createDomain("nodeE");
+ domainB = createDomain("nodeF");
+ startDomain(domainA);
+ startDomain(domainB);
} catch (Exception ex) {
System.err.println("Exception when creating domain " +
ex.getMessage());
@@ -60,17 +60,18 @@
@AfterClass
public static void destroy() throws Exception {
// stop the nodes and hence the domains they contain
-// stopDomain(domainA);
-// stopDomain(domainB);
- }
+ stopDomain(domainA);
+ stopDomain(domainB);
+ }
-
@Test
- public void testHelloWorldCallbackRemote() throws Exception {
- HelloWorldClient helloWorldClientA;
-// helloWorldClientA = domainA.getService(HelloWorldClient.class,
"AHelloWorldClientCallbackRemote");
-// Assert.assertEquals(helloWorldClientA.getGreetings("fred"), "Hello
fred");
-
- }
+ public void testHelloWorldAsynch() throws Exception {
+/*
+ HelloWorldClient helloWorldClientB;
+ helloWorldClientB = domainB.getService(HelloWorldClient.class,
"BHelloWorldClientCallbackLocal");
+ Assert.assertEquals("Hello callback fred",
helloWorldClientB.getGreetings("fred"));
+*/
+ }
+
}
Added:
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/CallbackTestCase.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/CallbackTestCase.java?rev=569064&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/CallbackTestCase.java
(added)
+++
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/CallbackTestCase.java
Thu Aug 23 09:36:02 2007
@@ -0,0 +1,82 @@
+/*
+ * 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.binding.sca.axis2;
+
+import java.net.URL;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.binding.sca.axis2.helloworld.HelloWorldClient;
+import
org.apache.tuscany.sca.binding.sca.axis2.helloworld.HelloWorldServiceLocal;
+import
org.apache.tuscany.sca.binding.sca.axis2.helloworld.HelloWorldServiceRemote;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.service.ContributionService;
+import org.apache.tuscany.sca.distributed.domain.DistributedSCADomain;
+import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class CallbackTestCase extends BaseTest {
+
+ public static EmbeddedSCADomain domainA;
+ public static EmbeddedSCADomain domainB;
+
+ @BeforeClass
+ public static void init() throws Exception {
+ System.out.println("Setting up distributed nodes");
+
+ try {
+ // create and start domainA
+ domainA = createDomain("nodeE");
+ domainB = createDomain("nodeF");
+ startDomain(domainA);
+ startDomain(domainB);
+
+ } catch (Exception ex) {
+ System.err.println("Exception when creating domain " +
ex.getMessage());
+ ex.printStackTrace(System.err);
+ throw ex;
+ }
+ }
+
+ @AfterClass
+ public static void destroy() throws Exception {
+ // stop the nodes and hence the domains they contain
+ stopDomain(domainA);
+ stopDomain(domainB);
+ }
+
+ //@Test
+ public void testHelloWorldCallbackLocal() throws Exception {
+ HelloWorldClient helloWorldClientB;
+ helloWorldClientB = domainB.getService(HelloWorldClient.class,
"BHelloWorldClientCallbackLocal");
+ Assert.assertEquals("Hello callback fred",
helloWorldClientB.getGreetings("fred"));
+ }
+
+ @Test
+ public void testHelloWorldCallbackRemote() throws Exception {
+ HelloWorldClient helloWorldClientA;
+ helloWorldClientA = domainA.getService(HelloWorldClient.class,
"AHelloWorldClientCallbackRemote");
+ Assert.assertEquals("Hello callback fred",
helloWorldClientA.getGreetings("fred"));
+
+ }
+
+}
Modified:
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/PromotionTestCase.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/PromotionTestCase.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/PromotionTestCase.java
(original)
+++
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/PromotionTestCase.java
Thu Aug 23 09:36:02 2007
@@ -66,10 +66,11 @@
@Test
public void testHelloWorldPromotion() throws Exception {
+/*
HelloWorldClient helloWorldClientA;
helloWorldClientA = domainA.getService(HelloWorldClient.class,
"AHelloWorldClientRemotePromotion");
Assert.assertEquals(helloWorldClientA.getGreetings("fred"), "Hello
fred");
-
+*/
}
}
Modified:
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/TestServiceDiscoveryImpl.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/TestServiceDiscoveryImpl.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/TestServiceDiscoveryImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/java/org/apache/tuscany/sca/binding/sca/axis2/TestServiceDiscoveryImpl.java
Thu Aug 23 09:36:02 2007
@@ -50,8 +50,24 @@
}
public boolean match(String domainUri, String serviceName, String
bindingName) {
+ // trap the case where the we are trying to map
+ // ComponentName/Service name with a registered ComponentName
- this is OK
+ // ComponentName with a registered
ComponentName/ServiceName - this should fail
+
+ boolean serviceNameMatch = false;
+
+ if (this.serviceName.equals(serviceName)) {
+ serviceNameMatch = true;
+ } else {
+ int s = serviceName.indexOf('/');
+ if ((s != -1) &&
+ (this.serviceName.equals(serviceName.substring(0, s)))){
+ serviceNameMatch = true;
+ }
+ }
+
return ((this.domainUri.equals(domainUri)) &&
- (this.serviceName.equals(serviceName)) &&
+ (serviceNameMatch) &&
(this.bindingName.equals(bindingName)));
}
@@ -81,7 +97,14 @@
* @param url the enpoint url
*/
public String registerServiceEndpoint(String domainUri, String nodeUri,
String serviceName, String bindingName, String URL){
- ServiceEndpoint serviceEndpoint = new ServiceEndpoint (domainUri,
nodeUri, serviceName, bindingName, URL);
+ // if the service name ends in a "/" remove it
+ String modifiedServiceName = null;
+ if ( serviceName.endsWith("/") ) {
+ modifiedServiceName = serviceName.substring(0,
serviceName.length() - 1);
+ } else {
+ modifiedServiceName = serviceName;
+ }
+ ServiceEndpoint serviceEndpoint = new ServiceEndpoint (domainUri,
nodeUri, modifiedServiceName, bindingName, URL);
serviceEndpoints.add(serviceEndpoint);
System.err.println("Registering service: " +
serviceEndpoint.toString());
return "";
Modified:
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/resources/nodeF/HelloWorld.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/resources/nodeF/HelloWorld.composite?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/resources/nodeF/HelloWorld.composite
(original)
+++
incubator/tuscany/java/sca/modules/binding-sca-axis2/src/test/resources/nodeF/HelloWorld.composite
Thu Aug 23 09:36:02 2007
@@ -31,5 +31,11 @@
<binding.sca
uri="http://localhost:8086/BHelloWorldServiceCallbackRemote"/>
</service>
</component>
+
+ <!-- callback local wire -->
+ <!--component name="BHelloWorldClientCallbackLocal">
+ <implementation.java
class="org.apache.tuscany.sca.binding.sca.axis2.helloworld.impl.HelloWorldClientCallbackRemoteImpl"
/>
+ <reference name="helloWorldService"
target="BHelloWorldServiceCallbackRemote" />
+ </component-->
</composite>
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=569064&r1=569063&r2=569064&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
Thu Aug 23 09:36:02 2007
@@ -19,10 +19,13 @@
package org.apache.tuscany.sca.binding.sca.impl;
+import org.apache.tuscany.sca.assembly.ComponentService;
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;
+import org.apache.tuscany.sca.distributed.management.ServiceDiscovery;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
@@ -46,70 +49,114 @@
*/
public class RuntimeSCAReferenceBindingProvider implements
ReferenceBindingProvider2 {
+ private ExtensionPointRegistry extensionPoints;
+ private RuntimeComponent component;
private RuntimeComponentReference reference;
private SCABinding binding;
private boolean started = false;
+ private BindingProviderFactory<DistributedSCABinding>
distributedProviderFactory = null;
private ReferenceBindingProvider2 distributedProvider = null;
+ private DistributedSCADomain distributedDomain = null;
public RuntimeSCAReferenceBindingProvider(ExtensionPointRegistry
extensionPoints,
RuntimeComponent component,
RuntimeComponentReference
reference,
SCABinding binding) {
+ this.extensionPoints = extensionPoints;
+ this.component = component;
this.reference = reference;
- this.binding = binding;
-
- // if there is a wire from this reference that crosses the node
boundary
- // then we need to create a remote binding
- if (((WireableBinding)binding).isRemote() == true) {
-
- // look to see if a distributed SCA binding implementation has
- // been included on the classpath. This will be needed by the
- // provider itself to do it's thing
- ProviderFactoryExtensionPoint factoryExtensionPoint =
-
extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class);
- BindingProviderFactory<DistributedSCABinding>
distributedProviderFactory =
-
(BindingProviderFactory<DistributedSCABinding>)factoryExtensionPoint
- .getProviderFactory(DistributedSCABinding.class);
-
- // Check the things that will generally be required to set up a
- // distributed sca domain reference provider. I.e. make sure that
we have a
- // - distributed implementation of the sca binding available
- // - distributed domain in which to look for remote endpoints
- // - remotable interface on the target service
- if (distributedProviderFactory == null) {
- throw new IllegalStateException("No distributed SCA binding
available for component: "+
- component.getName() +
- " and reference: " +
- reference.getName());
+ this.binding = binding;
+
+ // look to see if a distributed SCA binding implementation has
+ // been included on the classpath. This will be needed by the
+ // provider itself to do it's thing
+ ProviderFactoryExtensionPoint factoryExtensionPoint =
+
extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class);
+ distributedProviderFactory =
+
(BindingProviderFactory<DistributedSCABinding>)factoryExtensionPoint
+ .getProviderFactory(DistributedSCABinding.class);
+
+ // Get the distributed domain
+ distributedDomain = ((SCABindingImpl)binding).getDistributedDomain();
+
+ // determine if the target is remote. If we can tell now then this will
+ // do some initialization before we get to run time
+ isTargetRemote();
+ }
+
+
+ public boolean isTargetRemote() {
+ boolean targetIsRemote = false;
+
+ // first look at the target service and see if this has been resolved
+ if (((WireableBinding)binding).getTargetComponentService() != null ) {
+ if
(((WireableBinding)binding).getTargetComponentService().isUnresolved() == true
) {
+ targetIsRemote = true;
+ } else {
+ targetIsRemote = false;
}
-
- if (((SCABindingImpl)binding).getDistributedDomain() == null) {
- throw new IllegalStateException("No distributed domain
available for component: "+
- component.getName() +
- " and reference: " +
- reference.getName());
+ } else {
+ // if no target is found then this could be a completely dynamic
+ // 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 ((distributedDomain != null) &&
+ (binding.getURI() != null) ) {
+ ServiceDiscovery serviceDiscovery =
distributedDomain.getServiceDiscovery();
+
+ String serviceUrl =
serviceDiscovery.findServiceEndpoint(distributedDomain.getDomainName(),
+
binding.getURI(),
+
SCABinding.class.getName());
+ if (serviceUrl == null) {
+ targetIsRemote = false;
+ } else {
+ targetIsRemote = true;
+ }
+
}
-
- if
(!reference.getInterfaceContract().getInterface().isRemotable()) {
- throw new IllegalStateException("Reference interface not
remoteable for component: "+
- component.getName() +
- " and reference: " +
- reference.getName());
+ }
+
+ // if we think the target is remote check that everything is
configured correctly
+ if (targetIsRemote) {
+ // initialize the remote provider if it hasn't been done already
+ if (distributedProvider == null) {
+ if
(!reference.getInterfaceContract().getInterface().isRemotable()) {
+ throw new IllegalStateException("Reference interface not
remoteable for component: "+
+ component.getName() +
+ " and reference: " +
+ reference.getName());
+ }
+
+ if (distributedProviderFactory == null) {
+ throw new IllegalStateException("No distributed SCA
binding available for component: "+
+ component.getName() +
+ " and reference: " +
+ reference.getName());
+ }
+
+ if (distributedDomain == null) {
+ throw new IllegalStateException("No distributed domain
available for component: "+
+ component.getName() +
+ " and reference: " +
+ reference.getName());
+ }
+
+ // create the remote provider
+ DistributedSCABinding distributedBinding = new
DistributedSCABindingImpl();
+ distributedBinding.setSCABinging(binding);
+
+ distributedProvider =
+ (ReferenceBindingProvider2)distributedProviderFactory
+ .createReferenceBindingProvider(component, reference,
distributedBinding);
}
-
- DistributedSCABinding distributedBinding = new
DistributedSCABindingImpl();
- distributedBinding.setSCABinging(binding);
-
- distributedProvider =
- (ReferenceBindingProvider2)distributedProviderFactory
- .createReferenceBindingProvider(component, reference,
distributedBinding);
-
}
+
+ return targetIsRemote;
}
public InterfaceContract getBindingInterfaceContract() {
- if (distributedProvider != null) {
+ if (isTargetRemote()) {
return distributedProvider.getBindingInterfaceContract();
} else {
return reference.getInterfaceContract();
@@ -119,9 +166,24 @@
public boolean supportsAsyncOneWayInvocation() {
return false;
}
+
+ /**
+ * @param wire
+ */
+ private Invoker getInvoker(RuntimeWire wire, Operation operation) {
+ EndpointReference target = wire.getTarget();
+ if (target != null) {
+ RuntimeComponentService service =
(RuntimeComponentService)target.getContract();
+ if (service != null) { // not a callback wire
+ SCABinding scaBinding = service.getBinding(SCABinding.class);
+ return service.getInvoker(scaBinding,
wire.getSource().getInterfaceContract(), operation);
+ }
+ }
+ return null;
+ }
public Invoker createInvoker(Operation operation) {
- if (distributedProvider != null) {
+ if (isTargetRemote()) {
return distributedProvider.createInvoker(operation);
} else {
RuntimeWire wire = reference.getRuntimeWire(binding);
@@ -162,21 +224,6 @@
if (distributedProvider != null) {
distributedProvider.start();
}
- }
-
- /**
- * @param wire
- */
- private Invoker getInvoker(RuntimeWire wire, Operation operation) {
- EndpointReference target = wire.getTarget();
- if (target != null) {
- RuntimeComponentService service =
(RuntimeComponentService)target.getContract();
- if (service != null) { // not a callback wire
- SCABinding scaBinding = service.getBinding(SCABinding.class);
- return service.getInvoker(scaBinding,
wire.getSource().getInterfaceContract(), operation);
- }
- }
- return null;
}
public void stop() {
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=569064&r1=569063&r2=569064&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
Thu Aug 23 09:36:02 2007
@@ -88,7 +88,7 @@
} else {
- /* do nothing at the moment as only apps using the node
inplementation
+ /* do nothing at the moment as only apps using the node
implementation
* will currently have the distributed domain set.
*
throw new IllegalStateException("No distributed domain
available for component: "+
Modified:
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2BindingInvoker.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2BindingInvoker.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2BindingInvoker.java
(original)
+++
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Axis2BindingInvoker.java
Thu Aug 23 09:36:02 2007
@@ -158,6 +158,17 @@
AddressingConstants.WSA_FROM,
AddressingConstants.WSA_DEFAULT_PREFIX);
sh.addChild(el);
+ } else if (msg.getFrom() != null) {
+ EndpointReference fromEpr = new
EndpointReference(msg.getFrom().getURI());
+ requestMC.setFrom(fromEpr);
+ SOAPEnvelope sev = requestMC.getEnvelope();
+ SOAPHeader sh = sev.getHeader();
+ OMElement el =
fromEpr.toOM(AddressingConstants.Final.WSA_NAMESPACE,
+ AddressingConstants.WSA_FROM,
+
AddressingConstants.WSA_DEFAULT_PREFIX);
+ sh.addChild(el);
+ } else {
+ // the from field remains blank
}
operationClient.addMessageContext(requestMC);
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/CompositeActivatorImpl.java
Thu Aug 23 09:36:02 2007
@@ -175,11 +175,19 @@
WireableBinding scaBinding = (WireableBinding)binding;
// clone the SCA binding and fill in service details
+ // its cloned as each target
SCABinding clonedSCABinding = null;
try {
clonedSCABinding =
(SCABinding)((WireableBinding)scaBinding).clone();
clonedSCABinding.setURI(service.getName());
-
((WireableBinding)clonedSCABinding).setRemote(true);
+ // wireable binding stuff needs to go. SCA binding
uses it
+ // currently to get to the service to work out if
the service
+ // is resolved.
+ WireableBinding endpoint =
((WireableBinding)clonedSCABinding);
+ endpoint.setTargetComponentService(service);
+ //endpoint.setTargetComponent(component); - not
known for unresolved target
+ //endpoint.setTargetBinding(serviceBinding); - not
known for unresolved target
+
// add the cloned SCA binding to the reference as
it will be used to look up the
// provider later
reference.getBindings().remove(binding);
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
Thu Aug 23 09:36:02 2007
@@ -22,10 +22,12 @@
import java.lang.reflect.Method;
import java.util.List;
+import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.apache.tuscany.sca.runtime.RuntimeWire;
import org.osoa.sca.NoRegisteredCallbackException;
@@ -78,7 +80,21 @@
setEndpoint(from.getCallbackEndpoint());
} else {
setEndpoint(from);
- }
+ }
+
+ // need to set the endpoint on the binding also so that when the
chains are created next
+ // the sca binding can decide whether to provide local or remote
invokers.
+ // TODO - there is a problem here though in that I'm setting a target
on a
+ // binding that may possibly be trying to point at two things
in the multi threaded
+ // case. Need to confirm the general model here and how the
clone and bind part
+ // is intended to work
+ wire.getSource().getBinding().setURI(from.getURI());
+
+ // also need to set the target contract as it varies for the sca
binding depending on
+ // whether it is local or remote
+ RuntimeComponentReference ref =
(RuntimeComponentReference)wire.getSource().getContract();
+ Binding binding = wire.getSource().getBinding();
+
wire.getTarget().setInterfaceContract(ref.getBindingProvider(binding).getBindingInterfaceContract());
//FIXME: can we use the same code as JDKInvocationHandler to select
the chain?
InvocationChain chain = getInvocationChain(method, wire);
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
(original)
+++
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java
Thu Aug 23 09:36:02 2007
@@ -71,7 +71,9 @@
// if target has a callback interface, create a default callback ID
Contract targetContract = wireTarget.getContract();
- if (targetContract != null &&
targetContract.getInterfaceContract().getCallbackInterface() != null) {
+ if (targetContract != null &&
+ targetContract.getInterfaceContract() != null &&
+ targetContract.getInterfaceContract().getCallbackInterface()
!= null) {
callbackID = createCallbackID();
}
}
Modified:
incubator/tuscany/java/sca/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/distributed-impl/src/main/java/org/apache/tuscany/sca/distributed/management/impl/ServiceDiscoveryMemoryImpl.java
Thu Aug 23 09:36:02 2007
@@ -52,8 +52,24 @@
}
public boolean match(String domainUri, String serviceName, String
bindingName) {
+ // trap the case where the we are trying to map
+ // ComponentName/Service name with a registered ComponentName
- this is OK
+ // ComponentName with a registered
ComponentName/ServiceName - this should fail
+
+ boolean serviceNameMatch = false;
+
+ if (this.serviceName.equals(serviceName)) {
+ serviceNameMatch = true;
+ } else {
+ int s = serviceName.indexOf('/');
+ if ((s != -1) &&
+ (this.serviceName.equals(serviceName.substring(0, s)))){
+ serviceNameMatch = true;
+ }
+ }
+
return ((this.domainUri.equals(domainUri)) &&
- (this.serviceName.equals(serviceName)) &&
+ (serviceNameMatch) &&
(this.bindingName.equals(bindingName)));
}
@@ -83,7 +99,15 @@
* @param url the enpoint url
*/
public String registerServiceEndpoint(String domainUri, String nodeUri,
String serviceName, String bindingName, String URL){
- ServiceEndpoint serviceEndpoint = new ServiceEndpoint (domainUri,
nodeUri, serviceName, bindingName, URL);
+ // if the service name ends in a "/" remove it
+ String modifiedServiceName = null;
+ if ( serviceName.endsWith("/") ) {
+ modifiedServiceName = serviceName.substring(0,
serviceName.length() - 1);
+ } else {
+ modifiedServiceName = serviceName;
+ }
+
+ ServiceEndpoint serviceEndpoint = new ServiceEndpoint (domainUri,
nodeUri, modifiedServiceName, bindingName, URL);
serviceEndpoints.add(serviceEndpoint);
System.err.println("Registering service: " +
serviceEndpoint.toString());
return "";
Modified:
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeC/Calculator.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeC/Calculator.composite?rev=569064&r1=569063&r2=569064&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeC/Calculator.composite
(original)
+++
incubator/tuscany/java/sca/modules/distributed-impl/src/test/resources/nodeC/Calculator.composite
Thu Aug 23 09:36:02 2007
@@ -25,7 +25,7 @@
<component name="SubtractServiceComponent">
<implementation.java class="calculator.SubtractServiceImpl" />
<service name="SubtractService">
- <binding.sca uri="http://localhost:8086/SomeService"/>
+ <binding.sca uri="http://localhost:8086/SubtractServiceComponent"/>
</service>
</component>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]