This commit is contained in:
2026-06-17 06:31:11 +02:00
parent 79ddb307c1
commit 1f4a1667c3
27 changed files with 2251 additions and 32 deletions

View File

@@ -0,0 +1,13 @@
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation project(':state_machines:multi_module_sample:api-module')
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.0'
implementation 'org.springframework.statemachine:spring-statemachine-core:3.2.0'
}

View File

@@ -0,0 +1,20 @@
package click.kamil.multi.core;
import click.kamil.multi.api.OrderApi;
import lombok.RequiredArgsConstructor;
import org.springframework.statemachine.StateMachine;
import org.springframework.statemachine.config.StateMachineFactory;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class OrderController implements OrderApi {
private final StateMachineFactory<String, String> factory;
@Override
public void submitOrder(String orderId) {
StateMachine<String, String> sm = factory.getStateMachine(orderId);
sm.sendEvent("SUBMIT");
}
}

View File

@@ -0,0 +1,43 @@
package click.kamil.multi.core;
import click.kamil.multi.api.ProcessAction;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.statemachine.config.EnableStateMachineFactory;
import org.springframework.statemachine.config.StateMachineConfigurerAdapter;
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
@Configuration
@EnableStateMachineFactory
public class OrderStateMachineConfig extends StateMachineConfigurerAdapter<String, String> {
@Override
public void configure(StateMachineStateConfigurer<String, String> states) throws Exception {
states
.withStates()
.initial("NEW")
.state("PROCESSING")
.end("COMPLETED");
}
@Override
public void configure(StateMachineTransitionConfigurer<String, String> transitions) throws Exception {
transitions
.withExternal()
.source("NEW")
.target("PROCESSING")
.event("SUBMIT")
.action(processAction())
.and()
.withExternal()
.source("PROCESSING")
.target("COMPLETED")
.event("FINISH");
}
@Bean
public ProcessAction processAction() {
return new ProcessAction() {};
}
}