summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/core-spi
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-08-18 19:50:52 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-08-18 19:50:52 +0000
commit0de27104d26bd86e179533dd3ed1545177559f6a (patch)
tree46bd054406815f47024a13a6e50ef6b4dd2db098 /sca-java-2.x/trunk/modules/core-spi
parent85d474bb04fbf9c800a75bf3012f72d7cda87cf1 (diff)
TUSCANY-3906: Apply patch from Eric Larsen for an enhancement to ThreadMessageContext enabling external tooling to retrieve the previous message context in a given invocation chain.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1159380 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/core-spi')
-rw-r--r--sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java26
1 files changed, 26 insertions, 0 deletions
diff --git a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java
index d6237b7ce3..136f226781 100644
--- a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java
+++ b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java
@@ -28,13 +28,31 @@ import org.apache.tuscany.sca.invocation.Message;
public final class ThreadMessageContext {
private static final ThreadLocal<Message> CONTEXT = new ThreadLocal<Message>();
+
+ private static final ThreadLocal<Message> PREVIOUS_CONTEXT = new ThreadLocal<Message>();
private ThreadMessageContext() {
}
+ /**
+ * Set the WorkContext for the current thread.
+ * The current work context is returned and must be restored after the invocation is complete.
+ * Typical usage would be:
+ * <pre>
+ * WorkContext old = PojoWorkContextTunnel.setThreadWorkContext(newContext);
+ * try {
+ * ... invoke user code ...
+ * } finally {
+ * PojoWorkContextTunnel.setThreadWorkContext(old);
+ * }
+ * </pre>
+ * @param context
+ * @return the current work context for the thread; this must be restored after the invocation is made
+ */
public static Message setMessageContext(Message context) {
Message old = CONTEXT.get();
CONTEXT.set(context);
+ PREVIOUS_CONTEXT.set(old);
return old;
}
@@ -46,6 +64,10 @@ public final class ThreadMessageContext {
public static Message getMessageContext() {
return CONTEXT.get();
}
+
+ public static Message getPreviousMessageContext() {
+ return PREVIOUS_CONTEXT.get();
+ }
/**
* Removes and state from the current thread to ensure that
@@ -54,4 +76,8 @@ public final class ThreadMessageContext {
public static void removeMessageContext() {
CONTEXT.remove();
}
+
+ public static void removePreviousMessageContext() {
+ PREVIOUS_CONTEXT.remove();
+ }
}