com.atlassian.jira.util.thread.JiraThreadLocalUtil |
Known Indirect Subclasses
|
Clients of @PublicApi
can expect
that programs compiled against a given version will remain binary compatible with later versions of the
@PublicApi
as per each product's API policy as long as the client does not implement/extend
@PublicApi
interfaces or classes (refer to each product's API policy for the exact
guarantee---usually binary compatibility is guaranteed at least across minor versions).
@PublicApi
interfaces and classes are not designed to be implemented or extended by clients,
we may perform certain types of binary-incompatible changes to these classes and interfaces, but these will not
affect well-behaved clients that do not extend/implement these types (in general, only classes and interfaces
annotated with @PublicSpi
are safe to extend/implement).
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
do not need to use this component, because this cleanup is performed
automatically as part of the service's execution lifecycle. This should also generally
be true of scheduler jobs, such as those executed through SAL's PluginScheduler
or the new SchedulerService
, but this was not implemented correctly in JIRA
v6.3.x, so scheduled jobs should also use this component just to be safe.
Additionally, 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);
}
}
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
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. |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
This convenience method is equivalent to
postCall(log, null) . | |||||||||||
This should be called in a
finally block to clear up ThreadLocal s
once the runnable stuff has been done. | |||||||||||
This should be called before any "runnable code" is called.
|
This convenience method is equivalent to
postCall(log, null)
.
log | as for postCall(Logger, WarningCallback)
|
---|
This should be called in a finally
block to clear up ThreadLocal
s
once the runnable stuff has been done.
log | the log to write error messages to in case 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.
|
This should be called before any "runnable code" is called.
This will setup a clean ThreadLocal
environment for the runnable
code to execute in.