You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2011/05/21 06:35:44 UTC
svn commit: r1125636 - in /tuscany/sca-java-2.x/trunk/modules:
binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/
core/src/main/java/org/apache/tuscany/sca/core/context/impl/
node-impl/src/test/java/hello/ node-impl/src/test...
Author: rfeng
Date: Sat May 21 04:35:44 2011
New Revision: 1125636
URL: http://svn.apache.org/viewvc?rev=1125636&view=rev
Log:
Allows pass -by-reference for self references
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorld.java
tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorldImpl.java
tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java
Modified: tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java?rev=1125636&r1=1125635&r2=1125636&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java Sat May 21 04:35:44 2011
@@ -148,7 +148,9 @@ public class RuntimeSCAReferenceBindingP
} else {
Reference ref = epr.getReference().getReference();
// The spec says both ref and service needs to allowsPassByReference
- boolean allowsPBR = (ref != null && ref.isAllowsPassByReference()) && chain.allowsPassByReference();
+ boolean allowsPBR =
+ (epr.getReference().isAllowsPassByReference() || (ref != null && ref.isAllowsPassByReference())) && chain
+ .allowsPassByReference();
if (allowsPBR && interfaceContractMapper.isCompatibleByReference(operation,
targetOp,
Modified: tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java?rev=1125636&r1=1125635&r2=1125636&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java Sat May 21 04:35:44 2011
@@ -106,17 +106,18 @@ public class ComponentContextImpl implem
}
public <B> B getService(Class<B> businessInterface, String referenceName) throws IllegalArgumentException {
- B service = null;
-
- ServiceReference<B> serviceRef = getServiceReference(businessInterface, referenceName);
- if(serviceRef != null) {
+ B service = null;
+
+ ServiceReference<B> serviceRef = getServiceReference(businessInterface, referenceName);
+ if (serviceRef != null) {
service = serviceRef.getService();
- }
+ }
return service;
}
- public <B> ServiceReference<B> getServiceReference(Class<B> businessInterface, String referenceName) throws IllegalArgumentException {
+ public <B> ServiceReference<B> getServiceReference(Class<B> businessInterface, String referenceName)
+ throws IllegalArgumentException {
for (ComponentReference ref : component.getReferences()) {
if (referenceName.equals(ref.getName())) {
@@ -129,7 +130,8 @@ public class ComponentContextImpl implem
if (ref.getEndpointReferences().size() < 1) {
return null;
}
- ServiceReference<B> sr = getServiceReference(businessInterface, (RuntimeEndpointReference)getEndpointReference(ref));
+ ServiceReference<B> sr =
+ getServiceReference(businessInterface, (RuntimeEndpointReference)getEndpointReference(ref));
if (sr == null) {
throw new IllegalArgumentException("Reference " + referenceName + " is null");
}
@@ -181,10 +183,10 @@ public class ComponentContextImpl implem
}
}
//TUSCANY-3543
- if(returnEp == null) {
+ if (returnEp == null) {
returnEp = eps.get(0);
}
-
+
return returnEp;
}
@@ -213,7 +215,7 @@ public class ComponentContextImpl implem
public <B> B getProperty(Class<B> type, String propertyName) {
for (ComponentProperty p : component.getProperties()) {
if (propertyName.equals(p.getName())) {
- return propertyFactory.createPropertyValue(p, type);
+ return propertyFactory.createPropertyValue(p, type);
}
}
throw new IllegalArgumentException("Property not found: " + propertyName);
@@ -251,7 +253,7 @@ public class ComponentContextImpl implem
try {
return createSelfReference(businessInterface, service);
} catch (IllegalArgumentException iae) {
- throw iae;
+ throw iae;
} catch (Exception e) {
throw new ServiceRuntimeException(e.getMessage(), e);
}
@@ -279,7 +281,7 @@ public class ComponentContextImpl implem
}
throw new IllegalArgumentException("Service not found: " + serviceName);
} catch (IllegalArgumentException iae) {
- throw iae;
+ throw iae;
} catch (ServiceRuntimeException e) {
throw e;
} catch (Exception e) {
@@ -300,7 +302,7 @@ public class ComponentContextImpl implem
ref.setComponent(component);
return getServiceReference(businessInterface, ref);
} catch (IllegalArgumentException iae) {
- throw iae;
+ throw iae;
} catch (Exception e) {
throw new ServiceRuntimeException(e);
}
@@ -323,8 +325,8 @@ public class ComponentContextImpl implem
*/
public <B> ServiceReference<B> getServiceReference(Class<B> businessInterface,
RuntimeEndpointReference endpointReference) {
- ServiceReference<B> result = null;
-
+ ServiceReference<B> result = null;
+
try {
InterfaceContract interfaceContract = endpointReference.getComponentTypeReferenceInterfaceContract();
if (businessInterface == null) {
@@ -333,24 +335,26 @@ public class ComponentContextImpl implem
RuntimeComponentReference ref = (RuntimeComponentReference)endpointReference.getReference();
InterfaceContract refInterfaceContract = getInterfaceContract(interfaceContract, businessInterface);
if (refInterfaceContract != null) {
- if (refInterfaceContract != interfaceContract) {
- ref = (RuntimeComponentReference)ref.clone();
- if (interfaceContract != null) {
- ref.setInterfaceContract(interfaceContract);
- } else {
- ref.setInterfaceContract(refInterfaceContract);
- }
- }
-
- ref.setComponent(component);
- result = new ServiceReferenceImpl<B>(businessInterface, endpointReference, component.getComponentContext().getCompositeContext());
+ if (refInterfaceContract != interfaceContract) {
+ ref = (RuntimeComponentReference)ref.clone();
+ if (interfaceContract != null) {
+ ref.setInterfaceContract(interfaceContract);
+ } else {
+ ref.setInterfaceContract(refInterfaceContract);
+ }
+ }
+
+ ref.setComponent(component);
+ result =
+ new ServiceReferenceImpl<B>(businessInterface, endpointReference, component.getComponentContext()
+ .getCompositeContext());
}
- } catch (IllegalArgumentException iae ) {
- throw iae;
+ } catch (IllegalArgumentException iae) {
+ throw iae;
} catch (Exception e) {
throw new ServiceRuntimeException(e);
}
-
+
return result;
}
@@ -365,7 +369,7 @@ public class ComponentContextImpl implem
ref.setComponent(component);
return new ServiceReferenceImpl<B>(businessInterface, ref, compositeContext);
} catch (IllegalArgumentException iae) {
- throw iae;
+ throw iae;
} catch (Exception e) {
throw new ServiceRuntimeException(e);
}
@@ -401,6 +405,9 @@ public class ComponentContextImpl implem
componentReference.getRequiredIntents().addAll(service.getRequiredIntents());
componentReference.getBindings().add(endpoint.getBinding());
+ // For the self-reference, allows pass by reference
+ componentReference.setAllowsPassByReference(true);
+
InterfaceContract interfaceContract = service.getInterfaceContract();
Service componentTypeService = service.getService();
if (componentTypeService != null && componentTypeService.getInterfaceContract() != null) {
@@ -453,7 +460,7 @@ public class ComponentContextImpl implem
if (businessInterface.isAssignableFrom(cls)) {
compatible = true;
}
- if(!compatible) {
+ if (!compatible) {
InterfaceContract biContract = javaInterfaceFactory.createJavaInterfaceContract();
JavaInterface callInterface = javaInterfaceFactory.createJavaInterface(businessInterface);
biContract.setInterface(callInterface);
@@ -461,16 +468,18 @@ public class ComponentContextImpl implem
biContract.setCallbackInterface(javaInterfaceFactory.createJavaInterface(callInterface
.getCallbackClass()));
}
- InterfaceContractMapper ifcm = registry.getExtensionPoint(InterfaceContractMapper.class);
- compatible = ifcm.isCompatibleSubset(biContract , interfaceContract);
+ InterfaceContractMapper ifcm = registry.getExtensionPoint(InterfaceContractMapper.class);
+ compatible = ifcm.isCompatibleSubset(biContract, interfaceContract);
}
}
}
-
- if(!compatible) {
- // JCA-9011
- throw new IllegalArgumentException("Business interface " + businessInterface.getName() + " is not compatible with " + interfaceContract.getInterface());
+
+ if (!compatible) {
+ // JCA-9011
+ throw new IllegalArgumentException("Business interface " + businessInterface.getName()
+ + " is not compatible with "
+ + interfaceContract.getInterface());
}
return interfaceContract;
@@ -497,11 +506,13 @@ public class ComponentContextImpl implem
try {
for (ComponentReference ref : component.getReferences()) {
if (referenceName.equals(ref.getName())) {
- if ( ref.getMultiplicity() == Multiplicity.ONE_ONE )
- throw new IllegalArgumentException("Reference " + referenceName + " is not a valid argument for getServiceReferences because it has a multiplicity of 1..1");
- if (ref.getMultiplicity() == Multiplicity.ZERO_ONE)
- throw new IllegalArgumentException("Reference " + referenceName + " is not a valid argument for getServiceReferences because it has a multiplicity of 0..1");
-
+ if (ref.getMultiplicity() == Multiplicity.ONE_ONE)
+ throw new IllegalArgumentException("Reference " + referenceName
+ + " is not a valid argument for getServiceReferences because it has a multiplicity of 1..1");
+ if (ref.getMultiplicity() == Multiplicity.ZERO_ONE)
+ throw new IllegalArgumentException("Reference " + referenceName
+ + " is not a valid argument for getServiceReferences because it has a multiplicity of 0..1");
+
ArrayList<ServiceReference<B>> serviceRefs = new ArrayList<ServiceReference<B>>();
for (EndpointReference endpointReference : ref.getEndpointReferences()) {
RuntimeEndpointReference epr = (RuntimeEndpointReference)endpointReference;
@@ -512,7 +523,7 @@ public class ComponentContextImpl implem
}
throw new IllegalArgumentException("Reference not found: " + referenceName);
} catch (IllegalArgumentException iae) {
- throw iae;
+ throw iae;
} catch (ServiceRuntimeException e) {
throw e;
} catch (Exception e) {
Modified: tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorld.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorld.java?rev=1125636&r1=1125635&r2=1125636&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorld.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorld.java Sat May 21 04:35:44 2011
@@ -27,4 +27,11 @@ import org.oasisopen.sca.annotation.Remo
@Remotable
public interface HelloWorld {
String hello(String name);
+
+ Message echo(Message msg);
+
+ public class Message {
+ public String name;
+ public String message;
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorldImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorldImpl.java?rev=1125636&r1=1125635&r2=1125636&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorldImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/hello/HelloWorldImpl.java Sat May 21 04:35:44 2011
@@ -19,6 +19,8 @@
package hello;
+import org.oasisopen.sca.annotation.AllowsPassByReference;
+
/**
* HelloWorldImpl
*/
@@ -27,4 +29,10 @@ public class HelloWorldImpl implements H
System.out.println("Hello: " + name);
return "Hello, " + name;
}
+
+ @Override
+ @AllowsPassByReference
+ public Message echo(Message msg) {
+ return msg;
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java?rev=1125636&r1=1125635&r2=1125636&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java Sat May 21 04:35:44 2011
@@ -125,7 +125,12 @@ public class NodeImplTestCase {
address = node.getEndpointAddress("HelloWorld/HelloWorld/HelloWorld");
Assert.assertNotNull(address);
address = node.getEndpointAddress("HelloWorld/HelloWorld1");
- Assert.assertNull(address);
+ Assert.assertNull(address);
+
+ HelloWorld.Message msg = new HelloWorld.Message();
+ msg.name = "John";
+ msg.message = "Hi";
+ Assert.assertSame(msg, hw.echo(msg));
node.stop();
}