Commit Graph

674 Commits

Author SHA1 Message Date
Janne Valkealahti
10f0ec0edf Clear event defer list
- In ReactiveStateMachineExecutor deferList is clear
  with deferred event if it triggers.
- Fixes #747
2019-05-08 18:29:43 +01:00
Janne Valkealahti
95554be3fb Add vscode to gitignore 2019-05-07 18:04:10 +01:00
Janne Valkealahti
70341f54e5 Add reactive state actions
- Add stateDoFunction, stateEntryFunction and stateExitFunction methods
  taking Function with a state to register reactive actions.
- Don't yet to a full take on all similar action methods as we need
  to think about how these should be named and what old methods to
  depecate.
- Relates #743
2019-05-06 22:44:58 +01:00
Janne Valkealahti
d8f1fc0155 Initial reactive action support
- This first commit related to reactive action support basically changes internal
  logic away from original Action interface which really is just
  a Consumer<StateContext> but it originates pre jdk8 era.
  Reactive equivalent internally is now Function<StateContext<S, E>, Mono<Void>>.
- Essentially actions will now get executed with a reactor chain fully.
- Fix StateMachineExecutorTransit in AbstractStateMachine to be full reactive
  chain which were needed to get reactive actions working. This also put
  StateContextTests back to its original state.
- Add typesafe interface ReactiveAction which simply wraps
  Function<StateContext<S, E>, Mono<Void>> and add this to transitions with
  actionFunction() as a concept. This will be added to states in next
  commits if actionFunction() as a concept works.
- Polish various things and issues which were not addressed with initial reactive commit.
- Disable ActionSecurityTests for now as secured Action bean now breaks because it's
  internally wrapped into a Function and Spring Security doesn't see it anymore.
  Security like this needs a bit of a overhaul which can be done later.
- State do actions which are done via scheduling needs some work as now we just do
  a subscribe which is probably a bit wrong. There's going to be more work for
  scheduling so this also can be left later stages.
- Relates #743
2019-05-06 17:03:21 +01:00
Janne Valkealahti
07863c1c69 Update readme badges 2019-05-04 17:37:23 +01:00
Janne Valkealahti
52fc9c8568 Initial reactive refactor
- Change to Boot 2.2.x to pick upcoming series.
- Introduce Awaitility to tests
- Introduce new StateMachineEventResult concept in favor of boolean
  when sending events. This result interface will have richer information
  what happens when event is processed as previously we simply had boolean
  flag telling if even was accepted. With StateMachineEventResult we can
  can provide more information like if event was deferred and which region
  provided this message.
- Deprecate old event methods and add new reactive event methods which now
  return a Flux of StateMachineEventResult's. This concept then allows
  to send Flux of events to a machine.
- State exit/entry now return Mono<Void>
- Refactor component lifecycle to be reactive as old start/stop would
  not work anymore in a reactive statemachine simply because start may
  cause changes and execute flow's.
- To ease testing add internal assertj assertions for some classes. This
  work is kept in a test classes for time being to get move to public
  spring-statemachine-test when things are more mature.
- Overhaul StateMachineExecutor interface and replace DefaultStateMachineExecutor
  with ReactiveStateMachineExecutor.
- New ReactiveLifecycleManager which is kinda reactive replacement of some internals
  of a LifecycleObjectSupport. Needed as components are reactively started and
  stopped during a machine execution.
- New RegionExecutionPolicy concept which is an attempt to introduce parallel config
  idea to a regions. Previously this was just naively handled with TaskExecutor which
  never worked perfectly while working through reactor now seem to provide more
  consistent results.
- Some test has been changed to reflect changes in a StateMachineExecutor. Also execution
  using reactor made some changes to state notifications which now seem to be
  more consistent(aka. previously parallel execution might have given notifications
  in wrong order and in some cases kinda bogus changes).
- New turnstile reactive sample which is just start of a reactive sample to show
  concept with webflux.
- Don't yet really add any docs as things are in-flight.
- Fixes #740
2019-05-04 16:31:08 +01:00
Janne Valkealahti
8dc00fc95a Update readme for 3.x notes 2019-05-04 14:16:18 +01:00
Janne Valkealahti
427cf58e5b Next major development version 2019-05-04 14:00:36 +01:00
Spring Operator
885836400f URL Cleanup
- Merge/squash #688
- Exclude all .di, .notation and .uml files whose id's cannot be
  changed.
2019-05-04 13:37:36 +01:00
Spring Operator
426fa163b2 URL Cleanup
- Merge/squash #686 and #694
2019-05-03 15:01:31 +01:00
Janne Valkealahti
98ba6949ff Fix concurrency in DefaultStateMachineExecutor
- Change deferList from LinkedList to ConcurrentLinkedQueue
  to fix ConcurrentModificationException with parallel events.
- Fixes #736
2019-05-03 14:14:14 +01:00
Janne Valkealahti
55b7ff09cf Fix exit logic with fork/join
- In a case where fork/join happens within a substate we should not exit parent state
  which causes cascading stops for forked regions thus causing inconsistent lifecycle
  states within that kind of a machine structure. This for example caused parent submachine
  to end up stopped and all regions running even if some regions ended up into terminal state.
- Fixes #737
2019-05-03 09:50:35 +01:00
Spring Buildmaster
dc72cc4982 Next development version 2019-04-29 11:53:56 +00:00
Janne Valkealahti
b2deb7f4ca Update changelog 2019-04-29 08:10:57 +01:00
Janne Valkealahti
8f6c89d65e Move post state interceptor call later
- This is fixing some issues where anonymous transitions
  are causing post state call to happen too early i.e.
  with a submachine which transits away from it.
- Fixes #734
2019-04-24 07:51:18 +01:00
Janne Valkealahti
6867b5dc9e Fix pseudostate parent with uml machine references
- In a case where uml is drawn with submachine references where
  a pseudostate like choice is defined in a reference, UmlModelParser
  needs to find possible parent by following machine/state references
  to match a state name which references to a this particular machine.
- Actual bug was because pseudostate parent wasn't found it became null,
  thus causing it to be defined in a root machine which then caused
  other cascading errors like nasty loop shown in #729.
- Fixes #729
2019-04-18 17:45:37 +01:00
burak
cdaa9a1400 Add full interceptor methods support for RegionPersistingInterceptorAdapter
- Fixes #726
2019-04-14 07:15:08 +01:00
Jay Bryant
bc1f015c23 Modernized the document production
I updated the build to use spring-doc-resources, which gives us the modern look and feel for the HTML output. Unfortunately, we lose the epub output (until the Asciidoctor team gets that fixed).
2019-04-13 16:56:16 +01:00
Jay Bryant
16a2a5389d Editing pass
I edited for spelling, punctuation, grammar, usage, and corporate voice. I also added leader sentences before all the images and code listings and rewrote for clarity.
2019-04-13 16:55:58 +01:00
Hamid Mortazavi
bd2518cce9 Persisting StateMachineContext for SM with nested regions and Fork/Join
- fixing issue when StateMachineContext is incorrectly persisted for
  SM with nested regions and Fork/Join configuration
- Fixes #723
2019-04-13 16:41:32 +01:00
Jonathon Seah
39ab4a0732 Add backwards compatibility between StateMachineContext serialization of spring-statemachine 2.0.x and 2.1.x
- Add tests between old serialised context(write) and new context(write)
- Fix setting childRefs to empty array instead of null if childRefs
  are not given.
2019-04-13 15:56:43 +01:00
ryenus
02ecb28751 fix wording: must be used +{in} order to 2019-03-20 14:35:47 +00:00
Janne Valkealahti
20c123d36f Remove badge from readme 2019-03-19 17:57:44 +00:00
Janne Valkealahti
069cf207cd Travis, bye bye 2019-03-19 17:55:53 +00:00
Spring Buildmaster
f67ec1380b Next development version 2019-03-19 13:30:47 +00:00
Janne Valkealahti
74c6bc2c46 Update changelog 2019-03-19 11:51:25 +00:00
Janne Valkealahti
40a7230a43 JoinPseudoState not tracking join states correctly
- In JoinPseudoState join states are tracked as list of lists
  where usually inner list contains one item except with region
  having multiple end states.
- Now fixing this case when resetting when previously completed
  region don't clear this list out from outer list.
- Fixes #684
2019-03-19 11:45:41 +00:00
Janne Valkealahti
009d8331fd Fix wrong refs in docs
- Duo to older refactorings fix correct impl refs
  for StateMachineRuntimePersister.
- Fix link to sample.
- Fixes #595
2019-03-19 08:36:25 +00:00
Vincent Privat
675fdf07de Add new method isStateMachineManaged
Determines if the given machine identifier denotes a known managed state machine.
2019-03-17 08:52:23 +00:00
Janne Valkealahti
7df664d306 Add support for @EventHeader annotation
- Add @EventHeader which can be used to bound as single
  event headers instead of all headers @EventHeaders.
- Fixes #638
2019-03-17 08:08:13 +00:00
Janne Valkealahti
53d6ddefa9 Fix StateMachineInterceptor calls
- Due to a regression when new preStateChange method were
  added to pass on root machine, old method did not get
  called anymore. Now calling that as well and fixing
  some other things around it.
- Same changes for postStateChange.
- Fixes #633
2019-03-11 11:17:45 +00:00
Spring Operator
d0a13258cb URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were fixed successfully.

* http://www.apache.org/licenses/LICENSE-2.0.txt migrated to:
  https://www.apache.org/licenses/LICENSE-2.0.txt ([https](https://www.apache.org/licenses/LICENSE-2.0.txt) result 200).
* http://docs.jboss.org/jbossas/javadoc/4.0.5/connector migrated to:
  https://docs.jboss.org/jbossas/javadoc/4.0.5/connector ([https](https://docs.jboss.org/jbossas/javadoc/4.0.5/connector) result 301).
* http://repo.springsource.org/libs-milestone migrated to:
  https://repo.springsource.org/libs-milestone ([https](https://repo.springsource.org/libs-milestone) result 301).
* http://repo.springsource.org/libs-release migrated to:
  https://repo.springsource.org/libs-release ([https](https://repo.springsource.org/libs-release) result 301).
* http://repo.springsource.org/libs-snapshot migrated to:
  https://repo.springsource.org/libs-snapshot ([https](https://repo.springsource.org/libs-snapshot) result 301).
* http://repo.springsource.org/plugins-release migrated to:
  https://repo.springsource.org/plugins-release ([https](https://repo.springsource.org/plugins-release) result 301).
* http://repo.springsource.org/plugins-snapshot migrated to:
  https://repo.springsource.org/plugins-snapshot ([https](https://repo.springsource.org/plugins-snapshot) result 301).
* http://spring.io/spring-statemachine migrated to:
  https://spring.io/spring-statemachine ([https](https://spring.io/spring-statemachine) result 302).
2019-03-06 00:02:12 -06:00
Spring Buildmaster
4932395b65 Next development version 2019-02-18 08:48:02 +00:00
Janne Valkealahti
d4b0eeedc5 Update changelog 2019-02-18 08:16:49 +00:00
Janne Valkealahti
afcbea2ee9 Upgrade to boot 2.1.3
- Fixes #632
2019-02-18 08:14:32 +00:00
Janne Valkealahti
3e89ce7753 Update changelog 2019-01-29 14:04:20 +00:00
Janne Valkealahti
62b57ebb84 Make equals work in DefaultStateMachineContext
- Adding equals and hashCode methods to DefaultStateMachineContext,
  DefaultExtendedState and ObservableMap.
- Fixes #628
2019-01-26 14:35:29 +00:00
Janne Valkealahti
28301a2464 Upgrade to kryo 4.0.2
- Fixes #625
2019-01-25 14:50:33 +00:00
Janne Valkealahti
5ccc82af1c Re-enable devtools for samples
- Change plugin config not to exclude devtools.
- Add spring.h2.console.enabled=true to samples
  using embedded db.
- Fixes #623
2019-01-20 14:02:05 +00:00
Janne Valkealahti
4feeb196cf Document region changes
- Add new docs for regions changes related to StateMachineContext
  and StateConfigurer.
- Document new datajpamultipersist sample.
- Fixes #621
2019-01-20 13:55:24 +00:00
Janne Valkealahti
d698fc8d11 Allow auto naming for uml pseudostates
- Fixing issue when i.e. choice pseudostate is not named which
  then cause some other internal errors in a model parser.
- As pseudostate need to have a name, we now auto generate with
  pseudostate type name + counter.
- Fixes #591
2019-01-13 16:09:25 +00:00
Janne Valkealahti
b30f0ed0b3 Fix join from orthogonal regions
- Fix a bug where multiple end states in a region failed to complete
  if transition was from a super state which in case of join used to track
  a list of end states. This is now changed to track list of lists and
  we can now track that at least one end state were reached per region.
- Fixes #619
2019-01-13 09:01:20 +00:00
Janne Valkealahti
1a485e4d69 Add end state action test
- Test that entry action for end state is executed.
- Relates to #620
2019-01-12 09:10:33 +00:00
Janne Valkealahti
84ca0aec3e Refactor region handling and persistence
- Make kryo in AbstractKryoStateMachineSerialisationService aware of same classloader
  most likely use in an app. This takes away some of those weird kryo
  errors you see with a web apps.
- Add context references concept to StateMachineContext which can be used
  to store reference id and then individual running machines with regions
  can independently store their states. Whole machine state can then get
  restored more accurately.
- Add new `region(String id)` to StateConfigurer which can be used to set region id.
  This is equivalent as setting region id with json based machine structure where
  you need to define region id's with orthogonal regions are in use.
- Add new datajpamultipersist sample showing running regions and how those are
  persisted to a database.
- Fixes #617
- Fixes #605
- Fixes #615
2019-01-12 08:37:34 +00:00
Janne Valkealahti
c700301767 Update changelog 2018-11-28 09:24:21 +00:00
Janne Valkealahti
2c9d951f99 Upgrade to Spring Boot 2.1.x
- Simple boot 2.1.x upgrade
- Pump up gradle to 4.4 as required
- Allow one test to override bean as that's what it does
- Fixes #602
2018-11-11 07:48:06 +00:00
Spring Buildmaster
efce68bab0 Next development version 2018-11-10 14:45:21 +00:00
Janne Valkealahti
021b906bd3 Update changelog 2018-11-10 13:49:44 +00:00
Alex Pang
b67d632f46 Fix numpad typo in Reference documentation, section B.3.8 2018-10-02 16:17:39 -04:00
Christoph Empl
cb74a35bff Fixed enum comparison in AbstractStatemachine#resetStateMachine
- Add a check for enum class as well so that
  restore doesn't pick a wrong instance.
- Fixes #554
2018-09-26 12:21:45 -04:00