Hi all SCXML guys, I have been working with the model that using Parallel and History, the picture of sample model in state diagram has also been attached(SM1.jpg). I found the problem when I transition from "S1" to "History" by triggering "Sig1" event (History was already memorized), this exception was occurred. 2011-12-28 15:08:03,775 INFO : Illegal state machine configuration! org.apache.commons.scxml.model.ModelException: Illegal state machine configuration! at org.apache.commons.scxml.semantics.SCXMLSemanticsImpl.followTransitions(SCXMLSemanticsImpl.java:703) at org.apache.commons.scxml.SCXMLExecutor.triggerEvents(SCXMLExecutor.java:127) at org.apache.commons.scxml.env.AbstractStateMachine.fireEvent(AbstractStateMachine.java:201)
The equivalent SCXML is following: <?xml version="1.0" encoding="UTF-8"?> <scxml xmlns="http://www.w3.org/2005/07/scxml" version="null" initial="Main"> <!-- http://commons.apache.org/scxml --> <parallel id="Main"> <state id="region_Region1"> <initial> <transition target="S1"> </transition> </initial> <state id="S7"> <initial> <transition target="s4"> </transition> </initial> <history id="History" type="shallow"> <transition> <target> <state id="s4"> <transition event="Sig3" target="S3"> </transition> </state> </target> </transition> </history> <transition event="Sig2" target="S1"> </transition> <state id="S3"> </state> <state id="s4"> <transition event="Sig3" target="S3"> </transition> </state> </state> <state id="S1"> <transition event="Sig1" target="History"> </transition> <transition event="Sig0" target="S7"> </transition> </state> </state> <state id="region_Region2"> <initial> <transition target="S10"> </transition> </initial> <state id="S10"> </state> </state> </parallel> </scxml> I don't sure this is a bug of SCXML or not. It seems like active states is not valid in Parallel if (!SCXMLHelper.isLegalConfig(targetSet, errorReporter)) { throw new ModelException("Illegal state machine configuration!"); } in SCXMLHelper.isLegalConfig(targetSet, errorReporter): if (tt instanceof Parallel) { Parallel p = (Parallel) tt; if (count.size() < p.getChildren().size()) { errRep.onError(ErrorConstants.ILLEGAL_CONFIG, "Not all AND states active for parallel " + p.getId(), entry); legalConfig = false; } } Thanks, Arnon
--------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org