我正在为基于Stateless4j API的工作流管理系统实现状态机。但是,我无法找到一种有效的方法来持久化Stateless4j中的状态和转换。
作为我们的应用程序的一部分,我们有这样的要求:在用户返回到工作流之前,状态必须持续3到4天以上。我们将同时运行多个工作流。
请您分享您对在基于Stateless4j的状态机实现中持久化状态的最佳实践的见解吗?
发布于 2015-05-06 12:25:46
看起来,您需要做的是使用自定义访问器和mutator构造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的作者
https://stackoverflow.com/questions/29990009
复制相似问题