com.atlassian.jira.util.thread
Interface JiraThreadLocalUtil

All Known Implementing Classes:
JiraThreadLocalUtilImpl

@PublicApi
public interface JiraThreadLocalUtil

The main purpose of this component is to setup and clear ThreadLocal variables that can otherwise interfere with the smooth running of JIRA by leaking resources or allowing stale cached information to survive between requests.

Services that are registered as a JiraService or as a PluginJob do not need to use this component, because the scheduler will perform the cleanup automatically as part of the service's execution lifecycle. However, any plugin that creates its own threads for background processing must use this component to guard its work. Prior to JIRA v6.0, the only way to do this was to access the jira-core class JiraThreadLocalUtils directly.

You must place the cleanup call to postCall(Logger) or postCall(Logger, WarningCallback) in a finally block to guarantee correct behaviour. For example:

 public void run()
 {
     jiraThreadLocalUtil.preCall();
     try
     {
         // do runnable code here
     }
     finally
     {
         jiraThreadLocalUtil.postCall(log, myWarningCallback);
     }
 }
 

Since:
v6.0

Nested Class Summary
static interface JiraThreadLocalUtil.WarningCallback
          This interface is used as a callback mechanism in the case where "runnable code" has completed and the postCall determines that it did not clean up properly.
 
Method Summary
 void postCall(org.apache.log4j.Logger log)
          This convenience method is equivalent to postCall(log, null).
 void postCall(org.apache.log4j.Logger log, JiraThreadLocalUtil.WarningCallback warningCallback)
          This should be called in a finally block to clear up ThreadLocals once the runnable stuff has been done.
 void preCall()
          This should be called before any "runnable code" is called.
 

Method Detail

preCall

void preCall()
This should be called before any "runnable code" is called. This will setup a clean ThreadLocal environment for the runnable code to execute in.


postCall

void postCall(org.apache.log4j.Logger log)
This convenience method is equivalent to postCall(log, null).

Parameters:
log - as for postCall(Logger, WarningCallback)

postCall

void postCall(org.apache.log4j.Logger log,
              JiraThreadLocalUtil.WarningCallback warningCallback)
This should be called in a finally block to clear up ThreadLocals once the runnable stuff has been done.

Parameters:
log - the log to write error messages to in casse of any problems
warningCallback - the callback to invoke in case where problems are detected after the runnable code is done running and its not cleaned up properly. This may be null, in which case those problems are logged as errors.


Copyright © 2002-2014 Atlassian. All Rights Reserved.