@startuml title Actions: Queued Actions Classes (V5.2 Proposal) 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 bindPendingActionToTransaction(action, actionedUponNodeRef, checkConditions, actionChain) - void addPostTransactionPendingAction(action, actionedUponNodeRef, checkConditions, actionChain) - List getPostTransactionPendingActions() + beforeCommit() + postCommit() - queueAction(PendingAction action) + etc(...) } interface AsynchronousActionExecutionQueue { + void executeAction(RuntimeActionService actionService, Action action, NodeRef actionedUponNodeRef, boolean checkConditions, Set actionChain); } class AsynchronousActionExecutionQueueImpl implements AsynchronousActionExecutionQueue { - ProducerTemplate producerTemplate - ThreadPoolExecutor threadPoolExecutor - TransactionService transactionService - PolicyComponent policyComponent - Map actionFilters - String id + void init() + void executeAction(...) + etc(...) } package org::apache::camel { class ProducerTemplate { + void sendBodyAndHeaders(String endpointUri, Object body, Map headers) } class RouteBuilder { + void configure() + etc(...) } class JacksonDataFormat } class QueuedActionProducer extends RouteBuilder { + void configure() } class QueuedActionReceiver extends RouteBuilder { + void configure() } AsynchronousActionExecutionQueueImpl o- "1" ActionServiceImpl AsynchronousActionExecutionQueueImpl "0..*" -o ActionServiceImpl AsynchronousActionExecutionQueueImpl o- "1" ProducerTemplate QueuedActionProducer --> "uses" JacksonDataFormat QueuedActionReceiver --> "uses" JacksonDataFormat @enduml