diff options
author | jennthom <jennthom@13f79535-47bb-0310-9956-ffa450edef68> | 2012-03-08 18:59:27 +0000 |
---|---|---|
committer | jennthom <jennthom@13f79535-47bb-0310-9956-ffa450edef68> | 2012-03-08 18:59:27 +0000 |
commit | bce7b55e6627b6734192fddec8d0212cd1d1ce44 (patch) | |
tree | a1d6aea08ef284064c08e0a32ebcdef04f0341d5 /sca-java-2.x/trunk/modules/core-spi/src/main | |
parent | d87ef6ea45dbcb67eed5d72f6f38eefa148b75d0 (diff) |
Changes to add TUSCANY-3770 to 2.x stream and updates to performance testcase to produce an additional heap dump after uninstalling applications.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1298513 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/core-spi/src/main')
-rw-r--r-- | sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ThreadMessageContext.java | 61 |
1 files changed, 58 insertions, 3 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 136f226781..ea1b8b6d30 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 @@ -18,6 +18,12 @@ */ package org.apache.tuscany.sca.context; +import java.util.HashMap; +import java.util.Map; + +import org.apache.tuscany.sca.assembly.Endpoint; +import org.apache.tuscany.sca.assembly.EndpointReference; +import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.invocation.Message; /** @@ -26,8 +32,49 @@ import org.apache.tuscany.sca.invocation.Message; * @version $Rev$ $Date$ */ 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 Message() { + private Map<String, Object> headers = new HashMap<String, Object>(); + public void setTo(Endpoint to) {} + public void setOperation(Operation op) {} + public void setMessageID(Object messageId) {} + public void setFrom(EndpointReference from) {} + public <T> void setFaultBody(T fault) {} + public <T> void setBody(T body) {} + public <T> void setBindingContext(T bindingContext) {} + public boolean isFault() { + return false; + } + public Endpoint getTo() { + return null; + } + public Operation getOperation() { + return null; + } + public Object getMessageID() { + return null; + } + public Map<String, Object> getHeaders() { + return headers; + } + public EndpointReference getFrom() { + return null; + } + public <T> T getBody() { + return null; + } + public <T> T getBindingContext() { + return null; + } + }; - private static final ThreadLocal<Message> CONTEXT = new ThreadLocal<Message>(); + private static final ThreadLocal<Message> CONTEXT = new ThreadLocal<Message>(){ + @Override + protected synchronized Message initialValue() { + return msg; + } + }; private static final ThreadLocal<Message> PREVIOUS_CONTEXT = new ThreadLocal<Message>(); @@ -53,6 +100,12 @@ public final class ThreadMessageContext { Message old = CONTEXT.get(); CONTEXT.set(context); PREVIOUS_CONTEXT.set(old); + + // TUSCANY-3770: Remove thread context information when the request invocation has completed + if (context == msg) { + removeMessageContext(); + removePreviousMessageContext(); + } return old; } @@ -70,14 +123,16 @@ public final class ThreadMessageContext { } /** - * Removes and state from the current thread to ensure that + * Removes any state from the current thread to ensure that * any associated classloaders can be GCd */ + // TUSCANY-3770: The thread context information is removed implicitly above public static void removeMessageContext() { CONTEXT.remove(); } + //for performance concerns - set to null rather than call remove public static void removePreviousMessageContext() { - PREVIOUS_CONTEXT.remove(); + PREVIOUS_CONTEXT.set(null); } } |