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