summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/core-spi
diff options
context:
space:
mode:
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();
+ }
}