commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rahul Akolkar (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (SCXML-52) Error on resolving conflicting transitions for compound states
Date Wed, 22 Aug 2007 17:24:30 GMT

    [ https://issues.apache.org/jira/browse/SCXML-52?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12521861
] 

rahul@apache.org edited comment on SCXML-52 at 8/22/07 10:22 AM:
--------------------------------------------------------------

This is a combination of two things:

1) Document order priority -- so on entering s1 below, T1 wins:

  <state id="s1">
    <onentry>
      <send event="interal_event1"/>
    </onentry>
    <transition event="interal_event1"/> <!-- T1 -->
    <transition event="interal_event1"/> <!-- T2 -->
  </state>

2) Commons SCXML processes all "generated" events (includes implicit events and <send>
usages such as above etc.) in the same subsequent microstep. Therefore, both transitions in
your example become candidate transitions and the first in document order wins.

Behavior in (2) is open to interpretation of the spec ATM, but interim, you may be able to
"chain" your transitions to tease apart the two internal_events into their own microsteps,
i.e.

  <state id="s1">
    <onentry>
      <send event="interal_event1"/>
    </onentry>
    <transition event="interal_event1"> <!-- T1 -->
      <send event="internal_event2"/>
    </transition>
    <transition event="interal_event2"/> <!-- T2 -->
  </state>

I understand such chaining may not be possible across the board.


      was (Author: rahul@apache.org):
    This is a combination of two things:

1) Document order priority -- so on entering s1 below, T1 wins:

  <state id="s1">
    <onentry>
      <send event="interal_event1"/>
    </onentry>
    <transition event="interal_event1"/> <!-- T1 -->
    <transition event="interal_event1"/> <!-- T2 -->
  </state>

2) Commons SCXML processes all "generated" events (includes implicit events and <send>
usages such as above etc.) in the same subsequent microstep. Therefore, both transitions in
your example become candidate transitions and the first in document order wins.

Behavior in (2) is open to interpretation of the spec ATM, but interim, you may be able to
"chain" your transitions to tease apart the two internal_events into their own microsteps,
i.e.

  <state id="s1">
    <onentry>
      <send event="interal_event1"/>
    </onentry>
    <transition event="interal_event1"> <!-- T1 -->
      <send event="internal_event2"/>
    </transition>
    <transition event="interal_event1"/> <!-- T2 -->
  </state>

I understand such chaining may not be possible across the board.

  
> Error on resolving conflicting transitions for compound states
> --------------------------------------------------------------
>
>                 Key: SCXML-52
>                 URL: https://issues.apache.org/jira/browse/SCXML-52
>             Project: Commons SCXML
>          Issue Type: Bug
>    Affects Versions: 0.6
>            Reporter: Ingmar Kliche
>             Fix For: 0.7
>
>
> There seems to be a problem on the resolution of conflicting transitions for compound
states. See the following scxml document:
> <scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initialstate="s1">
>     <datamodel>
>         <data name="x"/>
>     </datamodel>
>     
>     <state id="s1">
>         <initial>
>             <transition target="s11"/>
>         </initial>
>         
>         <transition event="event_1">
>             <assign name="x"  expr="'s1'"/>
>         </transition>
>        
>        <transition event="event_2" target="s1">
>             <assign name="x"  expr="'s1'"/>
>         </transition>
>         
>         <state id="s11">
>             <transition event="event_1">
>                        <assign name="x"  expr="'s11'"/>
>             </transition>
>            <transition event="event_2" target="s11">
>                        <assign name="x"  expr="'s11'"/>
>             </transition>
>         </state>
>     </state>
>     
>     <state id="s2" final="true" />
> </scxml>
> The state machine enters a compound state s1 which contains another state s11 as its
intitial state. Both states have transitions on event_1 and event_2. Note that event_1 has
no target, whereas event_2 has a target towards the same state.
> For event_2 everything works as expected, i.e. only the transition on state s11 is executed
and therefor s11 is reentered (I have a listener in my environment and can monitor this).

> The error occurs at event_1. On event_1 both transitions of s1 _and_ s11 are executed
- but only once. After this, the state machine gets stuck (in particular the currentStates-List
is empty). Any subsequent event will not cause any further action.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message