diff options
author | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2011-08-18 19:50:52 +0000 |
---|---|---|
committer | antelder <antelder@13f79535-47bb-0310-9956-ffa450edef68> | 2011-08-18 19:50:52 +0000 |
commit | 0de27104d26bd86e179533dd3ed1545177559f6a (patch) | |
tree | 46bd054406815f47024a13a6e50ef6b4dd2db098 /sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java | |
parent | 85d474bb04fbf9c800a75bf3012f72d7cda87cf1 (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/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java')
-rw-r--r-- | sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java | 26 |
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(); + } } |