我们如何在基于 stateless4j 的状态机中持久化状态和转换?
How can we persist states and transitions in stateless4j based State Machine?
我正在为基于 Stateless4j API 的工作流管理系统实现状态机。但是,我无法找到一种有效的方法来持久化 Stateless4j 中的状态和转换。
作为我们用例的一部分,我们要求在用户 returns 加入工作流之前,让状态保持活动状态超过 3 - 4 天。我们将同时拥有多个工作流程 运行。
您能否分享您对在基于 Stateless4j 的状态机实现中保持状态的最佳实践的见解?
看起来您需要做的是使用自定义访问器和修改器构建您的 StateMachine,如下所示:
public class PersistentMutator<S> implements Action1<S> {
Foo foo = null;
@Inject
FooRepository fooRepository;
public PersistentMutator(Foo foo) {
this.foo = foo;
}
@Override
public void doIt(S s) {
foo.setState(s);
fooRepository.save(foo)
}
}
然后你想用你的访问器和修改器调用构造函数:
/**
* Construct a state machine with external state storage.
*
* @param initialState The initial state
* @param stateAccessor State accessor
* @param stateMutator State mutator
*/
public StateMachine(S initialState, Func<S> stateAccessor, Action1<S> stateMutator, StateMachineConfig<S, T> config) {
this.config = config;
this.stateAccessor = stateAccessor;
this.stateMutator = stateMutator;
stateMutator.doIt(initialState);
}
或者,您可能想查看 StatefulJ。它内置了对 JPA 和 Mongo 开箱即用的原子更新状态的支持。这可能会为您节省一些时间。
免责声明:我是StatefulJ
的作者
我正在为基于 Stateless4j API 的工作流管理系统实现状态机。但是,我无法找到一种有效的方法来持久化 Stateless4j 中的状态和转换。
作为我们用例的一部分,我们要求在用户 returns 加入工作流之前,让状态保持活动状态超过 3 - 4 天。我们将同时拥有多个工作流程 运行。
您能否分享您对在基于 Stateless4j 的状态机实现中保持状态的最佳实践的见解?
看起来您需要做的是使用自定义访问器和修改器构建您的 StateMachine,如下所示:
public class PersistentMutator<S> implements Action1<S> {
Foo foo = null;
@Inject
FooRepository fooRepository;
public PersistentMutator(Foo foo) {
this.foo = foo;
}
@Override
public void doIt(S s) {
foo.setState(s);
fooRepository.save(foo)
}
}
然后你想用你的访问器和修改器调用构造函数:
/**
* Construct a state machine with external state storage.
*
* @param initialState The initial state
* @param stateAccessor State accessor
* @param stateMutator State mutator
*/
public StateMachine(S initialState, Func<S> stateAccessor, Action1<S> stateMutator, StateMachineConfig<S, T> config) {
this.config = config;
this.stateAccessor = stateAccessor;
this.stateMutator = stateMutator;
stateMutator.doIt(initialState);
}
或者,您可能想查看 StatefulJ。它内置了对 JPA 和 Mongo 开箱即用的原子更新状态的支持。这可能会为您节省一些时间。
免责声明:我是StatefulJ
的作者