1

我正在为基于Stateless4j API的工作流管理系统实现状态机。但是,我无法找到一种有效的方法来保持 Stateless4j 中的状态和转换。

作为我们用例的一部分,我们要求在用户返回工作流之前让状态保持 3 到 4 天以上。我们将同时运行多个工作流。

您能否分享您对在基于 Stateless4j 的状态机实现中保持状态的最佳实践的见解?

4

1 回答 1

1

看起来您需要做的是使用自定义访问器和修改器构造您的 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的作者

于 2015-05-06T12:25:46.310 回答