[ 
https://issues.apache.org/jira/browse/ISIS-1045?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14379467#comment-14379467
 ] 

Dan Haywood commented on ISIS-1045:
-----------------------------------

The issue with Guava event bus queueing events has been tackled in ISIS-1028.  
Because it isn't possible to change guava's behaviour, we now also support the 
Axon Simple Event Bus (implemented in that ticket).

As for this ticket, pertaining to the use of a threadlocal as a mechanism for 
passing an event between different phases, we've decided to get rid of the 
threadlocal and just reuse the same event from EXECUTING to EXECUTED.  If there 
is a requirement to pass information from validating to executing, then use 
QueryResultsCache or the Scratchpad services.

> New domain events are created for each phase for properties, but not for 
> collections nor actions.  The current design doesn't support use of the 
> wrapper factory.
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: ISIS-1045
>                 URL: https://issues.apache.org/jira/browse/ISIS-1045
>             Project: Isis
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: core-1.7.0
>            Reporter: Dan Haywood
>            Assignee: Dan Haywood
>            Priority: Minor
>             Fix For: 1.9.0
>
>
> In the domain events design we have 5 phases: 
> hide/disable/validate/pre-execute/post-execute.  The framework attempts to 
> reuse the same event where possible
> for actions:
> - for hide, always creates new event
> - for disable, always creates new event
> - for validate, always creates new event, puts onto thread-local
> - for pre-execute, uses the event from validate (obtain from thread-local)
> - for post-execute, uses the event from pre-execute (passed as local var).
> for collections:
> - ditto
> but for properties, although we originally had the same algorithm, this was 
> changed (patch from Oscar) to:
> - for hide, always creates new event
> - for disable, always creates new event
> - for validate, always creates new event, puts onto thread-local
> - for pre-execute, always creates a new event (ignores that on thread-local)
> - for post-execute, uses the event from pre-execute (passed as local var).
> The reason that Oscar needed this change was because the framework does not 
> anticipate there being more than one "pending" interaction.  However, if the 
> wrapper factory is used, then this assumption isn't true, because validateX() 
> -> wrap -> validateY().  
> This use case actually needs a stack of pending interaction events to support 
> this change.
> As things stand:
> * the getUserData() functionality is broken for property domain events
> * the underlying problem remains for actions -> actions using the wrapper 
> factory during the validate phase.
> There is also a suggestion that the Guava event bus might be an issue in that 
> it buffers changes; I'm not exactly sure what this means (we don't use the 
> async guava bus), and I don't know if its behaviour is significant or not.    
>  But in any case, the above design defect is an issue irrespective and which 
> needs addressing; once that's fixed then we can look at the Guava event bus 
> to decide if it is also a problem for us or not.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to