public abstract class ConcurrencyThrottleSupport
extends java.lang.Object
implements java.io.Serializable
Designed for use as a base class, with the subclass invoking
the beforeAccess()
and afterAccess()
methods at
appropriate points of its workflow. Note that afterAccess
should usually be called in a finally block!
The default concurrency limit of this support class is -1 ("unbounded concurrency"). Subclasses may override this default; check the javadoc of the concrete class that you're using.
setConcurrencyLimit(int)
,
beforeAccess()
,
afterAccess()
,
ConcurrencyThrottleInterceptor
,
Serializable
,
Serialized FormModifier and Type | Field and Description |
---|---|
protected Log |
logger
Transient to optimize serialization.
|
static int |
NO_CONCURRENCY
Switch concurrency 'off': that is, don't allow any concurrent invocations.
|
static int |
UNBOUNDED_CONCURRENCY
Permit any number of concurrent invocations: that is, don't throttle concurrency.
|
Constructor and Description |
---|
ConcurrencyThrottleSupport() |
Modifier and Type | Method and Description |
---|---|
protected void |
afterAccess()
To be invoked after the main execution logic of concrete subclasses.
|
protected void |
beforeAccess()
To be invoked before the main execution logic of concrete subclasses.
|
int |
getConcurrencyLimit()
Return the maximum number of concurrent access attempts allowed.
|
boolean |
isThrottleActive()
Return whether this throttle is currently active.
|
void |
setConcurrencyLimit(int concurrencyLimit)
Set the maximum number of concurrent access attempts allowed.
|
public static final int UNBOUNDED_CONCURRENCY
public static final int NO_CONCURRENCY
protected transient Log logger
public void setConcurrencyLimit(int concurrencyLimit)
In principle, this limit can be changed at runtime, although it is generally designed as a config time setting.
NOTE: Do not switch between -1 and any concrete limit at runtime, as this will lead to inconsistent concurrency counts: A limit of -1 effectively turns off concurrency counting completely.
public int getConcurrencyLimit()
public boolean isThrottleActive()
true
if the concurrency limit for this instance is activegetConcurrencyLimit()
protected void beforeAccess()
This implementation applies the concurrency throttle.
afterAccess()
protected void afterAccess()
beforeAccess()