Class BatchingUnitOfWork<T extends Message<?>>

java.lang.Object
org.axonframework.messaging.unitofwork.AbstractUnitOfWork<T>
org.axonframework.messaging.unitofwork.BatchingUnitOfWork<T>
Type Parameters:
T - The type of message handled by this Unit of Work
All Implemented Interfaces:
UnitOfWork<T>

public class BatchingUnitOfWork<T extends Message<?>> extends AbstractUnitOfWork<T>
Unit of Work implementation that is able to process a batch of Messages instead of just a single Message.
Since:
3.0
Author:
Rene de Waele, Allard Buijze
  • Constructor Details

    • BatchingUnitOfWork

      @SafeVarargs public BatchingUnitOfWork(T... messages)
      Initializes a BatchingUnitOfWork for processing the given batch of messages.
      Parameters:
      messages - batch of messages to process
    • BatchingUnitOfWork

      public BatchingUnitOfWork(List<T> messages)
      Initializes a BatchingUnitOfWork for processing the given list of messages.
      Parameters:
      messages - batch of messages to process
  • Method Details

    • executeWithResult

      public <R> ResultMessage<R> executeWithResult(Callable<R> task, @Nonnull RollbackConfiguration rollbackConfiguration)
      Execute the given task in the context of this Unit of Work. If the Unit of Work is not started yet it will be started.

      If the task executes successfully the Unit of Work is committed and the result of the task is returned. If execution fails, the rollbackConfiguration determines if the Unit of Work should be rolled back or committed.

      This implementation executes the given task for each of its messages. The return value is the result of the last executed task.

      Type Parameters:
      R - the type of result that is returned after successful execution
      Parameters:
      task - the task to execute
      rollbackConfiguration - configuration that determines whether or not to rollback the unit of work when task execution fails
      Returns:
      The result of the task wrapped in Result Message
    • getExecutionResults

      public Map<Message<?>,ExecutionResult> getExecutionResults()
      Returns a Map of ExecutionResult per Message. If the Unit of Work has not been given a task to execute, the ExecutionResult is null for each Message.
      Returns:
      a Map of ExecutionResult per Message processed by this Unit of Work
    • getMessage

      public T getMessage()
      Description copied from interface: UnitOfWork
      Get the message that is being processed by the Unit of Work. A Unit of Work processes a single Message over its life cycle.
      Returns:
      the Message being processed by this Unit of Work
    • transformMessage

      public UnitOfWork<T> transformMessage(Function<T,? extends Message<?>> transformOperator)
      Description copied from interface: UnitOfWork
      Transform the Message being processed using the given operator and stores the result.

      Implementations should take caution not to change the message type to a type incompatible with the current Unit of Work. For example, do not return a CommandMessage when transforming an EventMessage.

      Parameters:
      transformOperator - The transform operator to apply to the stored message
      Returns:
      this Unit of Work
    • getExecutionResult

      public ExecutionResult getExecutionResult()
      Description copied from interface: UnitOfWork
      Get the result of the task that was executed by this Unit of Work. If the Unit of Work has not been given a task to execute this method returns null.

      Note that the value of the returned ExecutionResult's ExecutionResult.isExceptionResult() does not determine whether or not the UnitOfWork has been rolled back. To check whether or not the UnitOfWork was rolled back check UnitOfWork.isRolledBack().

      Returns:
      The result of the task executed by this Unit of Work, or null if the Unit of Work has not been given a task to execute.
    • setExecutionResult

      protected void setExecutionResult(ExecutionResult executionResult)
      Description copied from class: AbstractUnitOfWork
      Set the execution result of processing the current Message.
      Specified by:
      setExecutionResult in class AbstractUnitOfWork<T extends Message<?>>
      Parameters:
      executionResult - the ExecutionResult of the currently handled Message
    • notifyHandlers

      protected void notifyHandlers(UnitOfWork.Phase phase)
      Description copied from class: AbstractUnitOfWork
      Notify the handlers attached to the given phase.
      Specified by:
      notifyHandlers in class AbstractUnitOfWork<T extends Message<?>>
      Parameters:
      phase - The phase for which to invoke registered handlers.
    • setRollbackCause

      protected void setRollbackCause(Throwable cause)
      Description copied from class: AbstractUnitOfWork
      Sets the cause for rolling back this Unit of Work.
      Specified by:
      setRollbackCause in class AbstractUnitOfWork<T extends Message<?>>
      Parameters:
      cause - The cause for rolling back this Unit of Work
    • addHandler

      protected void addHandler(UnitOfWork.Phase phase, Consumer<UnitOfWork<T>> handler)
      Description copied from class: AbstractUnitOfWork
      Register the given handler with the Unit of Work. The handler will be invoked when the Unit of Work changes its phase to the given phase.
      Specified by:
      addHandler in class AbstractUnitOfWork<T extends Message<?>>
      Parameters:
      phase - the Phase of the Unit of Work at which to invoke the handler
      handler - the handler to add
    • getMessages

      public List<? extends T> getMessages()
      Get the batch of messages that is being processed (or has been processed) by this unit of work.
      Returns:
      the message batch
    • isLastMessage

      public boolean isLastMessage(Message<?> message)
      Checks if the given message is the last of the batch being processed in this unit of work.
      Parameters:
      message - the message to check for
      Returns:
      true if the message is the last of this batch, false otherwise
    • isLastMessage

      public boolean isLastMessage()
      Checks if the message being processed now is the last of the batch being processed in this unit of work.
      Returns:
      true if the message is the last of this batch, false otherwise
    • isFirstMessage

      public boolean isFirstMessage(Message<?> message)
      Checks if the given message is the first of the batch being processed in this unit of work.
      Parameters:
      message - the message to check
      Returns:
      true if the message is the first of this batch, false otherwise
    • isFirstMessage

      public boolean isFirstMessage()
      Checks if the message being processed now is the first of the batch being processed in this unit of work.
      Returns:
      true if the message is the first of this batch, false otherwise