@Service
public class ClaimService {
@Autowired
ClaimRepository claimRepository;
@Autowired
StateMachineFactory factory;
public boolean selectDate(ClaimRequest claimRequest) {
StateMachine<ClaimStates, ClaimEvents> sm = build(claimRequest.getId());
Message<ClaimEvents> addDate = MessageBuilder.withPayload(ClaimEvents.SELECTDATE)
.setHeader("claimId", claimRequest.getId()).build();
return sm.sendEvent(ClaimEvents.SELECTDATE);
}
private StateMachine<ClaimStates, ClaimEvents> build(Long claimId) {
Claims claims = claimRepository.findById(claimId).get();
String claimIdKey = Long.toString(claims.getId());
StateMachine<ClaimStates, ClaimEvents> sm = factory.getStateMachine(claimIdKey);
sm.stop();
sm.getStateMachineAccessor().doWithAllRegions(sma -> {
sma.addStateMachineInterceptor(new StateMachineInterceptorAdapter<ClaimStates, ClaimEvents>() {
// @Override
public void preStateChange(State<ClaimStates, ClaimEvents> state, Message<ClaimEvents> message, Transition<ClaimStates, ClaimEvents> transition, StateMachine<ClaimStates, ClaimEvents> stateMachine) {
Optional.ofNullable(message).ifPresent(msg -> {
Long claimId = Long.class.cast(msg.getHeaders().getOrDefault("claimId", -1));
Claims claims = claimRepository.findById(claimId).get();
claims.setClaimState(state.getId().name());
claimRepository.save(claims);
});
}
});
sma.resetStateMachine(new DefaultStateMachineContext<ClaimStates, ClaimEvents>(
ClaimStates.valueOf(claims.getClaimState()), null, null, null));
});
sm.start();
return sm;
}
}
Here I am trying the persist State of Application using StateMachine. But when I am working on it is gives issues with its configuration and it's version.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stateMachine': Invocation of init method failed; nested exc
full logs: java.lang.IllegalStateException: This object has already been built at org.springframework.statemachine.config.common.annotation.AbstractAnnotationBuilder.build(AbstractAnnotationBuilder.java:43) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.statemachine.config.builders.StateMachineConfigBuilder.performBuild(StateMachineConfigBuilder.java:46) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.statemachine.config.builders.StateMachineConfigBuilder.performBuild(StateMachineConfigBuilder.java:34) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.statemachine.config.common.annotation.AbstractConfiguredAnnotationBuilder.doBuild(AbstractConfiguredAnnotationBuilder.java:112) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.statemachine.config.common.annotation.AbstractAnnotationBuilder.build(AbstractAnnotationBuilder.java:40) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.statemachine.config.common.annotation.AbstractConfiguredAnnotationBuilder.getOrBuild(AbstractConfiguredAnnotationBuilder.java:129) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.statemachine.config.configuration.StateMachineConfiguration$StateMachineDelegatingFactoryBean.afterPropertiesSet(StateMachineConfiguration.java:170) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.7.12.jar:2.7.12] at com.example.springstatemachinechatgpt.SpringstatemachinechatgptApplication.main(SpringstatemachinechatgptApplication.java:18) ~[classes/:na]
2023-06-26 10:45:48.225 WARN 24556 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stateMachine': Invocation of init method failed; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.statemachine.config.StateMachineConfig.getTransitions()" because "stateMachineConfig" is null 2023-06-26 10:45:48.227 INFO 24556 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2023-06-26 10:45:48.238 INFO 24556 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2023-06-26 10:45:48.275 INFO 24556 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2023-06-26 10:45:48.281 INFO 24556 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2023-06-26 10:45:48.320 INFO 24556 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2023-06-26 10:45:48.377 ERROR 24556 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stateMachine': Invocation of init method failed; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.statemachine.config.StateMachineConfig.getTransitions()" because "stateMachineConfig" is null at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.27.jar:5.3.27] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.7.12.jar:2.7.12] at com.example.springstatemachinechatgpt.SpringstatemachinechatgptApplication.main(SpringstatemachinechatgptApplication.java:18) ~[classes/:na] Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.statemachine.config.StateMachineConfig.getTransitions()" because "stateMachineConfig" is null at org.springframework.statemachine.config.configuration.StateMachineConfiguration$StateMachineDelegatingFactoryBean.afterPropertiesSet(StateMachineConfiguration.java:171) ~[spring-statemachine-core-1.2.3.RELEASE.jar:1.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.27.jar:5.3.27] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.27.jar:5.3.27] ... 16 common frames omitted