org.axonframework.domain
Class AbstractAggregateRoot

java.lang.Object
  extended by org.axonframework.domain.AbstractAggregateRoot
All Implemented Interfaces:
Serializable, AggregateRoot
Direct Known Subclasses:
AbstractEventSourcedAggregateRoot

public abstract class AbstractAggregateRoot
extends Object
implements AggregateRoot, Serializable

Very basic implementation of the AggregateRoot interface. It provides the mechanism to keep track of uncommitted events and maintains a version number based on the number of events generated.

Since:
0.6
Author:
Allard Buijze
See Also:
Serialized Form

Constructor Summary
protected AbstractAggregateRoot()
          Initializes the aggregate root using a random aggregate identifier.
protected AbstractAggregateRoot(AggregateIdentifier identifier)
          Initializes the aggregate root using the provided aggregate identifier.
 
Method Summary
 void commitEvents()
          Clears the events currently marked as "uncommitted".
 AggregateIdentifier getIdentifier()
          Returns the identifier of this aggregate.
 int getUncommittedEventCount()
          Returns the number of uncommitted events currently available in the aggregate.
 DomainEventStream getUncommittedEvents()
          Returns a DomainEventStream to the events in the aggregate that have been raised since creation or the last commit.
 Long getVersion()
          Returns the current version number of the aggregate, or null if the aggregate is newly created.
protected  void initializeEventStream(long lastSequenceNumber)
          Initialize the event stream using the given sequence number of the last known event.
protected  void registerEvent(DomainEvent event)
          Registers an event to be published when the aggregate is saved.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractAggregateRoot

protected AbstractAggregateRoot()
Initializes the aggregate root using a random aggregate identifier.


AbstractAggregateRoot

protected AbstractAggregateRoot(AggregateIdentifier identifier)
Initializes the aggregate root using the provided aggregate identifier.

Parameters:
identifier - the identifier of this aggregate
Method Detail

registerEvent

protected void registerEvent(DomainEvent event)
Registers an event to be published when the aggregate is saved.

Parameters:
event - the event to register

getUncommittedEvents

public DomainEventStream getUncommittedEvents()
Returns a DomainEventStream to the events in the aggregate that have been raised since creation or the last commit.

Specified by:
getUncommittedEvents in interface AggregateRoot
Returns:
the DomainEventStream to the uncommitted events.

getIdentifier

public AggregateIdentifier getIdentifier()
Returns the identifier of this aggregate.

Specified by:
getIdentifier in interface AggregateRoot
Returns:
the identifier of this aggregate

commitEvents

public void commitEvents()
Clears the events currently marked as "uncommitted".

Specified by:
commitEvents in interface AggregateRoot

getUncommittedEventCount

public int getUncommittedEventCount()
Returns the number of uncommitted events currently available in the aggregate.

Specified by:
getUncommittedEventCount in interface AggregateRoot
Returns:
the number of uncommitted events currently available in the aggregate.

initializeEventStream

protected void initializeEventStream(long lastSequenceNumber)
Initialize the event stream using the given sequence number of the last known event. This will cause the new events to be attached to this aggregate to be assigned a continuous sequence number.

Parameters:
lastSequenceNumber - The sequence number of the last event from this aggregate

getVersion

public Long getVersion()
Returns the current version number of the aggregate, or null if the aggregate is newly created. This version must reflect the version number of the aggregate on which changes are applied.

Each time the aggregate is modified and stored in a repository, the version number must be increased by at least 1. This version number can be used by optimistic locking strategies and detection of conflicting concurrent modification.

Typically the sequence number of the last committed event on this aggregate is used as version number.

Specified by:
getVersion in interface AggregateRoot
Returns:
the current version number of this aggregate, or null if no events were ever committed


Copyright © 2011. All Rights Reserved.