public abstract class Context extends java.lang.Object implements XMLSerializable
This class represents an execution context; they can be associated to particular threads or objects.
Context-aware applications may extend the context base class or any predefined contexts in order to facilitate separation of concerns.
The scope of a Context should be surrounded by a try,
finally block statement to ensure correct behavior in case
of exceptions being raised. For example:
LocalContext.enter(); // Current thread enter a local context.
try
ModuloInteger.setModulus(m); // No impact on other threads!
z = x.times(y); // Multiplication modulo m.
} finally {
LocalContext.exit();
}
Context objects can be inherited by multiple threads (see
ConcurrentContext}, but only one thread may
enter a particular context
instance at any given time (and becomes its owner.
When the owner thread exits its context, the
context is automatically recycled. Consequently, whether or not context objects are reused
between multiple threads depends upon the AllocatorContext policy
with regards to recycling. Threads executing in a PoolContext
for example, will reuse the same pool of context objects.
| Modifier and Type | Field and Description |
|---|---|
static Context |
ROOT
Holds the root context.
|
| Modifier | Constructor and Description |
|---|---|
protected |
Context()
Default constructor.
|
| Modifier and Type | Method and Description |
|---|---|
static void |
enter(java.lang.Class<? extends Context> contextType)
|
static void |
enter(Context context)
Enters the specified context.
|
protected abstract void |
enterAction()
The action to be performed after this context becomes the current
context.
|
static void |
exit(java.lang.Class<? extends Context> contextType)
Exits the current context (the
outer context
becomes the current context). |
static void |
exit(Context context)
Exits the specified context.
|
protected abstract void |
exitAction()
The action to be performed before this context is no more the current
context.
|
static Context |
getCurrentContext()
Returns the current context for the current thread.
|
Context |
getOuter()
Returns the outer context of this context or
null
if ROOT or a default context (not entered). |
java.lang.Thread |
getOwner()
Returns the current owner of this context.
|
protected static void |
setConcurrentContext(ConcurrentContext context)
Sets the current context, used by
ConcurrentContext
exclusively. |
java.lang.String |
toString()
Returns the string representation of this context (default
"Instance of " + this.getClass().getName()). |
public static final Context ROOT
public static Context getCurrentContext()
public final java.lang.Thread getOwner()
entered
the context and has not yet exited.
A context can only have one owner at any given time, although
contexts can be shared by concurrent threads.null.public final Context getOuter()
null
if ROOT or a default context (not entered).null.public java.lang.String toString()
"Instance of " + this.getClass().getName()).toString in class java.lang.Objectprotected abstract void enterAction()
protected abstract void exitAction()
public static final void enter(Context context)
context - the context being entered.java.lang.IllegalStateException - if this context is currently in use.public static final void exit(Context context)
context - the context being exited.java.lang.IllegalStateException - if the specified context is not the current context.public static final void enter(java.lang.Class<? extends Context> contextType)
factory produced and automatically recycled
upon exit. If the specified contextType has no public
no-arg constructor accessible, then the object factory for the class
should be explicitely set (typically
in a static initializer).contextType - the type of context being entered.ObjectFactory.getInstance(Class)public static void exit(java.lang.Class<? extends Context> contextType)
outer context
becomes the current context).contextType - the type of context being entered.java.lang.IllegalStateException - if this context is the ROOT
context or the current thread is not the context owner.protected static void setConcurrentContext(ConcurrentContext context)
ConcurrentContext
exclusively.context - the concurrent context.Copyright © 2005 - 2007 Javolution.