- New extendedStateChanged method in StateMachineListener and
its wingman OnExtendedStateChanged in context events.
- DefaultExtendedState is now using ObservableMap to get notify
when individual variables has been modified.
- Fixes#85
- Now using stateMachineTaskExecutor instead of taskExecutor
so that it's easier to use custom executor and not to
collide with bean created i.e. scheduling.
- Fixes#83
- Change previous DistributedStateMachine fixes which didn't
really work. Now explicitely getting state from machine to be set
into ensemble for post internal transition.
- Now can send Message<E> via test plan instead of plain E.
- More testing for tweaked features.
- For some reason ZookeeperStateMachineEnsemble may return null
for very early when postTransition() is handled. Adding check not
to ping back ensemble if its getState() returns null. It really
feels a bit wrong right now, so need to follow this.
- Synchronize JoinPseudoState's
JoinTracker.stateChanged(State<S, E>, State<S, E>) method
for playing nice with concurrent region execution.
Should fix#93.
- Tuning test which relates to #76. What comes for the
tests, there was this concurrency issue and also problem
in tests itself.
- Polish JoinPseudoState.
- Add related error handling methods to StateMachine.
- Enhance StateMachineListener and context events around
error events.
- Modify StateMachineInterceptor and stuff around it order
to handle errors.
- Fixes#6, fixes#77
- Fix some concurrent event issues which were
born with new tests
- Enhance tests for dist machine and ensemble
- Add new features to testing system
- Polish and add more logging
- Fix AbstractStateMachineFactory so that it does not try
to create transitions with null source or target. Basically we
just skip transition source or target which doesn't belong to
region.
- Change DefaultExtendedState to use ConcurrentHashMap so that
there's less change to get into trouble with concurrency.
- Add statechart for tasks recipe.
- Fix various concepts in TasksHandler and its tests.
- Prepare some examples for docs.
- Fixes#74
- Fixes#86
- Fix internal transition changes when extended
state variables has been modified. Also internal
transition is now correctly passed into other
distributed state machines.
- Rename StateChangeInterceptor to StateMachineInterceptor and
add methods for pre/post transitions.
- Adding getId concept into a state machine to help distributed
machines to know from where a state change originates.
- Fix ZookeeperStateMachineEnsemble to work better with
persisted state machine contexts.
- StateMachineAccess, replace state reset and variables
with a StateMachineContext.
- Additional fixes to reset state properly even if
target transition is a super state.
- Some polish
- Add tests
- Fixes#82
- Now have configure method ConfigurationConfigurer.autoStart(boolean)
which can be used to enable autostart feature for top-level state machine.
We keep this feature disabled as default because most of the cases it is
easier to enable it than disable it.
- Reported and fixex #81
- Change how internal state is entered and handled
when transition doesn't terminate into initial state.
- Needed to change stuff in various places because
some of the concepts were literally broken which were
overlooked due to missing tests.
- OnStateNotAcceptedEvent is fired via context
if event is not accepted.
- eventNotAccepted called via StateMachineListener
if event is not accepted.
- Test in StateMachineEventTests.testEventNotAccepted()
- Fixes#43
- Fixes#71
- If substate is entered directry, we don't
go via initial state for particular state machine
where transition ends.
- Fixing other tests which assumed initial state is entered.
- In terms of a history state, initial state is still entered.
- Relates to #74
- Tasks recipe not yet fully working, need to get
this work in to be able to work with other tickets.
- Add childs to StateMachineContext
- A lot of fixes to regions concept throughout
a code base. Some of the concepts were really broken
if there were a complex recursive set of regions, etc.
- Add task executor/scheduler to StateMachineBuilder
- Remove away from plain serialize/deserialize to write/read
concept which works better in a generic abstraction.
- Tweak related class in zookeeper package.
- Relates to #35
- New configurer which can be used to define an ensemble which
if is set automatically wraps a machine with a distributed
state machine and sets it to use an given ensemble.
- Relates to #35
- Move away from using state machine listener if favor
of interceptor which allows to skip state change.
- Remove previously added method in a
StateMachineListener. (was a bad idea).
- More tweaks to zk example
- Relates to #35
- Relates to #45
- Modify current annotation builder model to work via
manual StateMachineBuilder class.
- Add ConfigurationConfigurer to configure bean factory,
task executor and task scheduler via builder.
- NOTE: not yet fully working distributed sm, this
commit is considered to be a stage 1 of further
commits on this matter.
- Preliminary concept of DistributedStateMachine,
StateMachineEnsemble and StateMachinePersist.
- New module spring-statemachine-zookeeper order to
persist state in a distributed matter.
- Refactoring concept of a state machine access to get
better internal access into a sm via functional interfaces.
- Change build to use jdk7 and change test to rely on jdk8
order to test functional lambdas.
- new zookeeper sample demonstrating distributed concepts.
- Relates t0 #35 and #34.
- No docs until things are fully implemented.
- Add new StateContextExpressionMethods support class.
- Change SpelExpressionGuard to user methods class.
- Add new SpelExpressionAction which can take expression
to execute action.
- Generally fixes#68
- First attempt to externalize event execution from state machine
into its own class backed by an interface. This relates to #7
- Change of various places to have better support if execution
is done in threads.
- Not yet a central place where concurrency can be defines, thus
currently rely on global taskExecutor bean when can be overridded
from a default which is SyncTaskExecutor. Futher work for
that in separate tickets.
- Change tasks sample to use a thread pool.
- Change of concept how initial state/transition is handled, no
longer handled manually in lifecycle method, thus giving a change
for initial transition to execute its actions in a multiple threads.
- Trying to fix test `StateMachineTests.testTimerTransition`
by releasing latch after stateContexts list is updated. This
is probably reason why assert failed for that list size.
- Again, fixes#36
- Add concept of functional interface to work with
recursive machines for function access.
- This also fixes a machine relay so that every used
state context gets a correct top level machine
for correctly dispatching events into a top level handling.