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/23 18:28:48 UTC

svn commit: r478623 - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/component/ core/src/test/java/org/apache/tuscany/core/component/scope/ spi/src/main/java/org/apache/tuscany/spi/component/

Author: jmarino
Date: Thu Nov 23 09:28:44 2006
New Revision: 478623

URL: http://svn.apache.org/viewvc?view=rev&rev=478623
Log:
support setting current atomic component for deserialization of conversational state

Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/WorkContextTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java?view=diff&rev=478623&r1=478622&r2=478623
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java Thu Nov 23 09:28:44 2006
@@ -22,6 +22,7 @@
 import java.util.LinkedList;
 import java.util.Map;
 
+import org.apache.tuscany.spi.component.AtomicComponent;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.WorkContext;
 
@@ -35,6 +36,7 @@
     private static final Object REMOTE_CONTEXT = new Object();
     private static final Object CORRELATION_ID = new Object();
     private static final Object CALLBACK_ROUTING_CHAIN = new Object();
+    private static final Object CURRENT_ATOMIC = new Object();
 
     // [rfeng] We cannot use InheritableThreadLocal for message ids here since it's shared by parent and children
     private ThreadLocal<Map<Object, Object>> workContext = new ThreadLocal<Map<Object, Object>>();
@@ -55,12 +57,21 @@
     }
 
     public void setCurrentCorrelationId(Object correlationId) {
+        Map<Object, Object> map = getWorkContextMap();
+        map.put(CORRELATION_ID, correlationId);
+    }
+
+    public Object getCurrentAtomicComponent() {
         Map<Object, Object> map = workContext.get();
         if (map == null) {
-            map = new IdentityHashMap<Object, Object>();
-            workContext.set(map);
+            return null;
         }
-        map.put(CORRELATION_ID, correlationId);
+        return map.get(CURRENT_ATOMIC);
+    }
+
+    public void setCurrentAtomicComponent(AtomicComponent component) {
+        Map<Object, Object> map = getWorkContextMap();
+        map.put(CURRENT_ATOMIC, component);
     }
 
     @SuppressWarnings("unchecked")
@@ -73,11 +84,7 @@
     }
 
     public void setCurrentCallbackRoutingChain(LinkedList<Object> callbackRoutingChain) {
-        Map<Object, Object> map = workContext.get();
-        if (map == null) {
-            map = new IdentityHashMap<Object, Object>();
-            workContext.set(map);
-        }
+        Map<Object, Object> map = getWorkContextMap();
         map.put(CALLBACK_ROUTING_CHAIN, callbackRoutingChain);
     }
 
@@ -91,11 +98,7 @@
 
 
     public void setRemoteComponent(CompositeComponent component) {
-        Map<Object, Object> map = workContext.get();
-        if (map == null) {
-            map = new IdentityHashMap<Object, Object>();
-            workContext.set(map);
-        }
+        Map<Object, Object> map = getWorkContextMap();
         map.put(REMOTE_CONTEXT, component);
     }
 
@@ -136,4 +139,12 @@
         inheritableContext.remove();
     }
 
+    private Map<Object, Object> getWorkContextMap() {
+        Map<Object, Object> map = workContext.get();
+        if (map == null) {
+            map = new IdentityHashMap<Object, Object>();
+            workContext.set(map);
+        }
+        return map;
+    }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/WorkContextTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/WorkContextTestCase.java?view=diff&rev=478623&r1=478622&r2=478623
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/WorkContextTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/component/scope/WorkContextTestCase.java Thu Nov 23 09:28:44 2006
@@ -20,6 +20,7 @@
 
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.component.AtomicComponent;
 
 import junit.framework.TestCase;
 import org.apache.tuscany.core.component.WorkContextImpl;
@@ -45,6 +46,21 @@
         assertNull(ctx.getRemoteComponent());
     }
 
+    public void testSetCurrentAtomicComponent() throws Exception {
+        WorkContext ctx = new WorkContextImpl();
+        AtomicComponent component = EasyMock.createNiceMock(AtomicComponent.class);
+        AtomicComponent component2 = EasyMock.createNiceMock(AtomicComponent.class);
+        ctx.setCurrentAtomicComponent(component);
+        assertEquals(component, ctx.getCurrentAtomicComponent());
+        ctx.setCurrentAtomicComponent(component2);
+        assertEquals(component2, ctx.getCurrentAtomicComponent());
+    }
+
+    public void testNonSetCurrentAtomicComponent() throws Exception {
+        WorkContext ctx = new WorkContextImpl();
+        assertNull(ctx.getCurrentAtomicComponent());
+    }
+
     public void testIndentifier() throws Exception {
         WorkContext ctx = new WorkContextImpl();
         Object id = new Object();
@@ -89,7 +105,7 @@
         assertNull(ctx.getIdentifier(this));
     }
 
-    public void testSetGetMessageIds() {
+    public void testSetGetCorrelationId() {
         WorkContext context = new WorkContextImpl();
         context.setCurrentCorrelationId("msg-005");
         assertEquals(context.getCurrentCorrelationId(), "msg-005");
@@ -97,7 +113,7 @@
         assertNull(context.getCurrentCorrelationId());
     }
 
-    public void testSetGetMessageIdsInNewThread() throws InterruptedException {
+    public void testSetGetCorrelationIdInNewThread() throws InterruptedException {
         WorkContext context = new WorkContextImpl();
         context.setCurrentCorrelationId("msg-005");
         assertEquals(context.getCurrentCorrelationId(), "msg-005");
@@ -110,6 +126,30 @@
         assertNull(context.getCurrentCorrelationId());
     }
 
+    public void testCurrentAtomicComponentDoesNotPropagateToChildThread() throws InterruptedException {
+        // NOTE should behaviour be to propagate?
+        WorkContext context = new WorkContextImpl();
+        context.setCurrentAtomicComponent(EasyMock.createNiceMock(AtomicComponent.class));
+        TestCurrentAtomicComponentChildThread t = new TestCurrentAtomicComponentChildThread(context);
+        t.start();
+        t.join();
+        assertTrue(t.passed);
+        context.setCurrentAtomicComponent(null);
+        assertNull(context.getCurrentAtomicComponent());
+    }
+
+    public void testCurrentRemoteComponentDoesNotPropagateToChildThread() throws InterruptedException {
+        // NOTE should behaviour be to propagate?
+        WorkContext context = new WorkContextImpl();
+        context.setRemoteComponent(EasyMock.createNiceMock(CompositeComponent.class));
+        TestCurrentRemoteComponentChildThread t = new TestCurrentRemoteComponentChildThread(context);
+        t.start();
+        t.join();
+        assertTrue(t.passed);
+        context.setRemoteComponent(null);
+        assertNull(context.getRemoteComponent());
+    }
+
     private static final class ChildThread extends Thread {
         private WorkContext context;
         private boolean passed = true;
@@ -121,7 +161,6 @@
         @Override
         public void run() {
             try {
-                //assertNull(context.getCurrentMessageId());
                 assertNull(context.getCurrentCorrelationId());
                 assertEquals("002", context.getIdentifier("TX"));
             } catch (AssertionError e) {
@@ -130,5 +169,44 @@
         }
 
     }
+
+    private static final class TestCurrentAtomicComponentChildThread extends Thread {
+        private WorkContext context;
+        private boolean passed = true;
+
+        private TestCurrentAtomicComponentChildThread(WorkContext context) {
+            this.context = context;
+        }
+
+        @Override
+        public void run() {
+            try {
+                assertNull(context.getCurrentAtomicComponent());
+            } catch (AssertionError e) {
+                passed = false;
+            }
+        }
+
+    }
+
+    private static final class TestCurrentRemoteComponentChildThread extends Thread {
+        private WorkContext context;
+        private boolean passed = true;
+
+        private TestCurrentRemoteComponentChildThread(WorkContext context) {
+            this.context = context;
+        }
+
+        @Override
+        public void run() {
+            try {
+                assertNull(context.getRemoteComponent());
+            } catch (AssertionError e) {
+                passed = false;
+            }
+        }
+
+    }
+
 
 }

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java?view=diff&rev=478623&r1=478622&r2=478623
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java Thu Nov 23 09:28:44 2006
@@ -32,6 +32,23 @@
     void setCurrentCorrelationId(Object correlationId);
 
     /**
+     * Returns the current atomic component as a request is processed or null if it is not being tracked. Note that the
+     * current atomic component is typically only tracked during persistence operations involving implementation
+     * instances
+     *
+     * @return the current atomic component as a request is processed or null
+     */
+    public Object getCurrentAtomicComponent();
+
+    /**
+     * Sets the current atomic component that is handling processing of a request. Note that in most cases it will not
+     * be necessary to track this in the rumtime
+     *
+     * @param component the current atomic component
+     */
+    public void setCurrentAtomicComponent(AtomicComponent component);
+
+    /**
      * Returns the current chain of SCAObject addresses
      */
     LinkedList<Object> getCurrentCallbackRoutingChain();



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