You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2011/08/18 21:50:52 UTC
svn commit: r1159380 -
/tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java
Author: antelder
Date: Thu Aug 18 19:50:52 2011
New Revision: 1159380
URL: http://svn.apache.org/viewvc?rev=1159380&view=rev
Log:
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.
Modified:
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java
Modified: tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java?rev=1159380&r1=1159379&r2=1159380&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java Thu Aug 18 19:50:52 2011
@@ -28,13 +28,31 @@ import org.apache.tuscany.sca.invocation
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();
+ }
}