From 62e7ebe8f099a7c7093f6f9e27ec9302e3996971 Mon Sep 17 00:00:00 2001 From: nash Date: Wed, 10 Nov 2010 20:18:35 +0000 Subject: Merge r1033012 TUSCANY-3770: Remove thread message context on completion of each request git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1033692 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/core/invocation/ThreadMessageContext.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'sca-java-1.x/branches/sca-java-1.6.1/modules/core/src') diff --git a/sca-java-1.x/branches/sca-java-1.6.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java b/sca-java-1.x/branches/sca-java-1.6.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java index dd3a4f9ac3..becf5f9295 100644 --- a/sca-java-1.x/branches/sca-java-1.6.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java +++ b/sca-java-1.x/branches/sca-java-1.6.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java @@ -28,11 +28,12 @@ import org.apache.tuscany.sca.invocation.Message; */ public final class ThreadMessageContext { + // TUSCANY-3770: Used as a marker for detecting when thread context information can be removed + private static final Message msg = new MessageImpl(); + private static final ThreadLocal CONTEXT = new ThreadLocal() { @Override protected synchronized Message initialValue() { - Message msg = new MessageImpl(); - msg.setFrom(new EndpointReferenceImpl("/")); return msg; } }; @@ -58,6 +59,12 @@ public final class ThreadMessageContext { public static Message setMessageContext(Message context) { Message old = CONTEXT.get(); CONTEXT.set(context); + + // TUSCANY-3770: Remove thread context information when the request invocation has completed + if (context == msg) { + CONTEXT.remove(); + } + return old; } @@ -70,11 +77,13 @@ public final class ThreadMessageContext { return CONTEXT.get(); } - /** + // TUSCANY-3770: This method is no longer needed, as thread context information is removed implicitly + /* * Removes and state from the current thread to ensure that * any associated classloaders can be GCd - */ + * public static void removeMessageContext() { CONTEXT.remove(); } + */ } -- cgit v1.2.3