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

Dan Haywood updated ISIS-779:
-----------------------------

    Description: 
Originally this ticket was raised as a bug to the effect that "EventBus should 
not re-register services on open/close; this is not thread-safe."

Subsequent analysis shows that isn't actually the case; the current design is 
thread-safe.

How it works is that, although EventBusServiceDefault is application-scoped, 
the guava EventBus itself is obtained from the PersistenceSession, ie is in 
effect for the session.

It would however be preferrable to convert EventBusService(Default) into a 
request-scoped, and then having it simply new up the guava EventBus each time.  
The only real issue is the ordering of the service injection; the domain 
services do a reverse callback to the EventBusService in the setterXxx() / 
injectXxx()
; there might be ordering issues.


  was:
Either it remains as a application-scoped service and registers all other 
services once (eg in the @PostConstruct init), or alternatively it should 
become a request-scoped service.  The former of these is probably the better.

In addition, the EventBus instance (currently part of IsisTransaction) could 
instead be owned by the EventBusServiceDefault service.




> Refactor EventBusService as a @RequestScoped service, and have it own the 
> guava EventBus as a field.
> ----------------------------------------------------------------------------------------------------
>
>                 Key: ISIS-779
>                 URL: https://issues.apache.org/jira/browse/ISIS-779
>             Project: Isis
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: core-1.4.0
>            Reporter: Dan Haywood
>            Assignee: Dan Haywood
>            Priority: Critical
>             Fix For: core-2.0.0
>
>
> Originally this ticket was raised as a bug to the effect that "EventBus 
> should not re-register services on open/close; this is not thread-safe."
> Subsequent analysis shows that isn't actually the case; the current design is 
> thread-safe.
> How it works is that, although EventBusServiceDefault is application-scoped, 
> the guava EventBus itself is obtained from the PersistenceSession, ie is in 
> effect for the session.
> It would however be preferrable to convert EventBusService(Default) into a 
> request-scoped, and then having it simply new up the guava EventBus each 
> time.  The only real issue is the ordering of the service injection; the 
> domain services do a reverse callback to the EventBusService in the 
> setterXxx() / injectXxx()
> ; there might be ordering issues.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to