public abstract class ThreadContext extends Object
An internal HashMap is used to maintain the key/value pairs for each thread.
If the desired behavior is to ensure that bound data is not shared across threads in a pooled or reusable threaded environment, the application (or more likely a framework) must bind and remove any necessary values at the beginning and end of stack execution, respectively (i.e. individually explicitly or all via the clear method).
remove()
| Modifier and Type | Field and Description |
|---|---|
static String |
SECURITY_MANAGER_KEY
|
static String |
SUBJECT_KEY
|
| Modifier | Constructor and Description |
|---|---|
protected |
ThreadContext()
Default no-argument constructor.
|
| Modifier and Type | Method and Description |
|---|---|
static void |
bind(SecurityManager
Convenience method that simplifies binding the application's SecurityManager instance to the ThreadContext.
|
static void |
bind(Subject
Convenience method that simplifies binding a Subject to the ThreadContext.
|
static Object |
get(Object
Returns the object for the specified
key that is bound to the current thread.
|
static Map |
getResources()
Returns the ThreadLocal Map.
|
static SecurityManager |
getSecurityManager()
Convenience method that simplifies retrieval of the application's SecurityManager instance from the current thread.
|
static Subject |
getSubject()
Convenience method that simplifies retrieval of a thread-bound Subject.
|
static void |
put(Object
Binds
value for the given
key to the current thread.
|
static void |
remove()
Removes the underlying
ThreadLocal from the thread.
|
static Object |
remove(Object
Unbinds the value for the given
key from the current thread.
|
static void |
setResources(Map
Allows a caller to explicitly set the entire resource map.
|
static SecurityManager |
unbindSecurityManager()
Convenience method that simplifies removal of the application's SecurityManager instance from the thread.
|
static Subject |
unbindSubject()
Convenience method that simplifies removal of a thread-local Subject from the thread.
|
public static final StringSECURITY_MANAGER_KEY
public static final StringSUBJECT_KEY
public static Map<Object ,Object > getResources()
public static void setResources(Map<Object ,Object > newResources)
getResources() method, which will give you the existing state.
newResources - the resources to replace the existing
resources.
public static Objectget(Object key)
key that is bound to the current thread.
key - the key that identifies the value to return
key or
null if no value exists for the specified
key
public static void put(Objectkey, Object value)
key to the current thread.
A null value has the same effect as if remove was called for the given key, i.e.:
if ( value == null ) {
remove( key );
}
key - The key with which to identify the
value.
value - The value to bind to the thread.
IllegalArgumentException - if the
key argument is
null.
public static Objectremove(Object key)
key from the current thread.
key - The key identifying the value bound to the current thread.
public static void remove()
Removes the underlying
ThreadLocal from the thread.
This method is meant to be the final 'clean up' operation that is called at the end of thread execution to prevent thread corruption in pooled thread environments.
public static SecurityManagergetSecurityManager()
return (SecurityManager)get( SECURITY_MANAGER_KEY );
This method only returns the bound value if it exists - it does not remove it from the thread. To remove it, one must call
unbindSecurityManager() instead.
public static void bind(SecurityManagersecurityManager)
The method's existence is to help reduce casting in code and to simplify remembering of ThreadContext key names. The implementation is simple in that, if the SecurityManager is not null, it binds it to the thread, i.e.:
if (securityManager != null) {
put( SECURITY_MANAGER_KEY, securityManager);
}
securityManager - the application's SecurityManager instance to bind to the thread. If the argument is null, nothing will be done.
public static SecurityManagerunbindSecurityManager()
return (SecurityManager)remove( SECURITY_MANAGER_KEY );
If you wish to just retrieve the object from the thread without removing it (so it can be retrieved later during thread execution), use the
getSecurityManager() method instead.
public static SubjectgetSubject()
return (Subject)get( SUBJECT_KEY );
This method only returns the bound value if it exists - it does not remove it from the thread. To remove it, one must call
unbindSubject() instead.
public static void bind(Subjectsubject)
The method's existence is to help reduce casting in your own code and to simplify remembering of ThreadContext key names. The implementation is simple in that, if the Subject is not null, it binds it to the thread, i.e.:
if (subject != null) {
put( SUBJECT_KEY, subject );
}
subject - the Subject object to bind to the thread. If the argument is null, nothing will be done.
public static SubjectunbindSubject()
return (Subject)remove( SUBJECT_KEY );
If you wish to just retrieve the object from the thread without removing it (so it can be retrieved later during thread execution), you should use the
getSubject() method for that purpose.