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.