You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Daniel Schwager (JIRA)" <ji...@apache.org> on 2008/07/17 22:45:31 UTC

[jira] Updated: (SCXML-78) scxml-listener will not process in a defined order (problem: SCXMLExecutor.addListener based on Set)

     [ https://issues.apache.org/jira/browse/SCXML-78?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Schwager updated SCXML-78:
---------------------------------

    Attachment: scxml-sorted-listeners.diff

A patch agains NotificationRegistry.java replacing some Sets to LinkedHashSets

The patch works for me (-:

Thx
Danny

> scxml-listener will not process in a defined order (problem: SCXMLExecutor.addListener based on Set)
> ----------------------------------------------------------------------------------------------------
>
>                 Key: SCXML-78
>                 URL: https://issues.apache.org/jira/browse/SCXML-78
>             Project: Commons SCXML
>          Issue Type: Improvement
>    Affects Versions: 0.8
>            Reporter: Daniel Schwager
>            Priority: Minor
>         Attachments: scxml-sorted-listeners.diff
>
>
> On 7/11/08, Daniel Schwager <Da...@dtnet.de> wrote:
> > Hi Rahul,
> >
> >  i'm running in a problem: i add two listeners to my SCXMLExecutor instance
> >         - the first one should run some business-methods using reflection (like you do in your watchclock-example)
> >         - the second one should check the current state and maybe trigger some other fsm's
> >
> >  The order of execution of the listeners is important, because
> >   - FIRST I want to process the business-methods  and
> >   - SECOND I want to inform other compontents of reaching+processing of business-methods is done
> >
> >  Your implementation of remember the listeners based on java.util.Set - the order in a
> >  Set is not defined (because it's not an ordered element) - so, regardless of the sequence
> >  Of adding my two listeners, your code executes the listeners in the wrong order (-:
> >
> >  Did I miss something or is this a feature request ?
> >
> <snip/>
> In terms of the philosophy behind that piece of code, listeners
> shouldn't depend on the order in which they are invoked. Its possible
> to think about the scenario you describe as being only one listener,
> which you've broken up into two based on some usecase for convenience.
> However, in terms of implementation, its good to have predictable
> order. So while I still wouldn't recommend listeners that depend on
> order (earlier ones could have failed, its not a pipeline or a chain,
> various issues), lets make things predictable.
> Please open an improvement request in JIRA (and you can attach a patch
> [1] if you'd like, its probably not more than a line or two close to
> the bits you've identified below -- we'd want a LinkedHashSet, not a
> Vector).
> -Rahul
> [1] http://commons.apache.org/patches.html
> >  Regards
> >  Danny
> >
> >
> >
> >  SCXMLExecutor:
> >    public void addListener(final SCXML scxml, final SCXMLListener listener) {
> >         Object observable = scxml;
> >         scInstance.getNotificationRegistry().addListener(observable, listener);
> >     }
> >
> >
> >  NotificationRegistry
> >    private synchronized void fireOnEntry(final Object source,
> >             final TransitionTarget state) {
> >
> >  // ***** SET !!! not a Vector ..
> >         Set entries = (Set) regs.get(source);
> >  // ***** SET !!! not a Vector ..
> >
> >         if (entries != null) {
> >             for (Iterator iter = entries.iterator(); iter.hasNext();) {
> >                 SCXMLListener lst = (SCXMLListener) iter.next();
> >                 lst.onEntry(state);
> >             }
> >         }
> >     }
> >
> >  Viele Gruesse
> >
> >  Daniel Schwager
> >

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