A
This commit is contained in:
29
state_machines/jms_abstract_template_sample/build.gradle
Normal file
29
state_machines/jms_abstract_template_sample/build.gradle
Normal file
@@ -0,0 +1,29 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
id 'org.springframework.boot' version '3.5.3'
|
||||
id 'io.spring.dependency-management' version '1.1.7'
|
||||
}
|
||||
|
||||
group = 'click.kamil'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'org.springframework.boot:spring-boot-starter'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-artemis'
|
||||
implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0'
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
}
|
||||
|
||||
bootJar { enabled = false }
|
||||
jar { enabled = true }
|
||||
@@ -0,0 +1,21 @@
|
||||
package click.kamil.examples.jmsabstract;
|
||||
|
||||
import org.springframework.jms.annotation.JmsListener;
|
||||
|
||||
/**
|
||||
* Template-method JMS base: {@code @JmsListener} lives on the abstract type; subclasses
|
||||
* implement {@link #doPMessage(String)}.
|
||||
*/
|
||||
public abstract class AbstractAA {
|
||||
|
||||
@JmsListener(destination = "orders.commands")
|
||||
public void onMessage(String message) {
|
||||
processMessage(message);
|
||||
}
|
||||
|
||||
protected void processMessage(String message) {
|
||||
doPMessage(message);
|
||||
}
|
||||
|
||||
protected abstract void doPMessage(String message);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package click.kamil.examples.jmsabstract;
|
||||
|
||||
import org.springframework.statemachine.StateMachine;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class DocumentAA extends AbstractAA {
|
||||
|
||||
private final StateMachine<OrderStates, OrderEvents> stateMachine;
|
||||
|
||||
public DocumentAA(StateMachine<OrderStates, OrderEvents> stateMachine) {
|
||||
this.stateMachine = stateMachine;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPMessage(String message) {
|
||||
stateMachine.sendEvent(OrderEvents.SUBMIT);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package click.kamil.examples.jmsabstract;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.jms.annotation.EnableJms;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableJms
|
||||
public class JmsAbstractTemplateApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(JmsAbstractTemplateApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package click.kamil.examples.jmsabstract;
|
||||
|
||||
import org.springframework.statemachine.StateMachine;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class OrderAA extends AbstractAA {
|
||||
|
||||
private final StateMachine<OrderStates, OrderEvents> stateMachine;
|
||||
|
||||
public OrderAA(StateMachine<OrderStates, OrderEvents> stateMachine) {
|
||||
this.stateMachine = stateMachine;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPMessage(String message) {
|
||||
stateMachine.sendEvent(OrderEvents.PAY);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package click.kamil.examples.jmsabstract;
|
||||
|
||||
public enum OrderEvents {
|
||||
PAY, SUBMIT
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package click.kamil.examples.jmsabstract;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.statemachine.config.EnableStateMachine;
|
||||
import org.springframework.statemachine.config.StateMachineConfigurerAdapter;
|
||||
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
|
||||
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
|
||||
|
||||
@Configuration
|
||||
@EnableStateMachine
|
||||
public class OrderStateMachineConfig extends StateMachineConfigurerAdapter<OrderStates, OrderEvents> {
|
||||
|
||||
@Override
|
||||
public void configure(StateMachineStateConfigurer<OrderStates, OrderEvents> states) throws Exception {
|
||||
states.withStates()
|
||||
.initial(OrderStates.NEW)
|
||||
.state(OrderStates.PAID)
|
||||
.state(OrderStates.SUBMITTED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure(StateMachineTransitionConfigurer<OrderStates, OrderEvents> transitions) throws Exception {
|
||||
transitions
|
||||
.withExternal().source(OrderStates.NEW).target(OrderStates.PAID).event(OrderEvents.PAY)
|
||||
.and()
|
||||
.withExternal().source(OrderStates.NEW).target(OrderStates.SUBMITTED).event(OrderEvents.SUBMIT);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package click.kamil.examples.jmsabstract;
|
||||
|
||||
public enum OrderStates {
|
||||
NEW, PAID, SUBMITTED
|
||||
}
|
||||
Reference in New Issue
Block a user