Pro Yearly is on sale from $80 to $50! »

Nieder mit dem Spaghetti Code durch Statemachines

Nieder mit dem Spaghetti Code durch Statemachines

F029ec9c798e4dc447cab5e76f62fa17?s=128

Nicolas Byl

April 25, 2018
Tweet

Transcript

  1. 1 NIEDER MIT DEM SPAGHETTI CODE DURCH STATEMACHINES JAX 2018

    Nicolas Byl, codecentric AG
  2. 2 . 1 EINLEITUNG

  3. None
  4. 2 . 2

  5. 2 . 3 2 . 4 Wer hat bereits eine

    State Machine implementiert?
  6. if (order.getState() == State.COMMISSIONED) { order.setState(State.SHIPPED); order.save(); }

  7. 2 . 5 2 . 6 Nochmal: Wer hat bereits

    eine State Machine implementiert?
  8. 3 . 1 STATE MACHINES

  9. 3 . 2 Ein Beispiel Downloading docker pull Blocked docker

    create Image is pulled Dependencies satisfied Pending Starting docker start Ready Throttling policy LivenessProbe reports its first OK Failed Time-out
  10. 3 . 3 Zustandsänderungen

  11. 3 . 4 DISTRIBUTED BALL OF MUD https://commons.wikimedia.org/wiki/File:Taylor%27s_Dorodango_cropped.jpg

  12. 3 . 5 Zustandsänderungen konzentrieren

  13. 4 . 1 SPRING STATE MACHINES

  14. 4 . 2 Spring State Machines State Machine Library Spring

    Integration Event-basiert
  15. 4 . 3 Integration <dependencies> <dependency> <groupId>org.springframework.statemachine</groupId> <artifactId>spring-statemachine-core</artifactId> <version>1.2.8.RELEASE</version> </dependency>

    </dependencies>
  16. 4 . 4 Konfiguration @Configuration @EnableStateMachine public class StateMachineConfig extends

    EnumStateMachineConfigurerAda @Override public void configure(StateMachineStateConfigurer<CheckStatus, Ch states .withStates() .initial(CheckStatus.Initializing) .states(EnumSet.allOf(CheckStatus.class)); }
  17. 4 . 5 Konfiguration (2) @Override public void configure(StateMachineTransitionConfigurer<CheckStatu transitions

    .withExternal() .source(CheckStatus.Initializing).target(CheckStatus. .and() .withExternal() .source(CheckStatus.Initializing).target(CheckStatus. .and() [...]; } }
  18. 4 . 6 Events auslösen stateMachine.sendEvent(CheckEvents.succeeded);

  19. 4 . 7 Zustandsänderungen überwachen @WithStateMachine static class MyBean {

    @OnTransition(target = CheckStatus.Operational) void enteredOperational() { } @OnStateChanged public void checkStatusChanged(StateContext<CheckStatus, CheckEve } }
  20. 5 . 1 DEMO TIME

  21. 5 . 2 Monitoring Demo Monitoring von lokalen Dateien Alarmierung

    wenn zwei Checks in Folge fehlschlagen
  22. 5 . 3 State Machine

  23. 5 . 4 Demo Project https://github.com/nbyl/spring-state-machine-demo

  24. 6 . 1 SPRING STATE MACHINE

  25. 6 . 2 Advanced Features Verteilte State Machines mittels Zookeeper

    Scoping Security State Persistence
  26. 7 . 1 THE END Copyright 2018