Вопрос

Я использую Apache Commons SCXML., И я хотел бы знать, можно ли сказать государственному компьютеру (SCXMlexecutor), чтобы перейти в данное состояние.

Я не могу использовать initialstate Атрибут, потому что я хочу восстановить состояние (т.е. от сбоев питания), и единственное, что у меня есть, это последнее состояние. Вот почему я думал о том, чтобы рассказать государству машину сделать прямой прыжок к нему.

Это было полезно?

Решение

В общем случае это действительно плохое представление о том, чтобы прыгать в государство без того, что он «осознает» государства «осознает», потому что могут быть предпосылки для выполнения определенного состояния, которое не удовлетворено (это было бы, если вы достигли государства «Нормальный») путь. Лучшая идея состоит в том, чтобы разработать состояние состояния с возможностью «перезагрузки», реализованные в качестве входного события «перезапуска» и состояниями и переходами, необходимыми для обработки его.

Другие советы

Это старый вопрос, но я просто ударил об этом и нуждался в ответе на него, и думал, что это может помочь другим ответить на него. Я использую это как часть тестирования подразделения, где крайне полезно просто добраться до определенного состояния (я хочу быть уверен, что если у государства A, если последовательность событий происходит, она идет в состояние B - и все еще идет Там после того, как я такник с государственной машиной XML!)

Я наконец нашел этот код в scxmltesthelper, и он работал. Просто назовите это с исполнителем и состоянием назначения.

public static void setCurrentState(SCXMLExecutor exec, final String id) throws IllegalArgumentException{
    try {
        exec.reset();
    } catch (ModelException me) {
        throw new IllegalArgumentException("Provided SCXMLExecutor "
                + "instance cannot be reset.");
    }
    TransitionTarget active = (TransitionTarget) exec.getStateMachine().
            getTargets().get(id);
    if (active == null) {
        throw new IllegalArgumentException("No target with id '" + id
                + "' present in state machine.");
    }
    Set current = exec.getCurrentStatus().getStates();
    current.clear();
    current.add(active);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top