Class AWorkerQueue<T>
- Direct Known Subclasses:
AccessSqlLogger
,ErrorSqlLogger
,LoginSqlLogger
,LogoutSqlLogger
,PageSqlLogger
,SessionExpiredSqlLogger
,SessionSqlLogger
,SqlToDatabaseLogger
This is a worker with idle support and a queue
allows asynchronous processing of objects, supports
multi-object for batch processing and idle state to release resource if appropriate. The default maximum queue size
is DEFAULT_MAX_QUEUE_SIZE
and if exceeded, new objects are not put into the queue but discarded.
This worker has a Timer which is triggers queue-processing every queueDelayMs after a queue has been populated
via process(Object)
or process(Collection)
, you implement the processObjects(Collection)
method to process batched objects gathered into the queue during queueDelayMs. In a container environment you can
gracefully #shutdownQueues()
all queues by calling the method i.e. from context listener, in a standalone
application you can do it via a shutdown hook or you can shutdown(boolean)
s single instance.
This class uses Executor
for task execution which is shared among all instances of all concrete
implementations of this class. By design, every single instance of implementation class posseses a single
queue which is ought to be processed by a single thread on behalf of the executor, such as 5 instances will
allow the executor to create up to 5 threads. Initially, the executor
pool size is set to EXECUTOR_MIN_POOL_SIZE
. The core pool size is changed according to number of instances
of this class ranging from [ EXECUTOR_MIN_POOL_SIZE
.. EXECUTOR_MAX_POOL_SIZE
]. If the queue is idling, the
executor will shrink the thread pool size down to 0 after EXECUTOR_KEEPALIVE_MINS
.
A shutdown(boolean)
on single instance will reduce the thread pool size.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
max queue size before discarding objects: 500protected org.apache.logging.log4j.Logger
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AWorkerQueue
(int maxQueueSize, long idleThresholdMs, long queueDelayMs) Creates a queue -
Method Summary
Modifier and TypeMethodDescriptionprotected final void
enqueue
(Collection<T> t) enqueue new objects for processing, does NOT block until process ends returns immediatellyprotected void
onIdle()
implement this method to realease resources if worker is idlevoid
process
(Collection<T> t) processing objectsvoid
conv. method to process only one element, seeprocess(Collection)
protected abstract void
processObjects
(Collection<T> objects) implement the method to process the objects polled from queue (FIFO)static void
shutdownQueues
(boolean discardQueuedObjects) shuts down all queues
-
Field Details
-
DEFAULT_MAX_QUEUE_SIZE
public static final int DEFAULT_MAX_QUEUE_SIZEmax queue size before discarding objects: 500- See Also:
-
log
protected org.apache.logging.log4j.Logger log
-
-
Constructor Details
-
AWorkerQueue
protected AWorkerQueue(int maxQueueSize, long idleThresholdMs, long queueDelayMs) Creates a queue- Parameters:
maxQueueSize
- when set to 0 then default value is used (which isDEFAULT_MAX_QUEUE_SIZE
). A positive value sets a maximum queue size before discarding objects. A negative value removes any limit, which may cause memory issues in case the queue grows faster than it is processed.idleThresholdMs
- the threshold for idle event or 0 for DISABLED, if disabled, theonIdle()
is never called, otherwise it is called after the queue has been idling for given amount of time.queueDelayMs
- delay in ms or 0 for DISABLED, this is a waiting period between adding a task to process into the queue and beginning of processing the queue, if 0 the queue is processed immediately.
-
-
Method Details
-
shutdownQueues
public static void shutdownQueues(boolean discardQueuedObjects) shuts down all queues- Parameters:
discardQueuedObjects
- - if set to false, processes queued objects ( this happens in current thread ).
-
onIdle
protected void onIdle()implement this method to realease resources if worker is idle -
processObjects
implement the method to process the objects polled from queue (FIFO)- Parameters:
objects
- to process
-
process
processing objects- Parameters:
t
- Objects to process
-
process
conv. method to process only one element, seeprocess(Collection)
- Parameters:
t
-
-
enqueue
enqueue new objects for processing, does NOT block until process ends returns immediatelly- Parameters:
t
- object to queue
-