You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/11/25 08:04:47 UTC

svn commit: r479093 [3/5] - in /incubator/tuscany/java/sca: kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ kernel/core/src/main/java/org/apache/tuscany/core/idl/java/ kernel/core/src/main/java/org/apache/tuscany/core/implementation/...

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/InboundInvocationErrorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/InboundInvocationErrorTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/InboundInvocationErrorTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/InboundInvocationErrorTestCase.java Fri Nov 24 23:04:41 2006
@@ -28,6 +28,7 @@
 import org.apache.tuscany.spi.idl.InvalidServiceContractException;
 import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorRegistry;
 import org.apache.tuscany.spi.model.Operation;
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.wire.InboundInvocationChain;
 import org.apache.tuscany.spi.wire.InboundWire;
@@ -82,7 +83,8 @@
         WorkContext workContext = EasyMock.createNiceMock(WorkContext.class);
         EasyMock.replay(workContext);
 
-        Operation<Type> operation = new Operation<Type>("checkedException", null, null, null, false, null);
+        Operation<Type> operation =
+            new Operation<Type>("checkedException", null, null, null, false, null, NO_CONVERSATION);
         Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
         chains.put(operation, createChain(checkedMethod, checkedOperation));
         InboundWire wire = new InboundWireImpl();
@@ -105,7 +107,8 @@
         WorkContext workContext = EasyMock.createNiceMock(WorkContext.class);
         EasyMock.replay(workContext);
 
-        Operation<Type> operation = new Operation<Type>("runtimeException", null, null, null, false, null);
+        Operation<Type> operation =
+            new Operation<Type>("runtimeException", null, null, null, false, null, NO_CONVERSATION);
         Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
         chains.put(operation, createChain(runtimeMethod, runtimeOperation));
         InboundWire wire = new InboundWireImpl();

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptorTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptorTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptorTestCase.java Fri Nov 24 23:04:41 2006
@@ -53,9 +53,9 @@
         replay(scheduler);
         WorkContext context = createMock(WorkContext.class);
         String convID = "convID";
-        EasyMock.expect(context.getIdentifier(Scope.CONVERSATIONAL)).andReturn(convID);
+        EasyMock.expect(context.getIdentifier(Scope.CONVERSATION)).andReturn(convID);
         context.setCurrentCorrelationId(null);
-        context.setIdentifier(Scope.CONVERSATIONAL, convID);
+        context.setIdentifier(Scope.CONVERSATION, convID);
         EasyMock.replay(context);
         Message msg = new MessageImpl();
         Interceptor next = EasyMock.createMock(Interceptor.class);

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/WireOptimizationTestCase.java Fri Nov 24 23:04:41 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.core.wire;
 
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
 import java.lang.reflect.Type;
 
 import org.apache.tuscany.spi.model.Operation;
@@ -93,7 +95,7 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        operation = new Operation<Type>("foo", null, null, null, false, null);
+        operation = new Operation<Type>("foo", null, null, null, false, null, NO_CONVERSATION);
 
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerSerializationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerSerializationTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerSerializationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerSerializationTestCase.java Fri Nov 24 23:04:41 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.core.wire.jdk;
 
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
@@ -77,7 +79,7 @@
 
         wire = EasyMock.createMock(InboundWire.class);
         Map<Operation<?>, InboundInvocationChain> map = new HashMap<Operation<?>, InboundInvocationChain>();
-        Operation<Object> operation = new Operation<Object>("invoke", null, null, null, false, null);
+        Operation<Object> operation = new Operation<Object>("invoke", null, null, null, false, null, NO_CONVERSATION);
         map.put(operation, createChain(operation));
 
         EasyMock.expect(wire.getServiceContract()).andReturn(contract).atLeastOnce();

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandlerTestCase.java Fri Nov 24 23:04:41 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.core.wire.jdk;
 
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
@@ -144,7 +146,7 @@
         types.add(type);
         DataType<List<DataType<Type>>> inputType =
             new DataType<List<DataType<Type>>>(Object[].class, types);
-        Operation<Type> operation = new Operation<Type>("echo", inputType, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("echo", inputType, null, null, false, null, NO_CONVERSATION);
         Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
         chains.put(operation, chain);
         InboundWire wire = new InboundWireImpl();

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerSerializationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerSerializationTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerSerializationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerSerializationTestCase.java Fri Nov 24 23:04:41 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.core.wire.jdk;
 
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
@@ -81,7 +83,7 @@
         EasyMock.replay(container);
         wire = EasyMock.createMock(OutboundWire.class);
         Map<Operation<?>, OutboundInvocationChain> map = new HashMap<Operation<?>, OutboundInvocationChain>();
-        Operation<Object> operation = new Operation<Object>("invoke", null, null, null, false, null);
+        Operation<Object> operation = new Operation<Object>("invoke", null, null, null, false, null, NO_CONVERSATION);
         map.put(operation, createChain(operation));
         EasyMock.expect(wire.getContainer()).andReturn(container).atLeastOnce();
         EasyMock.expect(wire.getServiceContract()).andReturn(contract).atLeastOnce();

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandlerTestCase.java Fri Nov 24 23:04:41 2006
@@ -100,21 +100,21 @@
         replay(outboundWire);
 
         Object convID = new Object();
-        wc.setIdentifier(Scope.CONVERSATIONAL, convID);
+        wc.setIdentifier(Scope.CONVERSATION, convID);
         invoker.setCurrentConversationID(convID);
 
         outboundContract.setRemotable(true);
         invoker.setRemotableTest(true);
         JDKOutboundInvocationHandler handler = new JDKOutboundInvocationHandler(outboundWire, wc);
         handler.invoke(Foo.class.getMethod("test", new Class[]{String.class}), new Object[]{"bar"});
-        Object currentConvID = wc.getIdentifier(Scope.CONVERSATIONAL);
+        Object currentConvID = wc.getIdentifier(Scope.CONVERSATION);
         assertSame(convID, currentConvID);
 
         outboundContract.setRemotable(false);
         invoker.setRemotableTest(false);
         JDKOutboundInvocationHandler handler2 = new JDKOutboundInvocationHandler(outboundWire, wc);
         handler2.invoke(Foo.class.getMethod("test", new Class[]{String.class}), new Object[]{"bar"});
-        currentConvID = wc.getIdentifier(Scope.CONVERSATIONAL);
+        currentConvID = wc.getIdentifier(Scope.CONVERSATION);
         assertSame(convID, currentConvID);
     }
 
@@ -140,9 +140,9 @@
             this.remotableTest = remotableTest;
         }
 
-        public Object invokeTarget(final Object payload) throws InvocationTargetException {
+        public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
             assertEquals("bar", Array.get(payload, 0));
-            Object convID = wc.getIdentifier(Scope.CONVERSATIONAL);
+            Object convID = wc.getIdentifier(Scope.CONVERSATION);
             if (remotableTest) {
                 assertNotSame(convID, currentConversationID);
             } else {

Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/InvalidConversationSequenceException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/InvalidConversationSequenceException.java?view=auto&rev=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/InvalidConversationSequenceException.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/InvalidConversationSequenceException.java Fri Nov 24 23:04:41 2006
@@ -0,0 +1,42 @@
+/*
+ * 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.spi.component;
+
+/**
+ * Denotes an unknown operation sequence in a conversation
+ *
+ * @version $Rev$ $Date$
+ */
+public class InvalidConversationSequenceException extends TargetException {
+
+    public InvalidConversationSequenceException() {
+    }
+
+    public InvalidConversationSequenceException(String message) {
+        super(message);
+    }
+
+    public InvalidConversationSequenceException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public InvalidConversationSequenceException(Throwable cause) {
+        super(cause);
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/InvalidConversationSequenceException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/InvalidConversationSequenceException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/PersistentScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/PersistentScopeContainer.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/PersistentScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/PersistentScopeContainer.java Fri Nov 24 23:04:41 2006
@@ -34,7 +34,7 @@
      * @param expiration the expiration in milliseconds
      * @throws PersistenceException
      */
-    void persistNew(AtomicComponent component, Object id, Object instance, long expiration) throws PersistenceException;
+    void persistNew(AtomicComponent component, String id, Object instance, long expiration) throws PersistenceException;
 
     /**
      * Persists a component implementation instance, equivalent to an update operation
@@ -45,7 +45,7 @@
      * @param expiration the expiration in milliseconds
      * @throws PersistenceException
      */
-    void persist(AtomicComponent component, Object id, Object instance, long expiration) throws PersistenceException;
+    void persist(AtomicComponent component, String id, Object instance, long expiration) throws PersistenceException;
 
     /**
      * Removes a component implementation instance from persistent storage
@@ -54,14 +54,6 @@
      * @param id        the id associated with the instance
      * @throws PersistenceException
      */
-    void remove(AtomicComponent component, Object id) throws PersistenceException;
-
-    /**
-     * Returns a previously instance associated with the current component. If no instance is found, a {@link
-     * TargetNotFoundException} is thrown
-     *
-     * @throws TargetException
-     */
-    Object getPersistedInstance(AtomicComponent component) throws TargetException;
+    void remove(AtomicComponent component, String id) throws PersistenceException;
 
 }

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/ScopeContainer.java Fri Nov 24 23:04:41 2006
@@ -47,10 +47,18 @@
     void register(AtomicComponent component);
 
     /**
-     * Returns an instance associated with the current component
+     * Returns an implementation instance associated with the current request context, creating one if necessary
      *
      * @throws TargetException
      */
     Object getInstance(AtomicComponent component) throws TargetException;
+
+    /**
+     * Returns an implementation instance associated with the current context. If no instance is found, a {@link
+     * TargetNotFoundException} is thrown
+     *
+     * @throws TargetException
+     */
+    Object getAssociatedInstance(AtomicComponent component) throws TargetException;
 
 }

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=479093&r1=479092&r2=479093
==============================================================================
--- 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 Fri Nov 24 23:04:41 2006
@@ -60,7 +60,7 @@
             if (callbackRoutingChain != null) {
                 workContext.setCurrentCallbackRoutingChain(callbackRoutingChain);
             }
-            Object resp = invokeTarget(msg.getBody());
+            Object resp = invokeTarget(msg.getBody(), msg.getConversationSequence());
             msg.setBody(resp);
         } catch (InvocationTargetException e) {
             msg.setBodyWithFault(e.getCause());

Added: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/InvalidConversationalContractException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/InvalidConversationalContractException.java?view=auto&rev=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/InvalidConversationalContractException.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/InvalidConversationalContractException.java Fri Nov 24 23:04:41 2006
@@ -0,0 +1,42 @@
+/*
+ * 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.spi.idl;
+
+/**
+ * Denotes an invalid conversational interface definition
+ *
+ * @version $Rev$ $Date$
+ */
+public class InvalidConversationalContractException extends InvalidServiceContractException {
+
+    public InvalidConversationalContractException() {
+    }
+
+    public InvalidConversationalContractException(String message) {
+        super(message);
+    }
+
+    public InvalidConversationalContractException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public InvalidConversationalContractException(Throwable cause) {
+        super(cause);
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/InvalidConversationalContractException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/InvalidConversationalContractException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java Fri Nov 24 23:04:41 2006
@@ -32,28 +32,24 @@
  * @version $Rev$ $Date$
  */
 public class Operation<T> {
-    private static final String NAME = Operation.class.getName();
+    public static final int NO_CONVERSATION = -1;
+    public static final int CONVERSATION_START = 0;
+    public static final int CONVERSATION_CONTINUE = 1;
+    public static final int CONVERSATION_END = 2;
 
+    private static final String NAME = Operation.class.getName();
     protected Map<String, Object> metaData;
-
     private final String name;
-
+    private ServiceContract<T> contract;
     private final DataType<T> outputType;
-
     private final DataType<List<DataType<T>>> inputType;
-
     private final List<DataType<T>> faultTypes;
-
-    private boolean nonBlocking;
-
-    private ServiceContract<T> contract;
-
-    private boolean callback;
-
     private String dataBinding;
-
     private boolean wrapperStyle;
     private WrapperInfo wrapper;
+    private boolean callback;
+    private boolean nonBlocking;
+    private int conversationSequence = NO_CONVERSATION;
 
     /**
      * Construct a minimally-specified operation
@@ -67,7 +63,7 @@
                      DataType<List<DataType<T>>> inputType,
                      DataType<T> outputType,
                      List<DataType<T>> faultTypes) {
-        this(name, inputType, outputType, faultTypes, false, null);
+        this(name, inputType, outputType, faultTypes, false, null, NO_CONVERSATION);
     }
 
     /**
@@ -79,13 +75,16 @@
      * @param faultTypes  the data type of faults raised by the operation
      * @param nonBlocking if the operation is non-blocking
      * @param dataBinding the data-binding type required by the operation
+     * @param sequence    the conversational attributes of the operation, {@link NO_CONVERSATION}, {@link
+     *                    CONVERSATION_START}, {@link CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
      */
     public Operation(final String name,
                      final DataType<List<DataType<T>>> inputType,
                      final DataType<T> outputType,
                      final List<DataType<T>> faultTypes,
                      boolean nonBlocking,
-                     String dataBinding) {
+                     String dataBinding,
+                     int sequence) {
         super();
         this.name = name;
         List<DataType<T>> types = Collections.emptyList();
@@ -94,6 +93,7 @@
         this.faultTypes = (faultTypes == null) ? types : faultTypes;
         this.nonBlocking = nonBlocking;
         this.dataBinding = dataBinding;
+        this.conversationSequence = sequence;
         // Register the operation with the types
         for (DataType<?> d : this.inputType.getLogical()) {
             d.setMetadata(NAME, this);
@@ -192,6 +192,31 @@
     }
 
     /**
+     * Sets if the operation is non-blocking
+     */
+    public void setNonBlocking(boolean nonBlocking) {
+        this.nonBlocking = nonBlocking;
+    }
+
+    /**
+     * Returns the sequence the operation is called in a conversation, {@link NO_CONVERSATION}, {@link
+     * CONVERSATION_START}, {@link CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
+     *
+     * @return the sequence the operation is called in a conversation
+     */
+    public int getConversationSequence() {
+        return conversationSequence;
+    }
+
+    /**
+     * Sets the sequence the operation is called in a conversation, {@link NO_CONVERSATION}, {@link CONVERSATION_START},
+     * {@link CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
+     */
+    public void setConversationSequence(int conversationSequence) {
+        this.conversationSequence = conversationSequence;
+    }
+
+    /**
      * Returns the data binding type specified for the operation or null.
      *
      * @return the data binding type specified for the operation or null.
@@ -234,13 +259,6 @@
         metaData.put(key, val);
     }
 
-    /**
-     * Sets if the operation is non-blocking
-     */
-    public void setNonBlocking(boolean nonBlocking) {
-        this.nonBlocking = nonBlocking;
-    }
-
     public String toString() {
         return name;
     }
@@ -273,6 +291,7 @@
             if (faultTypes.size() < operation.faultTypes.size()) {
                 return false;
             } else {
+                //noinspection ForLoopReplaceableByForEach
                 for (int i = 0; i < operation.faultTypes.size(); i++) {
                     if (!faultTypes.get(i).equals(operation.faultTypes.get(i))) {
                         return false;

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Scope.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Scope.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Scope.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Scope.java Fri Nov 24 23:04:41 2006
@@ -25,7 +25,7 @@
     public static final Scope STATELESS = new Scope("STATELESS");
     public static final Scope REQUEST = new Scope("REQUEST");
     public static final Scope SESSION = new Scope("SESSION");
-    public static final Scope CONVERSATIONAL = new Scope("CONVERSATIONAL");
+    public static final Scope CONVERSATION = new Scope("CONVERSATION");
     public static final Scope MODULE = new Scope("MODULE");
     public static final Scope COMPOSITE = new Scope("COMPOSITE");
     public static final Scope UNDEFINED = new Scope("UNDEFINED");
@@ -40,6 +40,7 @@
         return scope;
     }
 
+    @SuppressWarnings({"StringEquality"})
     public boolean equals(Object o) {
         if (this == o) {
             return true;

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java Fri Nov 24 23:04:41 2006
@@ -28,6 +28,8 @@
  * @version $Rev$ $Date$
  */
 public abstract class ServiceContract<T> extends ModelObject {
+    public static final long UNDEFINED = -1;
+
     protected InteractionScope interactionScope;
     protected boolean remotable;
     protected Class<?> interfaceClass;
@@ -38,6 +40,8 @@
     protected Map<String, Operation<T>> callbackOperations;
     protected String dataBinding;
     protected Map<String, Object> metaData;
+    protected long maxIdleTime = UNDEFINED;
+    protected long maxAge = UNDEFINED;
 
     protected ServiceContract() {
     }
@@ -168,6 +172,38 @@
 
     public void setDataBinding(String dataBinding) {
         this.dataBinding = dataBinding;
+    }
+
+    /**
+     * Returns the idle time allowed between operations in milliseconds if the service is conversational
+     *
+     * @return the idle time allowed between operations in milliseconds if the service is conversational
+     */
+    public long getMaxIdleTime() {
+        return maxIdleTime;
+    }
+
+    /**
+     * Sets the idle time allowed between operations in milliseconds if the service is conversational
+     */
+    public void setMaxIdleTime(long maxIdleTime) {
+        this.maxIdleTime = maxIdleTime;
+    }
+
+    /**
+     * Returns the maximum age a conversation may remain active in milliseconds if the service is conversational
+     *
+     * @return the maximum age a conversation may remain active in milliseconds if the service is conversational
+     */
+    public long getMaxAge() {
+        return maxAge;
+    }
+
+    /**
+     * Sets the maximum age a conversation may remain active in milliseconds if the service is conversational
+     */
+    public void setMaxAge(long maxAge) {
+        this.maxAge = maxAge;
     }
 
     /**

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/services/store/Store.java Fri Nov 24 23:04:41 2006
@@ -18,8 +18,6 @@
  */
 package org.apache.tuscany.spi.services.store;
 
-import java.util.UUID;
-
 import org.apache.tuscany.spi.component.SCAObject;
 
 /**
@@ -38,30 +36,48 @@
      * Adds the given record to the store. Implementations may choose different strategies for writing data such as
      * write-through or write-behind.
      *
-     * @param owner
+     * @param owner      the instance owner
      * @param id         the unique id of the record
      * @param object     the object representing the data to write
      * @param expiration the time in milliseconds when the entry expires
      * @throws StoreWriteException if an error occurs during the write operation
      */
-    void insertRecord(SCAObject owner, UUID id, Object object, long expiration) throws StoreWriteException;
+    void insertRecord(SCAObject owner, String id, Object object, long expiration) throws StoreWriteException;
 
-    void updateRecord(SCAObject owner, UUID id, Object object, long expiration) throws StoreWriteException;
+    /**
+     * Updates a given record in the store, overwriting previous information.
+     *
+     * @param owner      the instance owner
+     * @param id         the unique id of the record
+     * @param object     the object representing the data to write
+     * @param expiration the time in milliseconds when the entry expires
+     * @throws StoreWriteException
+     */
+    void updateRecord(SCAObject owner, String id, Object object, long expiration) throws StoreWriteException;
 
     /**
      * Returns the deserialized object in the store corresponding to the given id
      *
+     * @param owner the instance owner
+     * @param id    the unique id of the record
      * @return the deserialized object or null if one is not found
+     * @throws StoreReadException
      */
-    Object readRecord(SCAObject owner, UUID id) throws StoreReadException;
+    Object readRecord(SCAObject owner, String id) throws StoreReadException;
 
     /**
      * Removes a record from the store
+     *
+     * @param owner the instance owner
+     * @param id    the unique id of the record
+     * @throws StoreWriteException
      */
-    void removeRecord(SCAObject owner, UUID id) throws StoreWriteException;
+    void removeRecord(SCAObject owner, String id) throws StoreWriteException;
 
     /**
      * Removes all records from the store
+     *
+     * @throws StoreWriteException
      */
     void removeRecords() throws StoreWriteException;
 
@@ -69,6 +85,7 @@
      * Initiates a recovery operation, for example during restart after a crash
      *
      * @param listener the listener to receive recovery callback events
+     * @throws StoreReadException
      */
     void recover(RecoveryListener listener) throws StoreReadException;
 

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractInboundInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractInboundInvocationHandler.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractInboundInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractInboundInvocationHandler.java Fri Nov 24 23:04:41 2006
@@ -39,7 +39,7 @@
                 if (chain.getTargetInvoker() == null) {
                     throw new AssertionError("No target invoker [" + chain.getOperation().getName() + "]");
                 }
-                return chain.getTargetInvoker().invokeTarget(args);
+                return chain.getTargetInvoker().invokeTarget(args, TargetInvoker.NONE);
             } catch (InvocationTargetException e) {
                 // the cause was thrown by the target so throw it
                 throw e.getCause();

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java Fri Nov 24 23:04:41 2006
@@ -45,7 +45,7 @@
                     String name = chain.getOperation().getName();
                     throw new AssertionError("No target invoker [" + name + "]");
                 }
-                return targetInvoker.invokeTarget(args);
+                return targetInvoker.invokeTarget(args, TargetInvoker.NONE);
             } catch (InvocationTargetException e) {
                 // the cause was thrown by the target so throw it
                 throw e.getCause();

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java Fri Nov 24 23:04:41 2006
@@ -36,6 +36,7 @@
      * Sets the body of the message.
      */
     void setBody(Object body);
+
     /**
      * Sets the target invoker to dispatch to when the message passes through the request side of the invocation chain
      */
@@ -55,12 +56,12 @@
      * Adds the latest 'address' of the SCAObject where this message originated
      */
     void pushFromAddress(Object fromAddress);
-    
+
     /**
      * Returns the chain of SCAObject addresses
      */
     LinkedList<Object> getCallbackRoutingChain();
-    
+
     /**
      * Sets the chain of SCAObject addresses
      */
@@ -85,16 +86,35 @@
      * Sets the correlation id of the message
      */
     void setCorrelationId(Object correlationId);
-    
+
     /**
      * Test if the message represents a fault/exception
+     *
      * @return true if the message body is a fault object, false is the body is a normal payload
      */
     boolean isFault();
 
     /**
      * Set the message body with a fault object. After this method is called, isFault() returns true.
+     *
      * @param fault The fault object represents an exception
      */
     void setBodyWithFault(Object fault);
+
+    /**
+     * Returns the conversational sequence the message is associated with, {@link TargetInvoker.NONE}, {@link
+     * TargetInvoker.START}, {@link TargetInvoker.CONTINUE}, or {@link TargetInvoker.END}
+     *
+     * @return the conversational sequence the message is associated with
+     */
+    short getConversationSequence();
+
+    /**
+     * Sets the conversational sequence the message is associated with,
+     *
+     * @param sequence {@link TargetInvoker.NONE}, {@link TargetInvoker.START}, {@link TargetInvoker.CONTINUE}, or
+     *                 {@link TargetInvoker.END}
+     */
+    void setConversationSequence(short sequence);
+
 }

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java Fri Nov 24 23:04:41 2006
@@ -26,13 +26,13 @@
  * @version $Rev $Date
  */
 public class MessageImpl implements Message {
-
     private Object body;
     private TargetInvoker invoker;
     private LinkedList<Object> callbackRoutingChain;
     private Object messageId;
     private Object correlationId;
     private boolean isFault;
+    private short conversationSequence;
 
     public MessageImpl() {
     }
@@ -68,11 +68,11 @@
     public LinkedList<Object> getCallbackRoutingChain() {
         return callbackRoutingChain;
     }
-    
+
     public void setCallbackRoutingChain(LinkedList<Object> callbackRoutingChain) {
         this.callbackRoutingChain = callbackRoutingChain;
     }
-    
+
     public Object getMessageId() {
         return messageId;
     }
@@ -96,5 +96,21 @@
     public void setBodyWithFault(Object fault) {
         this.isFault = true;
         this.body = fault;
+    }
+
+    public TargetInvoker getInvoker() {
+        return invoker;
+    }
+
+    public void setInvoker(TargetInvoker invoker) {
+        this.invoker = invoker;
+    }
+
+    public short getConversationSequence() {
+        return conversationSequence;
+    }
+
+    public void setConversationSequence(short conversationSequence) {
+        this.conversationSequence = conversationSequence;
     }
 }

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/TargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/TargetInvoker.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/TargetInvoker.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/TargetInvoker.java Fri Nov 24 23:04:41 2006
@@ -27,14 +27,26 @@
  * @version $Rev$ $Date$
  */
 public interface TargetInvoker extends Cloneable {
+    /* indicates that no conversational sequence is associated with the message */
+    short NONE = 0;
+    /* indicates that the message initiates a conversation */
+    short START = 1;
+    /* indicates that the message continues a conversation */
+    short CONTINUE = 2;
+    /* indicates that the message ends a conversation */
+    short END = 3;
 
     /**
      * Invokes an operation on a target with the given payload. Used in optmized cases where messages do not need to be
      * flowed such as in non-proxied wires.
      *
+     * @param payload  the invocation payload, typically an array of parameters
+     * @param sequence if the invocation is part of a conversation, the sequence. Valid values are {@link NONE} for
+     *                 non-conversational, {@link START} to begin a conversation, {@link CONTINUE} to continue a
+     *                 conversation, or {@link END} to end a conversation
      * @throws InvocationTargetException
      */
-    Object invokeTarget(final Object payload) throws InvocationTargetException;
+    Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException;
 
     /**
      * Invokes an operation on a target with the given message

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/ReferenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/ReferenceTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/ReferenceTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/ReferenceTestCase.java Fri Nov 24 23:04:41 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.spi.extension;
 
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
 import java.lang.reflect.Type;
 import java.util.HashMap;
 import java.util.Map;
@@ -55,7 +57,7 @@
 
     public void testPrepare() throws Exception {
         InboundInvocationChain chain = createMock(InboundInvocationChain.class);
-        Operation<Type> operation = new Operation<Type>("test", null, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("test", null, null, null, false, null, NO_CONVERSATION);
         chain.setTargetInvoker(null);
         expectLastCall();
         chain.getOperation();

Added: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionSequenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionSequenceTestCase.java?view=auto&rev=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionSequenceTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionSequenceTestCase.java Fri Nov 24 23:04:41 2006
@@ -0,0 +1,169 @@
+/*
+ * 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.spi.extension;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.LinkedList;
+
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class TargetInvokerExtensionSequenceTestCase extends TestCase {
+
+    @SuppressWarnings("unchecked")
+    public void testStart() {
+        Object from = new Object();
+        InboundWire wire = EasyMock.createMock(InboundWire.class);
+        EasyMock.replay(wire);
+        WorkContext context;
+        context = EasyMock.createMock(WorkContext.class);
+        context.setCurrentCallbackRoutingChain(EasyMock.isA(LinkedList.class));
+        EasyMock.replay(context);
+        ExecutionMonitor monitor = EasyMock.createNiceMock(ExecutionMonitor.class);
+        Target target = EasyMock.createMock(Target.class);
+        target.invokeStart("test");
+        EasyMock.replay(target);
+        Invoker invoker = new Invoker(wire, context, monitor, target);
+        Message msg = new MessageImpl();
+        msg.pushFromAddress(from);
+        msg.setBody("test");
+        msg.setConversationSequence(Invoker.START);
+        invoker.invoke(msg);
+        EasyMock.verify(wire);
+        EasyMock.verify(context);
+        EasyMock.verify(target);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testContinue() {
+        Object from = new Object();
+        InboundWire wire = EasyMock.createMock(InboundWire.class);
+        EasyMock.replay(wire);
+        WorkContext context;
+        context = EasyMock.createMock(WorkContext.class);
+        context.setCurrentCallbackRoutingChain(EasyMock.isA(LinkedList.class));
+        EasyMock.replay(context);
+        ExecutionMonitor monitor = EasyMock.createNiceMock(ExecutionMonitor.class);
+        Target target = EasyMock.createMock(Target.class);
+        target.invokeContinue("test");
+        EasyMock.replay(target);
+        Invoker invoker = new Invoker(wire, context, monitor, target);
+        Message msg = new MessageImpl();
+        msg.pushFromAddress(from);
+        msg.setBody("test");
+        msg.setConversationSequence(Invoker.CONTINUE);
+        invoker.invoke(msg);
+        EasyMock.verify(wire);
+        EasyMock.verify(context);
+        EasyMock.verify(target);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testEnd() {
+        Object from = new Object();
+        InboundWire wire = EasyMock.createMock(InboundWire.class);
+        EasyMock.replay(wire);
+        WorkContext context;
+        context = EasyMock.createMock(WorkContext.class);
+        context.setCurrentCallbackRoutingChain(EasyMock.isA(LinkedList.class));
+        EasyMock.replay(context);
+        ExecutionMonitor monitor = EasyMock.createNiceMock(ExecutionMonitor.class);
+        Target target = EasyMock.createMock(Target.class);
+        target.invokeEnd("test");
+        EasyMock.replay(target);
+        Invoker invoker = new Invoker(wire, context, monitor, target);
+        Message msg = new MessageImpl();
+        msg.pushFromAddress(from);
+        msg.setBody("test");
+        msg.setConversationSequence(Invoker.END);
+        invoker.invoke(msg);
+        EasyMock.verify(wire);
+        EasyMock.verify(context);
+        EasyMock.verify(target);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testNone() {
+        Object from = new Object();
+        InboundWire wire = EasyMock.createMock(InboundWire.class);
+        EasyMock.replay(wire);
+        WorkContext context;
+        context = EasyMock.createMock(WorkContext.class);
+        context.setCurrentCallbackRoutingChain(EasyMock.isA(LinkedList.class));
+        EasyMock.replay(context);
+        ExecutionMonitor monitor = EasyMock.createNiceMock(ExecutionMonitor.class);
+        Target target = EasyMock.createMock(Target.class);
+        target.invokeNone("test");
+        EasyMock.replay(target);
+        Invoker invoker = new Invoker(wire, context, monitor, target);
+        Message msg = new MessageImpl();
+        msg.pushFromAddress(from);
+        msg.setBody("test");
+        invoker.invoke(msg);
+        EasyMock.verify(wire);
+        EasyMock.verify(context);
+        EasyMock.verify(target);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+
+    }
+
+    private class Invoker extends TargetInvokerExtension {
+        private Target target;
+
+        public Invoker(InboundWire wire, WorkContext workContext, ExecutionMonitor monitor,
+                       TargetInvokerExtensionSequenceTestCase.Target target) {
+            super(wire, workContext, monitor);
+            this.target = target;
+        }
+
+        public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
+            if (sequence == NONE) {
+                target.invokeNone((String) payload);
+            } else if (sequence == START) {
+                target.invokeStart((String) payload);
+            } else if (sequence == CONTINUE) {
+                target.invokeContinue((String) payload);
+            } else if (sequence == END) {
+                target.invokeEnd((String) payload);
+            }
+            return null;
+        }
+    }
+
+    private interface Target {
+        void invokeStart(String msg);
+
+        void invokeContinue(String msg);
+
+        void invokeEnd(String msg);
+
+        void invokeNone(String msg);
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionSequenceTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionSequenceTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java Fri Nov 24 23:04:41 2006
@@ -70,7 +70,7 @@
             this.target = target;
         }
 
-        public Object invokeTarget(final Object payload) throws InvocationTargetException {
+        public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
             target.invoke((String) payload);
             return null;
         }

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/idl/java/JavaIDLUtilsTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/idl/java/JavaIDLUtilsTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/idl/java/JavaIDLUtilsTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/idl/java/JavaIDLUtilsTestCase.java Fri Nov 24 23:04:41 2006
@@ -27,6 +27,7 @@
 import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findOperation;
 import org.apache.tuscany.spi.model.DataType;
 import org.apache.tuscany.spi.model.Operation;
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
 
 import junit.framework.TestCase;
 
@@ -40,7 +41,7 @@
     public void testNoParamsFindMethod() {
         List<DataType<Type>> types = new ArrayList<DataType<Type>>();
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         Method method = findMethod(operation, methods);
         assertEquals("foo", method.getName());
         assertEquals(0, method.getParameterTypes().length);
@@ -58,7 +59,7 @@
         DataType<Type> type = new DataType<Type>(String.class, Object.class);
         types.add(type);
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         Method method = findMethod(operation, methods);
         assertEquals("foo", method.getName());
         assertEquals(String.class, method.getParameterTypes()[0]);
@@ -79,7 +80,7 @@
         types.add(type);
         types.add(type2);
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         Method method = findMethod(operation, methods);
         assertNull(method);
     }
@@ -89,7 +90,7 @@
         DataType<Type> type = new DataType<Type>(Integer.class, Object.class);
         types.add(type);
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         Method method = findMethod(operation, methods);
         assertNull(method);
     }
@@ -99,7 +100,7 @@
         DataType<Type> type = new DataType<Type>(Integer.class, Object.class);
         types.add(type);
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         Method method = findMethod(operation, methods);
         assertNull(method);
     }
@@ -109,7 +110,7 @@
         DataType<Type> type = new DataType<Type>(Integer.TYPE, Object.class);
         types.add(type);
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         Method method = findMethod(operation, methods);
         assertEquals("foo", method.getName());
         assertEquals(Integer.TYPE, method.getParameterTypes()[0]);
@@ -123,7 +124,7 @@
 
 
     public void testNotFoundMethod() {
-        Operation<Type> operation = new Operation<Type>("not there", null, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("not there", null, null, null, false, null, NO_CONVERSATION);
         assertNull(findMethod(operation, methods));
     }
 
@@ -131,7 +132,7 @@
         super.setUp();
         methods = Foo.class.getMethods();
 
-        Operation<Type> operation = new Operation<Type>("foo", null, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", null, null, null, false, null, NO_CONVERSATION);
         operations = new ArrayList<Operation<?>>();
         operations.add(operation);
 
@@ -139,7 +140,7 @@
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
         DataType<Type> type = new DataType<Type>(String.class, Object.class);
         types.add(type);
-        operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         operations.add(operation);
 
         types = new ArrayList<DataType<Type>>();
@@ -148,21 +149,21 @@
         types.add(type);
         types.add(type2);
         inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         operations.add(operation);
 
         types = new ArrayList<DataType<Type>>();
         type = new DataType<Type>(Integer.class, Object.class);
         types.add(type);
         inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         operations.add(operation);
 
         types = new ArrayList<DataType<Type>>();
         type = new DataType<Type>(Integer.TYPE, Object.class);
         types.add(type);
         inputType = new DataType<List<DataType<Type>>>(Object[].class, types);
-        operation = new Operation<Type>("foo", inputType, null, null, false, null);
+        operation = new Operation<Type>("foo", inputType, null, null, false, null, NO_CONVERSATION);
         operations.add(operation);
 
     }

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java Fri Nov 24 23:04:41 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.spi.model;
 
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
 import java.util.Map;
 import java.util.HashMap;
 import java.lang.reflect.Type;
@@ -32,7 +34,7 @@
     @SuppressWarnings("unchecked")
     public void testAddOperation() throws Exception {
         ServiceContract<Type> contract = new TestContract();
-        Operation<Type> operation = new Operation<Type>("foo", null, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", null, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> ops = new HashMap<String, Operation<Type>>();
         ops.put("foo", operation);
         contract.setOperations(ops);
@@ -42,7 +44,7 @@
 
     public void testAddCallbackOperation() throws Exception {
         ServiceContract<Type> contract = new TestContract();
-        Operation<Type> operation = new Operation<Type>("foo", null, null, null, false, null);
+        Operation<Type> operation = new Operation<Type>("foo", null, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> ops = new HashMap<String, Operation<Type>>();
         ops.put("foo", operation);
         contract.setCallbackOperations(ops);

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java Fri Nov 24 23:04:41 2006
@@ -38,7 +38,7 @@
 
     private class MockInvoker implements TargetInvoker {
 
-        public Object invokeTarget(final Object payload) throws InvocationTargetException {
+        public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
             assertEquals("foo", Array.get(payload, 0));
             return "response";
         }

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/ContractCompatibilityTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/ContractCompatibilityTestCase.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/ContractCompatibilityTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/ContractCompatibilityTestCase.java Fri Nov 24 23:04:41 2006
@@ -30,6 +30,7 @@
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.DataType;
 import org.apache.tuscany.spi.model.Operation;
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
 import org.apache.tuscany.spi.model.ReferenceDefinition;
 import org.apache.tuscany.spi.model.ReferenceTarget;
 import org.apache.tuscany.spi.model.ServiceContract;
@@ -54,12 +55,12 @@
 
     public void testBasic() throws Exception {
         ServiceContract<Type> source = new MockContract<Type>("FooContract");
-        Operation<Type> opSource1 = new Operation<Type>("op1", null, null, null, false, null);
+        Operation<Type> opSource1 = new Operation<Type>("op1", null, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
         ServiceContract<Type> target = new MockContract<Type>("FooContract");
-        Operation<Type> opSource2 = new Operation<Type>("op1", null, null, null, false, null);
+        Operation<Type> opSource2 = new Operation<Type>("op1", null, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op1", opSource2);
         target.setOperations(targetOperations);
@@ -68,12 +69,12 @@
 
     public void testBasicIncompatibleOperationNames() throws Exception {
         ServiceContract<Type> source = new MockContract<Type>("FooContract");
-        Operation<Type> opSource1 = new Operation<Type>("op1", null, null, null, false, null);
+        Operation<Type> opSource1 = new Operation<Type>("op1", null, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
         ServiceContract<Type> target = new MockContract<Type>("FooContract");
-        Operation<Type> opSource2 = new Operation<Type>("op2", null, null, null, false, null);
+        Operation<Type> opSource2 = new Operation<Type>("op2", null, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op2", opSource2);
         target.setOperations(targetOperations);
@@ -90,7 +91,7 @@
         List<DataType<Type>> sourceInputTypes = new ArrayList<DataType<Type>>();
         sourceInputTypes.add(new DataType<Type>(Object.class, Object.class));
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(String.class, sourceInputTypes);
-        Operation<Type> opSource1 = new Operation<Type>("op1", inputType, null, null, false, null);
+        Operation<Type> opSource1 = new Operation<Type>("op1", inputType, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
@@ -101,7 +102,8 @@
         DataType<List<DataType<Type>>> targetInputType =
             new DataType<List<DataType<Type>>>(String.class, targetInputTypes);
 
-        Operation<Type> opTarget = new Operation<Type>("op1", targetInputType, null, null, false, null);
+        Operation<Type> opTarget =
+            new Operation<Type>("op1", targetInputType, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op1", opTarget);
         target.setOperations(targetOperations);
@@ -114,7 +116,7 @@
         List<DataType<Type>> sourceInputTypes = new ArrayList<DataType<Type>>();
         sourceInputTypes.add(new DataType<Type>(Integer.class, Integer.class));
         DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>(String.class, sourceInputTypes);
-        Operation<Type> opSource1 = new Operation<Type>("op1", inputType, null, null, false, null);
+        Operation<Type> opSource1 = new Operation<Type>("op1", inputType, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
@@ -125,7 +127,8 @@
         DataType<List<DataType<Type>>> targetInputType =
             new DataType<List<DataType<Type>>>(String.class, targetInputTypes);
 
-        Operation<Type> opTarget = new Operation<Type>("op1", targetInputType, null, null, false, null);
+        Operation<Type> opTarget =
+            new Operation<Type>("op1", targetInputType, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op1", opTarget);
         target.setOperations(targetOperations);
@@ -166,14 +169,16 @@
     public void testOutputTypes() throws Exception {
         ServiceContract<Type> source = new MockContract<Type>("FooContract");
         DataType<Type> sourceOutputType = new DataType<Type>(String.class, String.class);
-        Operation<Type> opSource1 = new Operation<Type>("op1", null, sourceOutputType, null, false, null);
+        Operation<Type> opSource1 =
+            new Operation<Type>("op1", null, sourceOutputType, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
 
         ServiceContract<Type> target = new MockContract<Type>("FooContract");
         DataType<Type> targetOutputType = new DataType<Type>(String.class, String.class);
-        Operation<Type> opTarget = new Operation<Type>("op1", null, targetOutputType, null, false, null);
+        Operation<Type> opTarget =
+            new Operation<Type>("op1", null, targetOutputType, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op1", opTarget);
         target.setOperations(targetOperations);
@@ -203,14 +208,16 @@
     public void testIncompatibleOutputTypes() throws Exception {
         ServiceContract<Type> source = new MockContract<Type>("FooContract");
         DataType<Type> sourceOutputType = new DataType<Type>(String.class, String.class);
-        Operation<Type> opSource1 = new Operation<Type>("op1", null, sourceOutputType, null, false, null);
+        Operation<Type> opSource1 =
+            new Operation<Type>("op1", null, sourceOutputType, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
 
         ServiceContract<Type> target = new MockContract<Type>("FooContract");
         DataType<Type> targetOutputType = new DataType<Type>(Integer.class, Integer.class);
-        Operation<Type> opTarget = new Operation<Type>("op1", null, targetOutputType, null, false, null);
+        Operation<Type> opTarget =
+            new Operation<Type>("op1", null, targetOutputType, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op1", opTarget);
         target.setOperations(targetOperations);
@@ -227,7 +234,8 @@
         DataType<Type> sourceFaultType = new DataType<Type>(String.class, String.class);
         List<DataType<Type>> sourceFaultTypes = new ArrayList<DataType<Type>>();
         sourceFaultTypes.add(0, sourceFaultType);
-        Operation<Type> opSource1 = new Operation<Type>("op1", null, null, sourceFaultTypes, false, null);
+        Operation<Type> opSource1 =
+            new Operation<Type>("op1", null, null, sourceFaultTypes, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
@@ -237,7 +245,8 @@
         List<DataType<Type>> targetFaultTypes = new ArrayList<DataType<Type>>();
         targetFaultTypes.add(0, targetFaultType);
 
-        Operation<Type> opTarget = new Operation<Type>("op1", null, null, targetFaultTypes, false, null);
+        Operation<Type> opTarget =
+            new Operation<Type>("op1", null, null, targetFaultTypes, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op1", opTarget);
         target.setOperations(targetOperations);
@@ -249,13 +258,14 @@
         DataType<Type> sourceFaultType = new DataType<Type>(String.class, String.class);
         List<DataType<Type>> sourceFaultTypes = new ArrayList<DataType<Type>>();
         sourceFaultTypes.add(0, sourceFaultType);
-        Operation<Type> opSource1 = new Operation<Type>("op1", null, null, sourceFaultTypes, false, null);
+        Operation<Type> opSource1 =
+            new Operation<Type>("op1", null, null, sourceFaultTypes, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> sourceOperations = new HashMap<String, Operation<Type>>();
         sourceOperations.put("op1", opSource1);
         source.setOperations(sourceOperations);
 
         ServiceContract<Type> target = new MockContract<Type>("FooContract");
-        Operation<Type> opTarget = new Operation<Type>("op1", null, null, null, false, null);
+        Operation<Type> opTarget = new Operation<Type>("op1", null, null, null, false, null, NO_CONVERSATION);
         Map<String, Operation<Type>> targetOperations = new HashMap<String, Operation<Type>>();
         targetOperations.put("op1", opTarget);
         target.setOperations(targetOperations);

Modified: incubator/tuscany/java/sca/runtime/osgi/src/main/java/org/apache/tuscany/osgi/binding/OSGiInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/osgi/src/main/java/org/apache/tuscany/osgi/binding/OSGiInvoker.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/runtime/osgi/src/main/java/org/apache/tuscany/osgi/binding/OSGiInvoker.java (original)
+++ incubator/tuscany/java/sca/runtime/osgi/src/main/java/org/apache/tuscany/osgi/binding/OSGiInvoker.java Fri Nov 24 23:04:41 2006
@@ -40,7 +40,7 @@
 
     public Message invoke(Message msg) throws InvocationRuntimeException {
         try {
-            Object resp = invokeTarget(msg.getBody());
+            Object resp = invokeTarget(msg.getBody(), TargetInvoker.NONE);
             msg.setBody(resp);
         } catch (InvocationTargetException e) {
             msg.setBody(e.getCause());
@@ -48,7 +48,7 @@
         return msg;
     }
 
-    public Object invokeTarget(Object payload) throws InvocationTargetException {
+    public Object invokeTarget(Object payload, final short sequence) throws InvocationTargetException {
         try {
             return remoteMethod.invoke(proxy, (Object[]) payload);
         } catch (IllegalAccessException e) {

Modified: incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java Fri Nov 24 23:04:41 2006
@@ -20,17 +20,17 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.LinkedList;
-
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.client.OperationClient;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
-import org.apache.tuscany.spi.wire.InvocationRuntimeException;
-import org.apache.tuscany.spi.wire.Message;
 
 public class Axis2AsyncTargetInvoker extends Axis2TargetInvoker {
 
@@ -45,13 +45,14 @@
         super(serviceClient, wsdlOperationName, options, soapFactory);
     }
 
-    public Object invokeTarget(final Object payload) throws InvocationTargetException {
+    public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
         throw new InvocationTargetException(new InvocationRuntimeException("Operation not supported"));
     }
 
-    private Object invokeTarget(final Object payload, LinkedList<Object> callbackRoutingChain) throws InvocationTargetException {
+    private Object invokeTarget(final Object payload, LinkedList<Object> callbackRoutingChain)
+        throws InvocationTargetException {
         try {
-            Object[] args = (Object[])payload;
+            Object[] args = (Object[]) payload;
             OperationClient operationClient = createOperationClient(args);
             callbackInvoker.setCallbackRoutingChain(callbackRoutingChain);
             Axis2ReferenceCallback callback = new Axis2ReferenceCallback(callbackInvoker);

Modified: incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java Fri Nov 24 23:04:41 2006
@@ -19,17 +19,17 @@
 package org.apache.tuscany.binding.axis2;
 
 import java.lang.reflect.InvocationTargetException;
-
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.client.OperationClient;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
-import org.apache.tuscany.spi.wire.InvocationRuntimeException;
-import org.apache.tuscany.spi.wire.Message;
 
 public class Axis2OneWayTargetInvoker extends Axis2TargetInvoker {
 
@@ -43,9 +43,9 @@
         super(serviceClient, wsdlOperationName, options, soapFactory);
     }
 
-    public Object invokeTarget(final Object payload) throws InvocationTargetException {
+    public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
         try {
-            Object[] args = (Object[])payload;
+            Object[] args = (Object[]) payload;
             OperationClient operationClient = createOperationClient(args);
 
             operationClient.execute(false);
@@ -61,7 +61,7 @@
 
     public Message invoke(Message msg) throws InvocationRuntimeException {
         try {
-            Object resp = invokeTarget(msg.getBody());
+            Object resp = invokeTarget(msg.getBody(), NONE);
             msg.setBody(resp);
         } catch (Throwable e) {
             msg.setBodyWithFault(e);

Modified: incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallback.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallback.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallback.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallback.java Fri Nov 24 23:04:41 2006
@@ -25,6 +25,7 @@
 import org.apache.axis2.client.async.Callback;
 import org.apache.axis2.context.MessageContext;
 import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.TargetInvoker;
 
 public class Axis2ReferenceCallback extends Callback {
 
@@ -38,7 +39,7 @@
         MessageContext responseMC = result.getResponseMessageContext();
         OMElement responseOM = responseMC.getEnvelope().getBody().getFirstElement();
         try {
-            targetInvoker.invokeTarget(new Object[] {responseOM});
+            targetInvoker.invokeTarget(new Object[] {responseOM}, TargetInvoker.NONE);
         } catch (InvocationTargetException e) {
             // FIXME what is the appropriate exception here?
             throw new InvocationRuntimeException(e);

Modified: incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java Fri Nov 24 23:04:41 2006
@@ -28,23 +28,23 @@
 import org.apache.tuscany.spi.wire.TargetInvoker;
 
 public class Axis2ReferenceCallbackTargetInvoker implements TargetInvoker {
-    
+
     private Operation operation;
     private InboundWire inboundWire;
     private LinkedList<Object> callbackRoutingChain;
     private boolean cacheable;
     Axis2CallbackInvocationHandler invocationHandler;
-    
+
     public Axis2ReferenceCallbackTargetInvoker(Operation operation,
-            InboundWire inboundWire,
-            Axis2CallbackInvocationHandler invocationHandler) {
+                                               InboundWire inboundWire,
+                                               Axis2CallbackInvocationHandler invocationHandler) {
 
         this.operation = operation;
         this.inboundWire = inboundWire;
         this.invocationHandler = invocationHandler;
     }
 
-    public Object invokeTarget(final Object payload) throws InvocationTargetException {
+    public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
         Object[] args;
         if (payload != null && !payload.getClass().isArray()) {
             args = new Object[]{payload};
@@ -53,15 +53,15 @@
         }
         try {
             return invocationHandler.invoke(operation, args, callbackRoutingChain);
-        } catch(Throwable t) {
+        } catch (Throwable t) {
             t.printStackTrace();
             throw new InvocationTargetException(t);
         }
     }
-    
+
     public Message invoke(Message msg) throws InvocationRuntimeException {
         try {
-            Object resp = invokeTarget(msg.getBody());
+            Object resp = invokeTarget(msg.getBody(), NONE);
             msg.setBody(resp);
         } catch (InvocationTargetException e) {
             msg.setBodyWithFault(e.getCause());
@@ -92,7 +92,7 @@
         invoker.invocationHandler = this.invocationHandler;
         return invoker;
     }
-    
+
     public void setCallbackRoutingChain(LinkedList<Object> callbackRoutingChain) {
         this.callbackRoutingChain = callbackRoutingChain;
     }

Modified: incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java Fri Nov 24 23:04:41 2006
@@ -180,7 +180,7 @@
                 if (chain.getTargetInvoker() == null) {
                     throw new AssertionError("No target invoker [" + chain.getOperation().getName() + "]");
                 }
-                return chain.getTargetInvoker().invokeTarget(args);
+                return chain.getTargetInvoker().invokeTarget(args, TargetInvoker.NONE);
             } catch (InvocationTargetException e) {
                 // the cause was thrown by the target so throw it
                 throw e;

Modified: incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java?view=diff&rev=479093&r1=479092&r2=479093
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java Fri Nov 24 23:04:41 2006
@@ -20,6 +20,10 @@
 
 import java.lang.reflect.InvocationTargetException;
 
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axis2.AxisFault;
@@ -28,10 +32,6 @@
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.util.Utils;
 import org.apache.tuscany.binding.axis2.Axis2Service.InvocationContext;
-import org.apache.tuscany.binding.axis2.Axis2AsyncTargetInvoker;
-import org.apache.tuscany.spi.wire.InvocationRuntimeException;
-import org.apache.tuscany.spi.wire.Message;
-import org.apache.tuscany.spi.wire.TargetInvoker;
 
 public class Axis2ServiceCallbackTargetInvoker implements TargetInvoker {
 
@@ -41,10 +41,10 @@
         this.service = service;
     }
 
-    public Object invokeTarget(final Object payload) throws InvocationTargetException {
+    public Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
         throw new InvocationTargetException(new InvocationRuntimeException("Operation not supported"));
     }
-    
+
     private Object invokeTarget(final Object payload, Object correlationId) throws InvocationTargetException {
         try {
             // Use current correlation id as index to retrieve inv context
@@ -52,12 +52,12 @@
 
             MessageContext outMC = Utils.createOutMessageContext(invCtx.inMessageContext);
             outMC.getOperationContext().addMessageContext(outMC);
-            
-            OMElement responseOM = null;
+
+            OMElement responseOM;
             if (payload != null && !payload.getClass().isArray()) {
-                responseOM = (OMElement)payload;
+                responseOM = (OMElement) payload;
             } else {
-                responseOM = (OMElement)((Object[])payload)[0];
+                responseOM = (OMElement) ((Object[]) payload)[0];
             }
             SOAPEnvelope soapEnvelope = invCtx.soapFactory.getDefaultEnvelope();
             soapEnvelope.getBody().addChild(responseOM);
@@ -65,15 +65,16 @@
             outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
 
             AxisEngine engine =
-                new AxisEngine(invCtx.inMessageContext.getOperationContext().getServiceContext().getConfigurationContext());
+                new AxisEngine(
+                    invCtx.inMessageContext.getOperationContext().getServiceContext().getConfigurationContext());
             engine.send(outMC);
-            
+
             invCtx.doneSignal.countDown();
 
             service.removeMapping(correlationId);
         } catch (AxisFault e) {
             throw new InvocationTargetException(e);
-        } catch(Throwable t) {
+        } catch (Throwable t) {
             throw new Axis2BindingRunTimeException(t);
         }
 
@@ -96,7 +97,7 @@
 
     public Axis2ServiceCallbackTargetInvoker clone() throws CloneNotSupportedException {
         try {
-            return (Axis2ServiceCallbackTargetInvoker)super.clone();
+            return (Axis2ServiceCallbackTargetInvoker) super.clone();
         } catch (CloneNotSupportedException e) {
             // will not happen
             return null;



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org