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.Object
protected 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.