TUSCANY-3770: Remove thread message context on completion of each request

git-svn-id: https://svn.apache.org/repos/asf/tuscany/sca-java-1.x/trunk@1033012 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java b/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java
index dd3a4f9..becf5f9 100644
--- a/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java
+++ b/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ThreadMessageContext.java
@@ -28,11 +28,12 @@
  */
 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<Message> CONTEXT = new ThreadLocal<Message>() {
         @Override
         protected synchronized Message initialValue() {
-            Message msg =  new MessageImpl();
-            msg.setFrom(new EndpointReferenceImpl("/"));
             return msg;
         }
     };
@@ -58,6 +59,12 @@
     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 @@
         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();
     }
+    */
 }
diff --git a/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java b/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java
index 27dd89d..81ae425 100644
--- a/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java
+++ b/modules/host-webapp/src/main/java/org/apache/tuscany/sca/host/webapp/WebAppServletHost.java
@@ -330,8 +330,9 @@
         instance = null;
         servlets.clear();
         LogFactory.release(this.getClass().getClassLoader());
-        Introspector.flushCaches(); 
-        ThreadMessageContext.removeMessageContext();
+        Introspector.flushCaches();
+        // TUSCANY-3770: thread message context now removed implicitly
+        //ThreadMessageContext.removeMessageContext();
     }
 
     public String getContextPath() {