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 10:22:06 UTC

svn commit: r479109 - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/builder/ core/src/main/java/org/apache/tuscany/core/component/scope/ core/src/main/java/org/apache/tuscany/core/databinding/impl/ core/src/main/java...

Author: jmarino
Date: Sat Nov 25 01:22:05 2006
New Revision: 479109

URL: http://svn.apache.org/viewvc?view=rev&rev=479109
Log:
move WirePostProcessor to spi/wire; add post processor for conversational wires; add conversational interceptors

Added:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationEndInterceptor.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptor.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationWirePostProcessor.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationEndInterceptorTestCase.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptorTestCase.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationWirePostProcessorTestCase.java   (with props)
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/PostProcessingException.java   (contents, props changed)
      - copied, changed from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/PostProcessingException.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessor.java   (contents, props changed)
      - copied, changed from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessor.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorExtension.java   (contents, props changed)
      - copied, changed from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorExtension.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorRegistry.java   (contents, props changed)
      - copied, changed from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorRegistry.java
Removed:
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/PostProcessingException.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessor.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorExtension.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorRegistry.java
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingWirePostProcessor.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImplTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=479109&r1=479108&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Sat Nov 25 01:22:05 2006
@@ -27,7 +27,7 @@
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.builder.BuilderConfigException;
 import org.apache.tuscany.spi.builder.Connector;
-import org.apache.tuscany.spi.builder.WirePostProcessorRegistry;
+import org.apache.tuscany.spi.wire.WirePostProcessorRegistry;
 import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.ComponentRuntimeException;

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImpl.java?view=diff&rev=479109&r1=479108&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImpl.java Sat Nov 25 01:22:05 2006
@@ -21,8 +21,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.tuscany.spi.builder.WirePostProcessor;
-import org.apache.tuscany.spi.builder.WirePostProcessorRegistry;
+import org.apache.tuscany.spi.wire.WirePostProcessor;
+import org.apache.tuscany.spi.wire.WirePostProcessorRegistry;
 import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.OutboundWire;
 

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java?view=diff&rev=479109&r1=479108&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ConversationalScopeContainerImpl.java Sat Nov 25 01:22:05 2006
@@ -107,6 +107,28 @@
         }
     }
 
+    public Object getAssociatedInstance(AtomicComponent component) throws TargetException {
+        String conversationID = (String) workContext.getIdentifier(Scope.CONVERSATION);
+        if (conversationID == null) {
+            TargetException e = new TargetException("Conversation id not set in context");
+            e.setIdentifier(component.getName());
+            throw e;
+        }
+        try {
+            workContext.setCurrentAtomicComponent(component);
+            Object instance = nonDurableStore.readRecord(component, conversationID);
+            if (instance != null) {
+                return instance;
+            } else {
+                throw new TargetNotFoundException(component.getName());
+            }
+        } catch (StoreReadException e) {
+            throw new TargetException(e);
+        } finally {
+            workContext.setCurrentAtomicComponent(null);
+        }
+    }
+    
     public void persistNew(AtomicComponent component, String id, Object instance, long expiration)
         throws PersistenceException {
         try {
@@ -130,28 +152,6 @@
             nonDurableStore.removeRecord(component, id);
         } catch (StoreWriteException e) {
             throw new PersistenceException(e);
-        }
-    }
-
-    public Object getAssociatedInstance(AtomicComponent component) throws TargetException {
-        String conversationID = (String) workContext.getIdentifier(Scope.CONVERSATION);
-        if (conversationID == null) {
-            TargetException e = new TargetException("Conversation id not set in context");
-            e.setIdentifier(component.getName());
-            throw e;
-        }
-        try {
-            workContext.setCurrentAtomicComponent(component);
-            Object instance = nonDurableStore.readRecord(component, conversationID);
-            if (instance != null) {
-                return instance;
-            } else {
-                throw new TargetNotFoundException(component.getName());
-            }
-        } catch (StoreReadException e) {
-            throw new TargetException(e);
-        } finally {
-            workContext.setCurrentAtomicComponent(null);
         }
     }
 

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingWirePostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingWirePostProcessor.java?view=diff&rev=479109&r1=479108&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingWirePostProcessor.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingWirePostProcessor.java Sat Nov 25 01:22:05 2006
@@ -25,7 +25,7 @@
 import org.osoa.sca.annotations.Constructor;
 
 import org.apache.tuscany.spi.annotation.Autowire;
-import org.apache.tuscany.spi.builder.WirePostProcessorExtension;
+import org.apache.tuscany.spi.wire.WirePostProcessorExtension;
 import org.apache.tuscany.spi.component.Reference;
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.databinding.Mediator;

Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationEndInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationEndInterceptor.java?view=auto&rev=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationEndInterceptor.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationEndInterceptor.java Sat Nov 25 01:22:05 2006
@@ -0,0 +1,50 @@
+/*
+ * 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.core.wire;
+
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+/**
+ * Placed on an invocation chain for a service operation that ends a conversation.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ConversationEndInterceptor implements Interceptor {
+    private Interceptor next;
+
+    public Interceptor getNext() {
+        return next;
+    }
+
+    public void setNext(Interceptor next) {
+        this.next = next;
+    }
+
+    public boolean isOptimizable() {
+        return false;
+    }
+
+    public Message invoke(Message msg) {
+        msg.setConversationSequence(TargetInvoker.END);
+        return next.invoke(msg);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationEndInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationEndInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptor.java?view=auto&rev=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptor.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptor.java Sat Nov 25 01:22:05 2006
@@ -0,0 +1,60 @@
+/*
+ * 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.core.wire;
+
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+/**
+ * An interceptor placed on the client side of an invocation chain to handle setting of conversational context.
+ * Specifically, this interceptor tracks the conversational sequence, for example if the conversation has started or a
+ * new one needs to be initiated.
+ * <p/>
+ * Note that this interceptor must be shared accross all invocation chains for a service reference but it may not be
+ * shared accross client instances as it maintains state specific to the client.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ConversationSequenceInterceptor implements Interceptor {
+    private boolean conversationStarted;
+    private Interceptor next;
+
+    public Interceptor getNext() {
+        return next;
+    }
+
+    public void setNext(Interceptor next) {
+        this.next = next;
+    }
+
+    public boolean isOptimizable() {
+        return false;
+    }
+
+    public Message invoke(Message msg) {
+        if (conversationStarted) {
+            msg.setConversationSequence(TargetInvoker.CONTINUE);
+        } else {
+            conversationStarted = true;
+            msg.setConversationSequence(TargetInvoker.START);
+        }
+        return next.invoke(msg);
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationWirePostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationWirePostProcessor.java?view=auto&rev=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationWirePostProcessor.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationWirePostProcessor.java Sat Nov 25 01:22:05 2006
@@ -0,0 +1,58 @@
+/*
+ * 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.core.wire;
+
+import java.util.Map;
+
+import org.apache.tuscany.spi.model.InteractionScope;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.OutboundWire;
+import org.apache.tuscany.spi.wire.WirePostProcessorExtension;
+
+/**
+ * Adds conversation-related interceptors to service invocations chains. A {@link ConversationEndInterceptor} is
+ * inserted on a chain for an operation marked as ending conversation. A {@link ConversationSequenceInterceptor} is
+ * inserted into all other invocation chains.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ConversationWirePostProcessor extends WirePostProcessorExtension {
+
+    public void process(OutboundWire source, InboundWire target) {
+        if (!InteractionScope.CONVERSATIONAL.equals(source.getServiceContract().getInteractionScope())) {
+            return;
+        }
+        // the sequence interceptor is shared across all chans for a service
+        ConversationSequenceInterceptor sequenceInterceptor = new ConversationSequenceInterceptor();
+        for (Map.Entry<Operation<?>, OutboundInvocationChain> entry : source.getInvocationChains().entrySet()) {
+            int sequence = entry.getKey().getConversationSequence();
+            if (sequence == Operation.CONVERSATION_END) {
+                entry.getValue().addInterceptor(0, new ConversationEndInterceptor());
+            } else if (sequence == Operation.CONVERSATION_CONTINUE) {
+                entry.getValue().addInterceptor(0, sequenceInterceptor);
+            }
+        }
+    }
+
+    public void process(InboundWire source, OutboundWire target) {
+        // do nothing
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationWirePostProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/ConversationWirePostProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java?view=diff&rev=479109&r1=479108&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java Sat Nov 25 01:22:05 2006
@@ -21,7 +21,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.tuscany.spi.builder.WirePostProcessorRegistry;
+import org.apache.tuscany.spi.wire.WirePostProcessorRegistry;
 import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.ServiceContract;

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImplTestCase.java?view=diff&rev=479109&r1=479108&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImplTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/WirePostProcessorRegistryImplTestCase.java Sat Nov 25 01:22:05 2006
@@ -18,8 +18,8 @@
  */
 package org.apache.tuscany.core.builder;
 
-import org.apache.tuscany.spi.builder.WirePostProcessor;
-import org.apache.tuscany.spi.builder.WirePostProcessorRegistry;
+import org.apache.tuscany.spi.wire.WirePostProcessor;
+import org.apache.tuscany.spi.wire.WirePostProcessorRegistry;
 import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.OutboundWire;
 

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationEndInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationEndInterceptorTestCase.java?view=auto&rev=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationEndInterceptorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationEndInterceptorTestCase.java Sat Nov 25 01:22:05 2006
@@ -0,0 +1,61 @@
+/*
+ * 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.core.wire;
+
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ConversationEndInterceptorTestCase extends TestCase {
+
+    public void testInvoke() {
+        Interceptor next = new MockEndInterceptor();
+        ConversationEndInterceptor interceptor = new ConversationEndInterceptor();
+        interceptor.setNext(next);
+        Message msg = new MessageImpl();
+        interceptor.invoke(msg);
+    }
+
+
+    private class MockEndInterceptor implements Interceptor {
+
+        public Message invoke(Message msg) {
+            assertEquals(TargetInvoker.END, msg.getConversationSequence());
+            return msg;
+        }
+
+        public void setNext(Interceptor next) {
+        }
+
+        public Interceptor getNext() {
+            return null;
+        }
+
+        public boolean isOptimizable() {
+            return false;
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationEndInterceptorTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationEndInterceptorTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptorTestCase.java?view=auto&rev=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptorTestCase.java Sat Nov 25 01:22:05 2006
@@ -0,0 +1,92 @@
+/*
+ * 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.core.wire;
+
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ConversationSequenceInterceptorTestCase extends TestCase {
+
+    public void testStartSequence() {
+        Interceptor next = new MockStartInterceptor();
+        ConversationSequenceInterceptor interceptor = new ConversationSequenceInterceptor();
+        interceptor.setNext(next);
+        Message msg = new MessageImpl();
+        interceptor.invoke(msg);
+    }
+
+    public void testContinueSequence() {
+        Interceptor next = new MockStartInterceptor();
+        Interceptor next2 = new MockContinueInterceptor();
+        ConversationSequenceInterceptor interceptor = new ConversationSequenceInterceptor();
+        // set up conversation
+        interceptor.setNext(next);
+        Message msg = new MessageImpl();
+        interceptor.invoke(msg);
+        //  swap interceptor to test continue
+        interceptor.setNext(next2);
+        interceptor.invoke(msg);
+    }
+
+    private class MockStartInterceptor implements Interceptor {
+
+        public Message invoke(Message msg) {
+            assertEquals(TargetInvoker.START, msg.getConversationSequence());
+            return msg;
+        }
+
+        public void setNext(Interceptor next) {
+        }
+
+        public Interceptor getNext() {
+            return null;
+        }
+
+        public boolean isOptimizable() {
+            return false;
+        }
+    }
+
+    private class MockContinueInterceptor implements Interceptor {
+
+        public Message invoke(Message msg) {
+            assertEquals(TargetInvoker.CONTINUE, msg.getConversationSequence());
+            return msg;
+        }
+
+        public void setNext(Interceptor next) {
+        }
+
+        public Interceptor getNext() {
+            return null;
+        }
+
+        public boolean isOptimizable() {
+            return false;
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptorTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationSequenceInterceptorTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationWirePostProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationWirePostProcessorTestCase.java?view=auto&rev=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationWirePostProcessorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationWirePostProcessorTestCase.java Sat Nov 25 01:22:05 2006
@@ -0,0 +1,84 @@
+/*
+ * 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.core.wire;
+
+import java.lang.reflect.Type;
+
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.model.InteractionScope;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.OutboundWire;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ConversationWirePostProcessorTestCase extends TestCase {
+    private ConversationWirePostProcessor processor;
+
+    public void testOutboundToInboundEndConversation() {
+        OutboundWire wire = new OutboundWireImpl();
+        ServiceContract contract = new MockServiceContract();
+        contract.setInteractionScope(InteractionScope.CONVERSATIONAL);
+        wire.setServiceContract(contract);
+        Operation<Type> operation = new Operation<Type>("foo", null, null, null);
+        operation.setConversationSequence(Operation.CONVERSATION_END);
+        OutboundInvocationChain chain = new OutboundInvocationChainImpl(operation);
+        wire.addInvocationChain(operation, chain);
+        processor.process(wire, null);
+        assertTrue(chain.getHeadInterceptor() instanceof ConversationEndInterceptor);
+    }
+
+    public void testOutboundToInboundContinueConversation() {
+        OutboundWire wire = new OutboundWireImpl();
+        ServiceContract contract = new MockServiceContract();
+        contract.setInteractionScope(InteractionScope.CONVERSATIONAL);
+        wire.setServiceContract(contract);
+        Operation<Type> operation = new Operation<Type>("foo", null, null, null);
+        operation.setConversationSequence(Operation.CONVERSATION_CONTINUE);
+        OutboundInvocationChain chain = new OutboundInvocationChainImpl(operation);
+        wire.addInvocationChain(operation, chain);
+        processor.process(wire, null);
+        assertTrue(chain.getHeadInterceptor() instanceof ConversationSequenceInterceptor);
+    }
+
+    public void testOutboundToInboundNoConversation() {
+        OutboundWire wire = new OutboundWireImpl();
+        ServiceContract contract = new MockServiceContract();
+        contract.setInteractionScope(InteractionScope.NONCONVERSATIONAL);
+        wire.setServiceContract(contract);
+        Operation<Type> operation = new Operation<Type>("foo", null, null, null);
+        operation.setConversationSequence(Operation.NO_CONVERSATION);
+        OutboundInvocationChain chain = new OutboundInvocationChainImpl(operation);
+        wire.addInvocationChain(operation, chain);
+        processor.process(wire, null);
+        assertNull(chain.getHeadInterceptor());
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        processor = new ConversationWirePostProcessor();
+    }
+
+    private class MockServiceContract extends ServiceContract<Object> {
+
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationWirePostProcessorTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/wire/ConversationWirePostProcessorTestCase.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=479109&r1=479108&r2=479109
==============================================================================
--- 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 Sat Nov 25 01:22:05 2006
@@ -33,7 +33,6 @@
  */
 public class Operation<T> {
     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;
 
@@ -76,7 +75,7 @@
      * @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}
+     *                    CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
      */
     public Operation(final String name,
                      final DataType<List<DataType<T>>> inputType,
@@ -200,7 +199,7 @@
 
     /**
      * Returns the sequence the operation is called in a conversation, {@link NO_CONVERSATION}, {@link
-     * CONVERSATION_START}, {@link CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
+     * CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
      *
      * @return the sequence the operation is called in a conversation
      */
@@ -209,8 +208,8 @@
     }
 
     /**
-     * Sets the sequence the operation is called in a conversation, {@link NO_CONVERSATION}, {@link CONVERSATION_START},
-     * {@link CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
+     * Sets the sequence the operation is called in a conversation, {@link NO_CONVERSATION}, {@link
+     * CONVERSATION_CONTINUE}, or {@link CONVERSATION_END}
      */
     public void setConversationSequence(int conversationSequence) {
         this.conversationSequence = conversationSequence;

Copied: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/PostProcessingException.java (from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/PostProcessingException.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/PostProcessingException.java?view=diff&rev=479109&p1=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/PostProcessingException.java&r1=478441&p2=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/PostProcessingException.java&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/PostProcessingException.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/PostProcessingException.java Sat Nov 25 01:22:05 2006
@@ -16,7 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tuscany.spi.builder;
+package org.apache.tuscany.spi.wire;
+
+import org.apache.tuscany.spi.builder.BuilderException;
 
 /**
  * Denotes an error during post-processing of a wire

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

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

Copied: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessor.java (from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessor.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessor.java?view=diff&rev=479109&p1=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessor.java&r1=478441&p2=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessor.java&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessor.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessor.java Sat Nov 25 01:22:05 2006
@@ -16,10 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tuscany.spi.builder;
-
-import org.apache.tuscany.spi.wire.InboundWire;
-import org.apache.tuscany.spi.wire.OutboundWire;
+package org.apache.tuscany.spi.wire;
 
 /**
  * Implementations are called after inbound and outbound wires are decorated with policy and before they are connected.

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

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

Copied: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorExtension.java (from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorExtension.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorExtension.java?view=diff&rev=479109&p1=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorExtension.java&r1=478441&p2=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorExtension.java&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorExtension.java Sat Nov 25 01:22:05 2006
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tuscany.spi.builder;
+package org.apache.tuscany.spi.wire;
 
 import org.osoa.sca.annotations.Init;
 import org.osoa.sca.annotations.Scope;

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

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

Copied: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorRegistry.java (from r478441, incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorRegistry.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorRegistry.java?view=diff&rev=479109&p1=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorRegistry.java&r1=478441&p2=incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorRegistry.java&r2=479109
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/builder/WirePostProcessorRegistry.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WirePostProcessorRegistry.java Sat Nov 25 01:22:05 2006
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tuscany.spi.builder;
+package org.apache.tuscany.spi.wire;
 
 /**
  * Acts as a delegating <code>WirePostProcessor</code>, delegating post-processing of wires after policies have been

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

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



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