Package org.kuali.rice.ken.service.impl
Class ConcurrentJob<T>
java.lang.Object
org.kuali.rice.ken.service.impl.ConcurrentJob<T>
- Direct Known Subclasses:
NotificationMessageDeliveryAutoRemovalServiceImpl,NotificationMessageDeliveryResolverServiceImpl
Base class for jobs that must obtain a set of work items atomically
- Author:
- Kuali Rice Team (rice.collab@kuali.org)
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ExecutorServiceprotected final org.apache.logging.log4j.Loggerprotected org.springframework.transaction.PlatformTransactionManager -
Constructor Summary
ConstructorsConstructorDescriptionConcurrentJob(org.springframework.transaction.PlatformTransactionManager txManager, ExecutorService executor) Constructs a ConcurrentJob instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected org.springframework.transaction.support.TransactionTemplateHelper method for creating a TransactionTemplate initialized to create a new transactionprotected Collection<Collection<T>> groupWorkItems(Collection<T> workItems, ProcessingResult result) Template method that subclasses should override to group work items into units of workprotected abstract Collection<?> processWorkItems(Collection<T> items) Template method that subclasses should override to process a given work item and mark it as untaken afterwardsrun()Main processing method which invokes subclass implementations of template methods to obtain available work items, and process them concurrentlyprotected abstract Collection<T> Template method that subclasses should override to obtain a set of available work items and mark them as takenprotected abstract voidunlockWorkItem(T item) Template method that subclasses should override to unlock a given work item when procesing has failed.protected voidunlockWorkItemAtomically(T workItem)
-
Field Details
-
LOG
protected final org.apache.logging.log4j.Logger LOG -
executor
-
txManager
protected org.springframework.transaction.PlatformTransactionManager txManager
-
-
Constructor Details
-
ConcurrentJob
public ConcurrentJob(org.springframework.transaction.PlatformTransactionManager txManager, ExecutorService executor) Constructs a ConcurrentJob instance.- Parameters:
txManager- PlatformTransactionManager to use for transactionsexecutor- the ExecutorService to use to process work items
-
-
Method Details
-
createNewTransaction
protected org.springframework.transaction.support.TransactionTemplate createNewTransaction()Helper method for creating a TransactionTemplate initialized to create a new transaction- Returns:
- a TransactionTemplate initialized to create a new transaction
-
takeAvailableWorkItems
Template method that subclasses should override to obtain a set of available work items and mark them as taken- Returns:
- a collection of available work items that have been marked as taken
-
groupWorkItems
protected Collection<Collection<T>> groupWorkItems(Collection<T> workItems, ProcessingResult result) Template method that subclasses should override to group work items into units of work- Parameters:
workItems- list of work items to break into groupsresult- ProcessingResult to modify if there are any failures...this is sort of a hack because previously failure to obtain a deliverer was considered a work item failure, and now this method has been factored out... but the tests still want to see the failure- Returns:
- a collection of collection of work items
-
processWorkItems
Template method that subclasses should override to process a given work item and mark it as untaken afterwards- Parameters:
items- the work item- Returns:
- a collection of success messages
-
unlockWorkItem
Template method that subclasses should override to unlock a given work item when procesing has failed.- Parameters:
item- the work item to unlock
-
run
Main processing method which invokes subclass implementations of template methods to obtain available work items, and process them concurrently- Returns:
- a ProcessingResult object containing the results of processing
-
unlockWorkItemAtomically
-