This commit is contained in:
2026-07-17 07:18:09 +02:00
parent 828347f80d
commit 4cb4ba12e0
13 changed files with 499 additions and 9 deletions

View 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 }

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,5 @@
package click.kamil.examples.jmsabstract;
public enum OrderEvents {
PAY, SUBMIT
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,5 @@
package click.kamil.examples.jmsabstract;
public enum OrderStates {
NEW, PAID, SUBMITTED
}