@startuml title Actions: Asynchronous Actions Classes (V5.1 Current) interface ActionService { + void executeAction(Action action, NodeRef actionedUponNodeRef, boolean checkConditions, boolean executeAsychronously) } class ActionServiceImpl implements ActionService { - ActionTransactionListener transactionListener - Map asynchronousActionExecutionQueues + void registerAsynchronousActionExecutionQueue(String key, AsynchronousActionExecutionQueue asyncExecQueue) + void executeAction(...) - void addPostTransactionPendingAction(action, actionedUponNodeRef, checkConditions, actionChain) - List getPostTransactionPendingActions() + postCommit() - queueAction(PendingAction action) + etc(...) } interface AsynchronousActionExecutionQueue { + void executeAction(RuntimeActionService actionService, Action action, NodeRef actionedUponNodeRef, boolean checkConditions, Set actionChain); } class AsynchronousActionExecutionQueueImpl implements AsynchronousActionExecutionQueue { - ThreadPoolExecutor threadPoolExecutor - TransactionService transactionService - PolicyComponent policyComponent - Map actionFilters - String id + void init() + void executeAction(...) + etc(...) } AsynchronousActionExecutionQueueImpl o- "1" ActionServiceImpl AsynchronousActionExecutionQueueImpl "0..*" -o ActionServiceImpl @enduml