- First stage to add support for UI modeling via
eclipse uml2 and papyrus frameworks.
- Add new interface StateMachineModelFactory which is
a central point of building machines models outside
of a normal annotation/build classes. What this mean is
a hook to config model so that machine can be defined
via a model factory, instead of writing config based on
normal adapter callbacks.
- Integrate model config into an annotation model so that
you can still use normal adapters but point those to
model factory classes, which then allows external hooks
for machine configuration.
- New spring-statemachine-uml package which supports
eclipse uml2/emf frameworks to define a machine config.
- Relates to #193
- New module spring-statemachine-cluster which is
based on spring-cloud-cluster to provide leader
election.
- Ensemble now has a concept of a leader if implementation
supports it.
- New DistributedLeaderAction can use leader info to execute
action only on a leader.
- Tweak web sample with these new concepts.
- Fixes#176
- State is now properly reported even if
state machine is stopped due to it terminating
via end state.
- Submachine is now explicitly stopped when parent
is moving its state into end state.
- Fixed some persistense issues handling along these fixes.
- Fixes#190
- change original id to uuid.
- This new id is now for user disposal.
- Currently only meant for a top-level machine.
- Can be set via annotation config, model classes or via
new StateMachineFactory.getStateMachine(String).
- Is persisted with DefaultStateMachinePersister and
StateMachineContext.
- Related new tests in ConfigurationTests and StateMachinePersistTests3.
- Fixes#186
- Fixing a persist/restore bug which failed to properly
reset history state via StateMachineContext history mappings.
- Effectively caused by too early `break` from a loop resetting
states where history reset needs to check all states to find
substate machines.
- Ported test given with a #188.
- Relates to #188
- Make model data classes easier to use for
simple use cases.
- Start adding dev docs.
- Generic docs changes.
- Relates to #172
- Relates to #158
- Relates to #185
- Added new `withVerifier()` which can be used to
set a custom one or disable verifier usage.
- Tuned default verifier.
- Disabled verifier for some tests which don't
exactly use correct model.
- Relates to #103
- Enhance StateMachineContext to contain possible
history state mappings for substates.
- Add persist support for AbstractStateMachinePersister.
- Modify some AbstractStateMachine functionality
for history handling which then allows to also
reset history state.
- Relates to #182
- New concepts easing persisting operations.
- Base implementation of a persister which user can
use instead of doing things manually to build a state
machine context. Supports basic sm model but doesn't yet
'understand' deep and complex mixed models.
- Fixed some features in sm reset functionality if root machine
only have regions.
- Relates to #184
- Add new features around Trigger to arm/disarm
it so that state entry/exit can stop firing
TimerTrigger. Default functionality for timer(long)
still stays same, however timerOnce(long) will
kick this new functionality where trigger will fire
once after state has been entered.
- Fixes#165
- Move into a generic fail fast configuration error
model with better exception messages.
- Initial move into a public SPI for state machine
configuration pojo classes.
- new StateMachineModelVerifier interface for generic model verifying.
- Relates #103
- Relates #172
- Work is done together for above issues mostly because they
relate to each others for config error handling. Meaning
we can't really verify configuration if we don't have
a proper model describing actual config model.
- Adding expectStateEntered and expectStateExited methods
for testing state enter/exit in a given order. This gives
on option to expect i.e. states via anonymous transitions.
- Fixes#154
- New sample app eventservice which is used to
demonstrate how redis is used as a repository
for StateMachineContext.
- Uses pooled request scope machine instances so
that with every request a machine is reseted from
a redis.
- Provides UI to play around.
- Provides rest endpoint to send 'pageview' events
for processing. For example using curl command like:
curl http://localhost:8080/feed -H "Content-Type: application/json" --data '{"user":"joe","id":"VIEW_I"}'
- Fixes#160