org.axonframework.unitofwork
Interface UnitOfWork

All Known Implementing Classes:
AbstractUnitOfWork, DefaultUnitOfWork

public interface UnitOfWork

This class represents a UnitOfWork in which modifications are made to aggregates. A typical UnitOfWork scope is the execution of a command. A UnitOfWork may be used to prevent individual events from being published before a number of aggregates has been processed. It also allows repositories to manage resources, such as locks, over an entire transaction. Locks, for example, will only be released when the UnitOfWork is either committed or rolled back.

The current UnitOfWork can be obtained using CurrentUnitOfWork.get().

Since:
0.6
Author:
Allard Buijze

Method Summary
 void commit()
          Commits the UnitOfWork.
 boolean isStarted()
          Indicates whether this UnitOfWork is started.
 void publishEvent(Event event, EventBus eventBus)
          Request to publish the given event on the given eventBus.
<T extends AggregateRoot>
void
registerAggregate(T aggregateRoot, SaveAggregateCallback<T> saveAggregateCallback)
          Register an aggregate with this UnitOfWork.
 void registerListener(UnitOfWorkListener listener)
          Register a listener that listens to state changes in this UnitOfWork.
 void rollback()
          Clear the UnitOfWork of any buffered changes.
 void rollback(Throwable cause)
          Clear the UnitOfWork of any buffered changes.
 void start()
          Starts the current unit of work, preparing it for aggregate registration.
 

Method Detail

commit

void commit()
Commits the UnitOfWork. All registered aggregates that have not been registered as stored are saved in their respective repositories, buffered events are sent to their respective event bus, and all registered UnitOfWorkListeners are notified.

After the commit (successful or not), the UnitOfWork is unregistered from the CurrentUnitOfWork.

Throws:
IllegalStateException - if the UnitOfWork wasn't started

rollback

void rollback()
Clear the UnitOfWork of any buffered changes. All buffered events and registered aggregates are discarded and registered UnitOfWorkListeners are notified.

If the rollback is a result of an exception, consider using rollback(Throwable) instead.


rollback

void rollback(Throwable cause)
Clear the UnitOfWork of any buffered changes. All buffered events and registered aggregates are discarded and registered UnitOfWorkListeners are notified.

Parameters:
cause - The cause of the rollback. May be null.
Throws:
IllegalStateException - if the UnitOfWork wasn't started

start

void start()
Starts the current unit of work, preparing it for aggregate registration. The UnitOfWork instance is registered with the CurrentUnitOfWork.


isStarted

boolean isStarted()
Indicates whether this UnitOfWork is started. It is started when the start() method has been called, and if the UnitOfWork has not been committed or rolled back.

Returns:
true if this UnitOfWork is started, false otherwise.

registerListener

void registerListener(UnitOfWorkListener listener)
Register a listener that listens to state changes in this UnitOfWork. This typically allows components to clean up resources, such as locks, when a UnitOfWork is committed or rolled back. If a UnitOfWork is partially committed, only the listeners bound to one of the committed aggregates is notified.

Parameters:
listener - The listener to notify when the UnitOfWork's state changes.

registerAggregate

<T extends AggregateRoot> void registerAggregate(T aggregateRoot,
                                                 SaveAggregateCallback<T> saveAggregateCallback)
Register an aggregate with this UnitOfWork. These aggregates will be saved (at the latest) when the UnitOfWork is committed.

Type Parameters:
T - the type of aggregate to register
Parameters:
aggregateRoot - The aggregate root to register in the UnitOfWork
saveAggregateCallback - The callback that is invoked when the UnitOfWork wants to store the registered aggregate

publishEvent

void publishEvent(Event event,
                  EventBus eventBus)
Request to publish the given event on the given eventBus. The UnitOfWork may either publish immediately, or buffer the events until the UnitOfWork is committed.

Parameters:
event - The event to be published on the event bus
eventBus - The event bus on which to publish the event


Copyright © 2011. All Rights Reserved.