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 2009/10/10 00:55:37 UTC

svn commit: r823730 - in /tuscany/java/sca/modules: binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/ binding-jsonp-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonp/runtime/ binding-jsonrpc-runtime/src/main/java...

Author: rfeng
Date: Fri Oct  9 22:55:37 2009
New Revision: 823730

URL: http://svn.apache.org/viewvc?rev=823730&view=rev
Log:
Improve the bindings to avoid data copy 

Modified:
    tuscany/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java
    tuscany/java/sca/modules/binding-jsonp-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonp/runtime/JSONPInvoker.java
    tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
    tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCClientInvoker.java
    tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
    tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java

Modified: tuscany/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java?rev=823730&r1=823729&r2=823730&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java (original)
+++ tuscany/java/sca/modules/binding-atom-runtime/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java Fri Oct  9 22:55:37 2009
@@ -40,6 +40,7 @@
 import org.apache.tuscany.sca.binding.atom.collection.NotFoundException;
 import org.apache.tuscany.sca.data.collection.Entry;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.oasisopen.sca.ServiceRuntimeException;
@@ -49,7 +50,7 @@
  * 
  * @version $Rev$ $Date$
  */
-class AtomBindingInvoker implements Invoker {
+class AtomBindingInvoker implements Invoker, DataExchangeSemantics {
     
     private static final Factory abderaFactory = Abdera.getNewFactory();
     private static final Parser abderaParser = Abdera.getNewParser();
@@ -507,4 +508,8 @@
         }
     }
 
+    public boolean allowsPassByReference() {
+        return true;
+    }
+
 }

Modified: tuscany/java/sca/modules/binding-jsonp-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonp/runtime/JSONPInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jsonp-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonp/runtime/JSONPInvoker.java?rev=823730&r1=823729&r2=823730&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jsonp-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonp/runtime/JSONPInvoker.java (original)
+++ tuscany/java/sca/modules/binding-jsonp-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonp/runtime/JSONPInvoker.java Fri Oct  9 22:55:37 2009
@@ -34,6 +34,7 @@
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.tuscany.sca.assembly.EndpointReference;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.codehaus.jackson.JsonGenerationException;
@@ -41,7 +42,7 @@
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;
 
-public class JSONPInvoker implements Invoker {
+public class JSONPInvoker implements Invoker, DataExchangeSemantics {
     
     protected Operation operation;
     protected EndpointReference endpoint;
@@ -157,5 +158,8 @@
         Object[] args = (Object[])mapper.readValue("[" + jsonRequest +"]", c);
         return args;
     }
-
+    
+    public boolean allowsPassByReference() {
+        return true;
+    }
 }

Modified: tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java?rev=823730&r1=823729&r2=823730&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java (original)
+++ tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java Fri Oct  9 22:55:37 2009
@@ -25,6 +25,7 @@
 import org.apache.tuscany.sca.assembly.EndpointReference;
 import org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.json.JSONArray;
@@ -35,7 +36,7 @@
  * 
  * @version $Rev$ $Date$
  */
-public class JSONRPCBindingInvoker implements Invoker {
+public class JSONRPCBindingInvoker implements Invoker, DataExchangeSemantics {
     private EndpointReference endpointReference;
     private Operation operation;
     private String uri;
@@ -139,4 +140,8 @@
 
         return jsonRequest;
     }
+    
+    public boolean allowsPassByReference() {
+        return true;
+    }    
 }

Modified: tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCClientInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCClientInvoker.java?rev=823730&r1=823729&r2=823730&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCClientInvoker.java (original)
+++ tuscany/java/sca/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCClientInvoker.java Fri Oct  9 22:55:37 2009
@@ -26,6 +26,7 @@
 import org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
+import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.jabsorb.client.Client;
@@ -37,7 +38,7 @@
  * 
  * @version $Rev$ $Date$
  */
-public class JSONRPCClientInvoker implements Invoker {
+public class JSONRPCClientInvoker implements Invoker, DataExchangeSemantics {
     private EndpointReference endpointReference;
     private Operation operation;
     private Method method;
@@ -69,5 +70,8 @@
         }
         return msg;
     }
-
+    
+    public boolean allowsPassByReference() {
+        return true;
+    }
 }

Modified: tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?rev=823730&r1=823729&r2=823730&view=diff
==============================================================================
--- tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java (original)
+++ tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java Fri Oct  9 22:55:37 2009
@@ -20,6 +20,8 @@
 
 import java.io.IOException;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -228,7 +230,11 @@
             return false;
         }
         Class<?> componentType = physical.getComponentType();
-        DataType logical = new DataTypeImpl(componentType, dataType.getLogical());
+        Type genericComponentType = componentType;
+        if(dataType.getGenericType() instanceof GenericArrayType) {
+            genericComponentType = ((GenericArrayType) dataType.getGenericType()).getGenericComponentType();
+        }
+        DataType logical = new DataTypeImpl(dataType.getDataBinding(), componentType, genericComponentType, dataType.getLogical());
         introspectType(logical, operation);
         dataType.setDataBinding("java:array");
         dataType.setLogical(logical);

Modified: tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java?rev=823730&r1=823729&r2=823730&view=diff
==============================================================================
--- tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java (original)
+++ tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java Fri Oct  9 22:55:37 2009
@@ -476,12 +476,14 @@
         // If no databinding was specified, introspect the given arg to
         // determine its databinding
         if (dataBinding == null) {
-            dataType = dataBindings.introspectType(data, operation);
-            if (dataType != null) {
-                String db = dataType.getDataBinding();
-                dataBinding = dataBindings.getDataBinding(db);
-                if (dataBinding == null && db != null) {
-                    return data;
+            if (!"java:array".equals(dataType.getDataBinding())) {
+                dataType = dataBindings.introspectType(data, operation);
+                if (dataType != null) {
+                    String db = dataType.getDataBinding();
+                    dataBinding = dataBindings.getDataBinding(db);
+                    if (dataBinding == null && db != null) {
+                        return data;
+                    }
                 }
             }
             if (dataBinding == null) {