[
https://issues.apache.org/jira/browse/SCXML-78?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rahul Akolkar updated SCXML-78:
-------------------------------
Fix Version/s: 0.9
Thanks, setting fix version to next release, v0.9.
> 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
> Fix For: 0.9
>
> Attachments: scxml-sorted-listeners.diff
>
>
> On 7/11/08, Daniel Schwager <[EMAIL PROTECTED]> 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.