Package org.apache.catalina.valves
Class SemaphoreValve
java.lang.Object
org.apache.catalina.util.LifecycleBase
org.apache.catalina.util.LifecycleMBeanBase
org.apache.catalina.valves.ValveBase
org.apache.catalina.valves.SemaphoreValve
- All Implemented Interfaces:
MBeanRegistration,Contained,JmxEnabled,Lifecycle,Valve
Implementation of a Valve that limits concurrency.
This Valve may be attached to any Container, depending on the granularity of the concurrency control you wish to perform. Note that internally, some async requests may require multiple serial requests to complete what - to the user - appears as a single request.
- Author:
- Remy Maucherat
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.catalina.Lifecycle
Lifecycle.SingleUse -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected booleanBlock until a permit is available.protected intConcurrency level of the semaphore.protected booleanFairness of the semaphore.protected intHigh concurrency status.protected booleanBlock interruptibly until a permit is available.protected SemaphoreSemaphore.Fields inherited from class org.apache.catalina.valves.ValveBase
asyncSupported, container, containerLog, next, smFields inherited from class org.apache.catalina.util.LifecycleMBeanBase
mserverFields inherited from interface org.apache.catalina.Lifecycle
AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleancontrolConcurrency(Request request, Response response) Subclass friendly method to add conditions.booleangetBlock()intbooleanintbooleanvoidDo concurrency control on the request using the semaphore.voidpermitDenied(Request request, Response response) Subclass friendly method to add error handling when a permit isn't granted.voidsetBlock(boolean block) voidsetConcurrency(int concurrency) voidsetFairness(boolean fairness) voidsetHighConcurrencyStatus(int highConcurrencyStatus) voidsetInterruptible(boolean interruptible) protected voidStart this component and implement the requirements ofLifecycleBase.startInternal().protected voidStop this component and implement the requirements ofLifecycleBase.stopInternal().Methods inherited from class org.apache.catalina.valves.ValveBase
backgroundProcess, getContainer, getDomainInternal, getNext, getObjectNameKeyProperties, initInternal, isAsyncSupported, setAsyncSupported, setContainer, setNext, toStringMethods inherited from class org.apache.catalina.util.LifecycleMBeanBase
destroyInternal, getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregisterMethods inherited from class org.apache.catalina.util.LifecycleBase
addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
-
Field Details
-
semaphore
Semaphore. -
concurrency
protected int concurrencyConcurrency level of the semaphore. -
fairness
protected boolean fairnessFairness of the semaphore. -
block
protected boolean blockBlock until a permit is available. -
interruptible
protected boolean interruptibleBlock interruptibly until a permit is available. -
highConcurrencyStatus
protected int highConcurrencyStatusHigh concurrency status. This status code is returned as an error if concurrency is too high.
-
-
Constructor Details
-
SemaphoreValve
public SemaphoreValve()
-
-
Method Details
-
getConcurrency
public int getConcurrency() -
setConcurrency
public void setConcurrency(int concurrency) -
getFairness
public boolean getFairness() -
setFairness
public void setFairness(boolean fairness) -
getBlock
public boolean getBlock() -
setBlock
public void setBlock(boolean block) -
getInterruptible
public boolean getInterruptible() -
setInterruptible
public void setInterruptible(boolean interruptible) -
getHighConcurrencyStatus
public int getHighConcurrencyStatus() -
setHighConcurrencyStatus
public void setHighConcurrencyStatus(int highConcurrencyStatus) -
startInternal
Start this component and implement the requirements ofLifecycleBase.startInternal().- Overrides:
startInternalin classValveBase- Throws:
LifecycleException- if this component detects a fatal error that prevents this component from being used
-
stopInternal
Stop this component and implement the requirements ofLifecycleBase.stopInternal().- Overrides:
stopInternalin classValveBase- Throws:
LifecycleException- if this component detects a fatal error that prevents this component from being used
-
invoke
Do concurrency control on the request using the semaphore.- Parameters:
request- The servlet request to be processedresponse- The servlet response to be created- Throws:
IOException- if an input/output error occursServletException- if a servlet error occurs
-
controlConcurrency
Subclass friendly method to add conditions.- Parameters:
request- The Servlet requestresponse- The Servlet response- Returns:
trueif the concurrency control should occur on this request
-
permitDenied
Subclass friendly method to add error handling when a permit isn't granted.- Parameters:
request- The Servlet requestresponse- The Servlet response- Throws:
IOException- Error writing outputServletException- Other error
-