Author: isilval
Date: Thu Dec  7 11:02:12 2006
New Revision: 483607

URL: http://svn.apache.org/viewvc?view=rev&rev=483607
Log:
Fix to allow multiple invocations of a callback

Modified:
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java?view=diff&rev=483607&r1=483606&r2=483607
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
 Thu Dec  7 11:02:12 2006
@@ -80,8 +80,7 @@
         }
         Object correlationId = context.getCurrentCorrelationId();
         context.setCurrentCorrelationId(null);
-        LinkedList<Object> callbackRoutingChain = 
context.getCurrentCallbackRoutingChain();
-        context.setCurrentCallbackRoutingChain(null);
+        LinkedList<Object> callbackRoutingChain = 
(LinkedList<Object>)context.getCurrentCallbackRoutingChain().clone();
         if (callbackRoutingChain == null) {
             throw new AssertionError("Missing stack of from addresses");
         }

Modified: 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java?view=diff&rev=483607&r1=483606&r2=483607
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/CallbackInvocationTestCase.java
 Thu Dec  7 11:02:12 2006
@@ -99,6 +99,8 @@
         FooClient client = (FooClient) clientComponent.getServiceInstance();
         client.invoke();
         assertTrue(client.invoked);
+        client.invokeMultiCallback();
+        assertTrue(client.count == 2);
     }
 
     /**
@@ -190,6 +192,7 @@
     @Callback(FooCallback.class)
     public static interface Foo {
         void call();
+        void callMultiCallback();
     }
 
     public static class FooImpl implements Foo {
@@ -206,12 +209,18 @@
         public void call() {
             callback.callback();
         }
+        
+        public void callMultiCallback() {
+            callback.multiCallback();
+            callback.multiCallback();
+        }
     }
 
     public static class FooClient implements FooCallback {
 
         private Foo foo;
         private boolean invoked;
+        private int count;
 
         public FooClient() {
         }
@@ -226,14 +235,23 @@
             }
             invoked = true;
         }
+        
+        public void multiCallback() {
+            count++;
+        }
 
         public void invoke() {
             foo.call();
         }
+
+        public void invokeMultiCallback() {
+            foo.callMultiCallback();
+        }
     }
 
     public interface FooCallback {
         void callback();
+        void multiCallback();
     }
 
     protected void setUp() throws Exception {

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java?view=diff&rev=483607&r1=483606&r2=483607
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
 Thu Dec  7 11:02:12 2006
@@ -56,9 +56,11 @@
             if (messageId != null) {
                 workContext.setCurrentCorrelationId(messageId);
             }
-            LinkedList<Object> callbackRoutingChain = 
msg.getCallbackRoutingChain();
-            if (callbackRoutingChain != null) {
-                
workContext.setCurrentCallbackRoutingChain(callbackRoutingChain);
+            if (wire != null) {
+                LinkedList<Object> callbackRoutingChain = 
msg.getCallbackRoutingChain();
+                if (callbackRoutingChain != null) {
+                    
workContext.setCurrentCallbackRoutingChain(callbackRoutingChain);
+                }
             }
             Object resp = invokeTarget(msg.getBody(), 
msg.getConversationSequence());
             msg.setBody(resp);



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

Reply via email to