Author: rfeng
Date: Wed Aug 22 12:30:56 2007
New Revision: 568735

URL: http://svn.apache.org/viewvc?rev=568735&view=rev
Log:
Apply Simon's path for TUSCANY-1500.

Added:
    
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java
      - copied, changed from r568686, 
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java
    
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/
    
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
   (with props)
Removed:
    
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java
Modified:
    
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java

Modified: 
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/itest/callback-api/src/main/java/org/apache/tuscany/sca/test/CallBackApiServiceImpl.java
 Wed Aug 22 12:30:56 2007
@@ -69,7 +69,7 @@
         System.out.println("CallBackApiServiceImpl getting request context");
         RequestContext rc = componentContext.getRequestContext();
         System.out.println("CallBackApiServiceImpl getting callback from 
request context");
-        callback = (CallBackApiCallBack) ((ServiceReference) 
rc.getServiceReference()).getCallback();
+        callback = rc.getCallback();
         System.out.println("CallBackApiServiceImpl returning callback");
         return callback;
 

Copied: 
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java
 (from r568686, 
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java)
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java?p2=incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java&p1=incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java&r1=568686&r2=568735&rev=568735&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCaseFIXME.java
 (original)
+++ 
incubator/tuscany/java/sca/itest/callback-api/src/test/java/org/apache/tuscany/sca/test/CallBackApiTestCase.java
 Wed Aug 22 12:30:56 2007
@@ -22,8 +22,7 @@
 
 import org.apache.tuscany.sca.host.embedded.SCADomain;
 
-//FIXME Fix this test case
-public class CallBackApiTestCaseFIXME extends TestCase {
+public class CallBackApiTestCase extends TestCase {
 
     private SCADomain domain;
     private CallBackApiClient aCallBackClient;
@@ -34,15 +33,14 @@
 
     @Override
     protected void setUp() throws Exception {
-       domain = SCADomain.newInstance("CallBackApiTest.composite");
-       
-        aCallBackClient =
-            domain.getService(CallBackApiClient.class, "CallBackApiClient");
+        domain = SCADomain.newInstance("CallBackApiTest.composite");
+
+        aCallBackClient = domain.getService(CallBackApiClient.class, 
"CallBackApiClient");
     }
-    
+
     @Override
     protected void tearDown() throws Exception {
-       domain.close();
+        domain.close();
     }
 
 }

Added: 
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java?rev=568735&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
 Wed Aug 22 12:30:56 2007
@@ -0,0 +1,62 @@
+/*
+ * 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.ws.addressing;
+
+import java.net.URI;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Defines a model for WS-Addressing
+ * <wsa:EndpointReference>
+ *     <wsa:Address>xs:anyURI</wsa:Address>
+ *     <wsa:ReferenceProperties>... </wsa:ReferenceProperties> ?
+ *     <wsa:ReferenceParameters>... </wsa:ReferenceParameters> ?
+ *     <wsa:PortType>xs:QName</wsa:PortType> ?
+ *     <wsa:ServiceName 
PortName="xs:NCName"?>xs:QName</wsa:ServiceName> ?
+ *     <wsp:Policy> ... </wsp:Policy>*
+ * </wsa:EndpointReference>
+ * @version $Rev$ $Date$
+ */
+public interface EndPointReference {
+    URI getAddress();
+
+    void setAddress(URI address);
+
+    QName getPortType();
+
+    void setPortType(QName portType);
+
+    QName getServiceName();
+
+    void setServiceName(QName serviceName);
+
+    QName getPortName();
+
+    void setPortName(QName portName);
+
+    List<Object> getReferenceProperties();
+
+    List<Object> getReferenceParameters();
+
+    List<Object> getPolicies();
+
+}

Propchange: 
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/binding-ws/src/main/java/org/apache/tuscany/sca/binding/ws/addressing/EndPointReference.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/CallableReferenceImpl.java
 Wed Aug 22 12:30:56 2007
@@ -69,7 +69,7 @@
         super();
     }
 
-    public CallableReferenceImpl(Class<B> businessInterface,
+    protected CallableReferenceImpl(Class<B> businessInterface,
                                     RuntimeComponent component,
                                     RuntimeComponentReference reference,
                                     Binding binding,
@@ -88,7 +88,7 @@
         this.factory = getObjectFactory();
     }
 
-    public CallableReferenceImpl(Class<B> businessInterface, 
WireObjectFactory<B> factory) {
+    protected CallableReferenceImpl(Class<B> businessInterface, 
WireObjectFactory<B> factory) {
         this.proxyFactory = factory.getProxyFactory();
         this.businessInterface = businessInterface;
         this.factory = factory;

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
 Wed Aug 22 12:30:56 2007
@@ -25,6 +25,7 @@
 import org.apache.tuscany.sca.core.invocation.CallbackWireObjectFactory;
 import org.apache.tuscany.sca.core.invocation.ProxyFactory;
 import org.apache.tuscany.sca.core.invocation.ThreadMessageContext;
+import org.apache.tuscany.sca.core.invocation.WireObjectFactory;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.runtime.EndpointReference;
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
@@ -82,7 +83,7 @@
         Class<CB> javaClass = (Class<CB>)javaInterface.getJavaClass();
         List<RuntimeWire> wires = callbackReference.getRuntimeWires();
         CallbackWireObjectFactory factory = new 
CallbackWireObjectFactory(javaClass, proxyFactory, wires);
-        // factory.resolveTarget();
-        return new ServiceReferenceImpl<CB>(javaClass, factory);
+        factory.resolveTarget();
+        return (CallableReference<CB>) new 
CallableReferenceImpl<CB>(javaClass, (WireObjectFactory<CB>)factory);
     }
 }

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java?rev=568735&r1=568734&r2=568735&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CallbackWireObjectFactory.java
 Wed Aug 22 12:30:56 2007
@@ -20,9 +20,14 @@
 
 import java.util.List;
 
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.WireableBinding;
 import org.apache.tuscany.sca.core.factory.ObjectCreationException;
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
 import org.apache.tuscany.sca.runtime.RuntimeWire;
 
 /**
@@ -60,7 +65,8 @@
             // wire not yet selected, so return a proxy that resolves the 
target dynamically
             return proxyFactory.createCallbackProxy(interfaze, wires);
         }
-     }
+    }
+
     public static RuntimeWire selectCallbackWire(Message msgContext, 
List<RuntimeWire> wires) {
         EndpointReference from = msgContext.getFrom();
         if (from == null) {
@@ -70,7 +76,7 @@
         //FIXME: need a cache for better performance.  This requires making 
this
         // method non-static, which means changing the signature of 
createCallbackProxy().
 
-        // first choice is wire with matching desination endpoint
+        // first choice is wire with matching destination endpoint
         for (RuntimeWire wire : wires) {
             if (from.getURI().equals(wire.getTarget().getURI())) {
                 return wire;
@@ -87,7 +93,8 @@
             if 
(wire.getSource().getBinding().getName().equals(to.getBinding().getName())) {
                 //FIXME: need better way to represent dynamic wire
                 if (wire.getTarget().getURI().equals("/")) {  // dynamic wire
-                    return wire;
+                    //FIXME: avoid doing this for genuine dynamic wires
+                    return cloneAndBind(msgContext, wire);
                 }
                 //FIXME: no dynamic wire, so should attempt to create a static 
wire 
             }
@@ -98,7 +105,8 @@
             if (wire.getSource().getBinding().getClass() == 
to.getBinding().getClass()) {
                 //FIXME: need better way to represent dynamic wire
                 if (wire.getTarget().getURI().equals("/")) {  // dynamic wire
-                    return wire;
+                    //FIXME: avoid doing this for genuine dynamic wires
+                    return cloneAndBind(msgContext, wire);
                 }
                 //FIXME: no dynamic wire, so should attempt to create a static 
wire 
             }
@@ -106,6 +114,46 @@
 
         // no suitable callback wire was found
         return null;
+    }
+
+    private static RuntimeWire cloneAndBind(Message msgContext, RuntimeWire 
wire) {
+        try {
+            RuntimeWire resolvedWire = (RuntimeWire)wire.clone();
+            EndpointReference callback = 
msgContext.getFrom().getCallbackEndpoint();
+            if (callback != null) {
+                RuntimeComponentReference ref =
+                    
bind((RuntimeComponentReference)wire.getSource().getContract(),
+                         callback.getComponent(),
+                         (RuntimeComponentService)callback.getContract());
+                resolvedWire = ref.getRuntimeWires().get(0);
+            }
+            return resolvedWire;
+        } catch (CloneNotSupportedException e) {
+            // will not happen
+            return null;
+        }
+    }
+
+    private static RuntimeComponentReference bind(RuntimeComponentReference 
reference,
+                                                  RuntimeComponent component,
+                                                  RuntimeComponentService 
service)
+                   throws CloneNotSupportedException {
+        RuntimeComponentReference ref = 
(RuntimeComponentReference)reference.clone();
+        ref.getTargets().add(service);
+        ref.getBindings().clear();
+        for (Binding binding : service.getBindings()) {
+            if (binding instanceof WireableBinding) {
+                WireableBinding wireableBinding = 
(WireableBinding)((WireableBinding)binding).clone();
+                wireableBinding.setTargetBinding(binding);
+                wireableBinding.setTargetComponent(component);
+                wireableBinding.setTargetComponentService(service);
+                wireableBinding.setRemote(false);
+                ref.getBindings().add(wireableBinding);
+            } else {
+                ref.getBindings().add(binding);
+            }
+        }
+        return ref;
     }
 
 }

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=568735&r1=568734&r2=568735&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
 Wed Aug 22 12:30:56 2007
@@ -22,15 +22,9 @@
 import java.lang.reflect.Method;
 import java.util.List;
 
-import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.assembly.WireableBinding;
 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.RuntimeComponent;
-import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-import org.apache.tuscany.sca.runtime.RuntimeComponentService;
 import org.apache.tuscany.sca.runtime.RuntimeWire;
 import org.osoa.sca.NoRegisteredCallbackException;
 
@@ -56,27 +50,6 @@
         this.wires = wires;
     }
 
-    private RuntimeComponentReference bind(RuntimeComponentReference reference,
-                                           RuntimeComponent component,
-                                           RuntimeComponentService service) 
throws CloneNotSupportedException {
-        RuntimeComponentReference ref = 
(RuntimeComponentReference)reference.clone();
-        ref.getTargets().add(service);
-        ref.getBindings().clear();
-        for (Binding binding : service.getBindings()) {
-            if (binding instanceof WireableBinding) {
-                WireableBinding wireableBinding = 
(WireableBinding)((WireableBinding)binding).clone();
-                wireableBinding.setTargetBinding(binding);
-                wireableBinding.setTargetComponent(component);
-                wireableBinding.setTargetComponentService(service);
-                wireableBinding.setRemote(false);
-                ref.getBindings().add(wireableBinding);
-            } else {
-                ref.getBindings().add(binding);
-            }
-        }
-        return ref;
-    }
-
     @Override
     @SuppressWarnings( {"unchecked"})
     public Object invoke(Object proxy, Method method, Object[] args) throws 
Throwable {
@@ -97,26 +70,17 @@
             //FIXME: need better exception
             throw new RuntimeException("No callback wire found for " + 
msgContext.getFrom().getURI());
         }
-        RuntimeWire resolvedWire = (RuntimeWire)wire.clone();
-        EndpointReference callback = 
msgContext.getFrom().getCallbackEndpoint();
-        if (callback != null) {
-            RuntimeComponentReference ref =
-                bind((RuntimeComponentReference)wire.getSource().getContract(),
-                     callback.getComponent(),
-                     (RuntimeComponentService)callback.getContract());
-            resolvedWire = ref.getRuntimeWires().get(0);
-        }
-        setConversational(resolvedWire);
+        setConversational(wire);
         setEndpoint(msgContext.getFrom());
 
         //FIXME: can we use the same code as JDKInvocationHandler to select 
the chain? 
-        InvocationChain chain = getInvocationChain(method, resolvedWire);
+        InvocationChain chain = getInvocationChain(method, wire);
         if (chain == null) {
             throw new IllegalArgumentException("No matching operation is 
found: " + method);
         }
 
         try {
-            return invoke(chain, args, resolvedWire);
+            return invoke(chain, args, wire);
         } catch (InvocationTargetException e) {
             Throwable t = e.getCause();
             if (t instanceof NoRegisteredCallbackException) {



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

Reply via email to