Author: rfeng
Date: Wed Aug 22 23:13:10 2007
New Revision: 568837

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

Added:
    
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java
      - copied, changed from r568821, 
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java
Removed:
    
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java
Modified:
    
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
    
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.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/CglibProxyFactory.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.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/JDKInvocationHandler.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/WireObjectFactory.java

Modified: 
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdClientImpl.java
 Wed Aug 22 23:13:10 2007
@@ -32,8 +32,9 @@
 
     @Context
     protected ComponentContext componentContext;
+
     @Reference
-    protected CallBackIdService aCallBackService;
+    protected ServiceReference<CallBackIdService> aCallBackService;
 
     private static String returnMessage = null;
     private static Object monitor = new Object();
@@ -61,8 +62,8 @@
         // received the callback ID will be compared with the one
         // returned. Equal is good.
 
-        Object origCallBackId = 
((ServiceReference)aCallBackService).getCallbackID();
-        aCallBackService.knockKnock("Knock Knock - Test1");
+        Object origCallBackId = aCallBackService.getCallbackID();
+        aCallBackService.getService().knockKnock("Knock Knock - Test1");
         int count = 0;
 
         // 
@@ -90,9 +91,9 @@
         // returned. Equal is good.
 
         String origCallBackId = "CallBackId1";
-        ((ServiceReference)aCallBackService).setCallbackID(origCallBackId);
+        aCallBackService.setCallbackID(origCallBackId);
 
-        aCallBackService.knockKnock("Knock Knock - Test2");
+        aCallBackService.getService().knockKnock("Knock Knock - Test2");
         int count = 0;
 
         // 

Modified: 
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/itest/callback-id/src/main/java/org/apache/tuscany/sca/test/CallBackIdServiceImpl.java
 Wed Aug 22 23:13:10 2007
@@ -37,7 +37,7 @@
         System.out.println("CallBackIdServiceImpl message received: " + 
aString);
         RequestContext rc = compositeContext.getRequestContext();
         Object callBackId = rc.getServiceReference().getCallbackID();
-        System.out.println("CallBackIdServiceImpl callbackID: " + 
callBackId.toString());
+        System.out.println("CallBackIdServiceImpl callbackID: " + callBackId);
 
         callback.callBackMessage("Who's There");
         System.out.println("CallBackIdServiceImpl response sent");

Copied: 
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java
 (from r568821, 
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java)
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java?p2=incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java&p1=incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java&r1=568821&r2=568837&rev=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCaseFIXME.java
 (original)
+++ 
incubator/tuscany/java/sca/itest/callback-id/src/test/java/org/apache/tuscany/sca/test/CallBackIdTestCase.java
 Wed Aug 22 23:13:10 2007
@@ -22,8 +22,7 @@
 
 import org.apache.tuscany.sca.host.embedded.SCADomain;
 
-//FIXME Fix this test case
-public class CallBackIdTestCaseFIXME extends TestCase {
+public class CallBackIdTestCase extends TestCase {
 
     private SCADomain domain;
     private CallBackIdClient aCallBackClient;

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/CallableReferenceImpl.java
 Wed Aug 22 23:13:10 2007
@@ -50,8 +50,6 @@
  * @param <B> the type of the business interface
  */
 public class CallableReferenceImpl<B> implements CallableReference<B>, 
Externalizable {
-    private static final long serialVersionUID = -4340454651451953916L;
-    
     protected transient CompositeActivator compositeActivator;
     protected transient ProxyFactory proxyFactory;
 
@@ -91,6 +89,7 @@
         this.componentURI = componentURI;
         this.compositeActivator = compositeActivator;
         this.factory = getObjectFactory();
+        this.callbackID = this.factory.getCallbackID();
     }
 
     protected CallableReferenceImpl(Class<B> businessInterface, 
WireObjectFactory<B> factory) {
@@ -105,6 +104,7 @@
         String componentURI = component.getURI(); // The target will be 
relative to this base URI
         this.componentURI = componentURI;
         this.compositeActivator = 
((ComponentContextImpl)component.getComponentContext()).getCompositeActivator();
+        this.callbackID = factory.getCallbackID();
     }
 
     private WireObjectFactory<B> getObjectFactory() {

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/RequestContextImpl.java
 Wed Aug 22 23:13:10 2007
@@ -63,7 +63,10 @@
         RuntimeComponent component = (RuntimeComponent) to.getComponent();
         // FIXME: [rfeng] What if the interface is not a java interface? 
         JavaInterface javaInterface = (JavaInterface) 
service.getInterfaceContract().getInterface();
-        return (ServiceReference<B>) 
component.getComponentContext().createSelfReference(javaInterface.getJavaClass(),
 service.getName());
+        ServiceReference<B> ref = (ServiceReference<B>) 
component.getComponentContext()
+                                       
.createSelfReference(javaInterface.getJavaClass(), service.getName());
+        
ref.setCallbackID(ThreadMessageContext.getMessageContext().getCorrelationID());
+        return ref;
     }
 
     @SuppressWarnings("unchecked")
@@ -84,6 +87,7 @@
         List<RuntimeWire> wires = callbackReference.getRuntimeWires();
         CallbackWireObjectFactory factory = new 
CallbackWireObjectFactory(javaClass, proxyFactory, wires);
         factory.resolveTarget();
+        
factory.setCallbackID(ThreadMessageContext.getMessageContext().getCorrelationID());
         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/context/ServiceReferenceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/ServiceReferenceImpl.java
 Wed Aug 22 23:13:10 2007
@@ -87,6 +87,7 @@
 
     public void setCallbackID(Object callbackID) {
         this.callbackID = callbackID;
+        factory.setCallbackID(callbackID);
     }
 
     public Object getCallback() {

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=568837&r1=568836&r2=568837&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 23:13:10 2007
@@ -53,7 +53,12 @@
             //FIXME: need better exception
             throw new RuntimeException("No callback wire found for " + 
msgContext.getFrom().getURI());
         }
-        resolvedEndpoint = msgContext.getFrom();
+        EndpointReference from = msgContext.getFrom();
+        if (from != null && from.getCallbackEndpoint() != null) {
+            resolvedEndpoint = from.getCallbackEndpoint();
+        } else {
+            resolvedEndpoint = from;
+        }
     }
 
     @Override

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java
 Wed Aug 22 23:13:10 2007
@@ -54,11 +54,16 @@
     }
 
     public <T> T createProxy(Class<T> interfaze, RuntimeWire wire) throws 
ProxyCreationException {
-        return createProxy(interfaze, wire, null, null);
+        return createProxy(interfaze, wire, null, null, null);
     }
 
     public <T> T createProxy(Class<T> interfaze, RuntimeWire wire, 
Conversation conversation) throws ProxyCreationException {
-        return createProxy(interfaze, wire, conversation, null);
+        return createProxy(interfaze, wire, conversation, null, null);
+    }
+    
+    public <T> T createProxy(Class<T> interfaze, RuntimeWire wire, 
Conversation conversation,
+                             EndpointReference endpoint) throws 
ProxyCreationException {
+        return createProxy(interfaze, wire, conversation, endpoint, null);
     }
     
     /**
@@ -66,7 +71,7 @@
      * JDKProxyService.
      */
     public <T> T createProxy(final Class<T> interfaze, final RuntimeWire wire, 
final Conversation conversation,
-                             final EndpointReference endpoint) throws 
ProxyCreationException {
+                             final EndpointReference endpoint, final Object 
callbackID) throws ProxyCreationException {
         Enhancer enhancer = new Enhancer();
         enhancer.setSuperclass(interfaze);
         enhancer.setCallback(new MethodInterceptor() {
@@ -75,6 +80,7 @@
                 JDKInvocationHandler invocationHandler = new 
JDKInvocationHandler(messageFactory, interfaze, wire);
                 invocationHandler.setConversation(conversation);
                 invocationHandler.setEndpoint(endpoint);
+                invocationHandler.setCallbackID(callbackID);
                 Object result = invocationHandler.invoke(proxy, method, args);
                 return result;
             }

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/DefaultProxyFactoryExtensionPoint.java
 Wed Aug 22 23:13:10 2007
@@ -132,6 +132,20 @@
 
     /**
      * @see 
org.apache.tuscany.sca.core.invocation.ProxyFactory#createProxy(java.lang.Class,
+     *      org.apache.tuscany.sca.runtime.RuntimeWire,
+     *      org.osoa.sca.Conversation)
+     */
+    public <T> T createProxy(Class<T> interfaze, RuntimeWire wire, 
Conversation conversation, EndpointReference endpoint,
+                             Object callbackID) throws ProxyCreationException {
+        if (interfaze.isInterface()) {
+            return interfaceFactory.createProxy(interfaze, wire, conversation, 
endpoint, callbackID);
+        } else {
+            return classFactory.createProxy(interfaze, wire, conversation, 
endpoint, callbackID);
+        }
+    }
+
+    /**
+     * @see 
org.apache.tuscany.sca.core.invocation.ProxyFactory#createProxy(java.lang.Class,
      *      org.apache.tuscany.sca.runtime.RuntimeWire)
      */
     public <T> T createProxy(Class<T> interfaze, RuntimeWire wire) throws 
ProxyCreationException {

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=568837&r1=568836&r2=568837&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 23:13:10 2007
@@ -25,6 +25,7 @@
 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.RuntimeWire;
 import org.osoa.sca.NoRegisteredCallbackException;
 
@@ -71,7 +72,13 @@
             throw new RuntimeException("No callback wire found for " + 
msgContext.getFrom().getURI());
         }
         setConversational(wire);
-        setEndpoint(msgContext.getFrom());
+        setCallbackID(msgContext.getCorrelationID());
+        EndpointReference from = msgContext.getFrom();
+        if (from != null && from.getCallbackEndpoint() != null) {
+            setEndpoint(from.getCallbackEndpoint());
+        } else {
+            setEndpoint(from);
+        }
 
         //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/JDKInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
 Wed Aug 22 23:13:10 2007
@@ -49,6 +49,7 @@
     private MessageFactory messageFactory;
     private EndpointReference endpoint;
     private RuntimeWire wire;
+    private Object callbackID;
 
     public JDKInvocationHandler(MessageFactory messageFactory, Class<?> 
proxyInterface, RuntimeWire wire) {
         this.conversational = false;
@@ -132,14 +133,18 @@
         return null;
     }
 
-    public void setConversation(Conversation conversation){
+    public void setConversation(Conversation conversation) {
         this.conversation = (ConversationImpl)conversation;
     }
 
-    public void setEndpoint(EndpointReference endpoint){
+    public void setEndpoint(EndpointReference endpoint) {
         this.endpoint = endpoint;
     }
-    
+
+    public void setCallbackID(Object callbackID) {
+        this.callbackID = callbackID;
+    }
+ 
     protected Object invoke(InvocationChain chain, Object[] args, RuntimeWire 
wire) throws Throwable {
 
         Message msgContext = ThreadMessageContext.getMessageContext();
@@ -194,7 +199,7 @@
         }
 
         Invoker headInvoker = chain.getHeadInvoker();
-        msg.setCorrelationID(msgContext.getCorrelationID());
+        msg.setCorrelationID(callbackID);
         Operation operation = chain.getTargetOperation();
         msg.setOperation(operation);
         Interface contract = operation.getInterface();

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKProxyFactory.java
 Wed Aug 22 23:13:10 2007
@@ -53,20 +53,25 @@
      * share conversation state so sets the conversaton object to null
      */
     public <T> T createProxy(Class<T> interfaze, RuntimeWire wire) throws 
ProxyCreationException {
-        return createProxy(interfaze, wire, null, null);
+        return createProxy(interfaze, wire, null, null, null);
     }
     
     public <T> T createProxy(Class<T> interfaze, RuntimeWire wire, 
Conversation conversation) throws ProxyCreationException {
-        return createProxy(interfaze, wire, conversation, null);
+        return createProxy(interfaze, wire, conversation, null, null);
     }
     
     public <T> T createProxy(Class<T> interfaze, RuntimeWire wire, 
Conversation conversation, EndpointReference endpoint)
                              throws ProxyCreationException {
+        return createProxy(interfaze, wire, conversation, endpoint, null);
+    }
+    public <T> T createProxy(Class<T> interfaze, RuntimeWire wire, 
Conversation conversation, EndpointReference endpoint,
+                             Object callbackID) throws ProxyCreationException {
         assert interfaze != null;
         assert wire != null;
         JDKInvocationHandler handler = new 
JDKInvocationHandler(messageFactory, interfaze, wire);
         handler.setConversation(conversation);
         handler.setEndpoint(endpoint);
+        handler.setCallbackID(callbackID);
         ClassLoader cl = interfaze.getClassLoader();
         return interfaze.cast(Proxy.newProxyInstance(cl, new Class[] 
{interfaze}, handler));
     }    

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java?rev=568837&r1=568836&r2=568837&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ProxyFactory.java
 Wed Aug 22 23:13:10 2007
@@ -71,6 +71,23 @@
                      throws ProxyCreationException;
 
     /**
+     * Creates a Java proxy for the given wire and accepts
+     * a conversation object to represent conversational state, an endpoint
+     * that should be used instead of the wire's target endpoint, and a
+     * callback ID.
+     *
+     * @param interfaze the interface the proxy implements
+     * @param wire      the wire to proxy
+     * @param conversation the conversation object
+     * @param endpoint the target endpoint
+     * @param callbackID the callback ID
+     * @return the proxy
+     * @throws ProxyCreationException
+     */
+    <T> T createProxy(Class<T> interfaze, RuntimeWire wire, Conversation 
conversation, EndpointReference endpoint,
+                      Object callbackID) throws ProxyCreationException;
+
+    /**
      * Creates a Java proxy for the service contract callback
      *
      * @param interfaze the interface the proxy should implement

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=568837&r1=568836&r2=568837&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
 Wed Aug 22 23:13:10 2007
@@ -18,6 +18,9 @@
  */
 package org.apache.tuscany.sca.core.invocation;
 
+import java.util.UUID;
+
+import org.apache.tuscany.sca.assembly.Contract;
 import org.apache.tuscany.sca.core.context.ConversationImpl;
 import org.apache.tuscany.sca.core.factory.ObjectCreationException;
 import org.apache.tuscany.sca.core.factory.ObjectFactory;
@@ -36,6 +39,7 @@
     protected Class<T> interfaze;
     protected RuntimeWire wire;
     protected ProxyFactory proxyFactory;
+    protected Object callbackID;
     
     // if the wire targets a conversational service this holds the 
conversation state 
     private Conversation conversation = null;    
@@ -54,21 +58,29 @@
         this.wire = wire;
         this.proxyFactory = proxyService;
         
-        // look to see if the target is conversational and if so create 
-        // a conversation
         if (wire != null) {
             EndpointReference wireTarget = wire.getTarget();
+
+            // look to see if the target is conversational and if so create a 
conversation
             InterfaceContract contract = wireTarget.getInterfaceContract();
             Interface contractInterface = contract.getInterface();
 
             if (contractInterface != null && 
contractInterface.isConversational()) {
                 conversation = new ConversationImpl();
             }
+            
+            // if target has a callback interface, create a default callback ID
+            Contract targetContract = wireTarget.getContract();
+            if (targetContract != null && 
targetContract.getInterfaceContract().getCallbackInterface() != null) {
+                callbackID = createCallbackID();
+            }
         }
     }
 
     public T getInstance() throws ObjectCreationException {
-        return interfaze.cast(proxyFactory.createProxy(interfaze, wire, 
conversation));
+        // the callback ID is passed by value, so any subsequent calls to 
ServiceReference.setCallbackID()
+        // won't change the callback ID used by this proxy
+        return interfaze.cast(proxyFactory.createProxy(interfaze, wire, 
conversation, null, callbackID));
     }
     
     public Conversation getConversation() {
@@ -87,6 +99,31 @@
      */
     public ProxyFactory getProxyFactory() {
         return proxyFactory;
+    }
+
+    /**
+     * @return the callback ID
+     */
+    public Object getCallbackID() {
+        return callbackID;
+    }
+
+    /**
+     * Customize the callback ID
+     *
+     * @param the callback ID
+     */
+    public void setCallbackID(Object callbackID) {
+        this.callbackID = callbackID;
+    }
+
+    /**
+     * Create a callback id
+     * 
+     * @return the callback id
+     */
+    private String createCallbackID() {
+        return UUID.randomUUID().toString();
     }
 
 }



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

Reply via email to