diff options
Diffstat (limited to '')
-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(); + } } |