Changelog
v0.17.5
Enhancements
- Process manager idle process timeout (#290).
v0.17.4
Bug fixes
- Register event handler and process manager subscriptions on process start (#272).
v0.17.3
Bug fixes
v0.17.2
Enhancements
- Remove default
error/4callback function from process manager to silence deprecation warning.
v0.17.1
Enhancements
- Support
Phoenix.PubSubv1.1.0.
Bug fixes
- Set default aggregate lifespan timeout to
:infinity(#200).
v0.17.0
Enhancements
- Ability to globally override
include_execution_resultandinclude_aggregate_versionin environment config (#168). - Handle custom type serialization in snapshot source type (#165).
- Fix compiler warnings in generated code (routers, event handlers, and process managers).
- Add
InMemory.reset!/0for testing purposes (#175).
Bug fixes
- Ensure process managers can be configured with
:strongconsistency. - Fix error when subscription process already tracked (#180).
v0.16.0
- Support composite command routers (#111).
- Aggregate state snapshots (#121).
- New
error/3callback for process manager and deprecatederror/4(#124) - Router support for identity prefix function.
- Retry command execution on concurrency error (#132).
- Event handler
error/3callback (#133). - Support distributed dispatch consistency (#135).
- Defer event handler and process router init until after subscribed (#138).
- Replace aggregate lifespan
after_command/1callback withafter_event/1(#139). - Support process manager routing to multiple instances (#141).
- Allow a default consistency to be set via the application env (#150).
- Command dispatch consistency using explicit handler names (#161).
Breaking changes
- The
Commanded.Aggregates.AggregateLifespanbehaviour has been changed fromafter_command/1toafter_event/1. You will need to update your own lifespan modules to use events instead of commands to shutdown an aggregate process after an inactivity timeout.
Upgrading
Please ensure you upgrade the following event store dependencies.
Using the Elixir EventStore:
Using Greg Young's Event Store:
commanded_extreme_adapterto v0.5.0
v0.15.1
Bug fixes
- Event handler
child_spec/1must include config options defined by use macro.
v0.15.0
Enhancements
- Process manager command dispatch error handling (#93).
- Event handlers may define an
init/0callback function to start any related processes. It must return:ok, otherwise the handler process will be stopped. - Add
include_execution_resultoption to command dispatch (#96). - Add
Commanded.Aggregate.Multi(#98) as a way to return multiple events from a command dispatch that require aggregate state to be updated after each event. - Correlation and causation ids (#105).
- Initial support for running on a cluster of nodes (#80).
Bug fixes
- Adding a prefix to the aggregate in the router breaks the strong consistency of command dispatch (#101).
Upgrading
Please ensure you upgrade the following event store dependencies.
Using the Elixir EventStore:
Using Greg's Event Store:
commanded_extreme_adapterto v0.4.0
v0.14.0
Enhancements
- Dispatch command with
:eventualor:strongconsistency guarantee (#82). - Additional stream prefix per aggregate (#77).
- Include custom metadata during command dispatch (#61).
- Validate command dispatch registration in router (59).
Upgrading
Please ensure you upgrade the following event store dependencies.
Using the Elixir EventStore:
Using Greg's Event Store:
commanded_extreme_adapterto v0.3.0
v0.13.0
Enhancements
- Command dispatch optionally returns aggregate version, using
include_aggregate_version: trueduring dispatch.
v0.12.0
Enhancements
Commanded.Event.HandlerandCommanded.ProcessManagers.ProcessManagermacros to simplify defining, and starting, event handlers and process managers. Note the previous approach to defining and starting may still be used, so this is not a breaking change.
v0.11.0
Enhancements
- Shutdown idle aggregate processes (#43).
v0.10.0
Enhancements
Extract event store integration to a behaviour (
Commanded.EventStore). This defines the contract to be implemented by an event store adapter. It allows additional event store databases to be used with Commanded.By default, a
GenServerin-memory event store adapter is used. This should only be used for testing as there is no persistence.The existing PostgreSQL-based eventstore integration has been extracted as a separate package (commanded_eventstore_adapter). There is also a new adapter for Greg Young's Event Store using the Extreme library (commanded_extreme_adapter).
You must install the required event store adapter package and update your environment configuration to specify the
:event_store_adaptermodule. See the README for details.
v0.9.0
Enhancements
- Stream events from event store when rebuilding aggregate state.
v0.8.5
Enhancements
- Upgrade to Elixir 1.4 and remove compiler warnings.
v0.8.4
Enhancements
- Event handler and process manager subscriptions should be created from a given stream position (#14).
- Stop process manager instance after reaching its final state (#24).
v0.8.3
Enhancements
- Middleware
after_failurecallback is executed even when a middleware halts execution.
v0.8.2
Bug fixes
- JsonSerializer should ensure event type atom exists when deserializing (#28).
v0.8.1
Enhancements
- Command handlers should be optional by default (#30).
v0.8.0
Enhancements
- Simplify aggregates and process managers (#31).
v0.7.1
Bug fixes
- Restarting aggregate process should load all events from its stream in batches. The Event Store read stream default limit is 1,000 events.
v0.7.0
Enhancements
- Command handling middleware allows a command router to define middleware modules that are executed before, and after success or failure of each command dispatch (#12).
v0.6.3
Enhancements
- Process manager instance processes event non-blocking to prevent timeout during event processing and any command dispatching. It persists last seen event id to ensure events are handled only once.
v0.6.2
Enhancements
- Command dispatch timeout. Allow a
timeoutvalue to be configured during command registration or dispatch. This overrides the default timeout of 5 seconds. The same as the defaultGenServercall timeout.
Bug fixes
- Fix pending aggregates restarts: supervisor restarts aggregate process but it cannot accept commands (#22).
v0.6.1
Enhancements
- Upgrade
eventstoremix dependency to v0.6.0 to use support for recorded events created_at asNaiveDateTime.
v0.6.0
Enhancements
- Confirm receipt of events in event handler and process manager router (#19).
- Convert keys to atoms when decoding JSON using Poison decoder.
- Prefix process manager instance snapshot uuid with process manager name.
- Multi command dispatch registration in router (#16).
v0.5.0
Enhancements
- Include event metadata as second argument to event handlers. An event handler must now implement the
Commanded.Event.Handlerbehaviour consisting of a singlehandle_event/2function.
v0.4.0
Enhancements
- Macro to assist with building process managers (README).
v0.3.1
Enhancements
- Include unit test event assertion function:
assert_receive_event/2(#13). - Include top level application in mix config.
v0.3.0
Enhancements
- Don't persist an aggregate's pending events when executing a command returns an error (#10).
Bug fixes
- Ensure an aggregate's pending events are persisted in the order they were applied.
v0.2.1
Enhancements
- Support integer, atom or strings as an aggregate UUID (#7).