On Thu, Nov 24, 2011 at 13:58, Vincent Massol <[email protected]> wrote:

> Hi devs,
>
> Summary:
> ========
>
> I'd like to add the notion of Priority to Event Listeners. The reason is
> that in some cases it's important that some listeners execute before others.
>
> The problem at hand:
> =================
>
> Here's a typical use case: When receiving the ApplicationStartedEvent, we
> have lot of code that needs to initialize. Initialization order is
> important (you can compare it to run levels in OS): for example some init
> must happen after the Database initialization has happened.
>
> Note that another solution exists for this use case: some initializations
> could introduce their own events (such as a DatabaseStartedEvent) and other
> init could listen on those events instead of the generic
> ApplicationStartedEvent. However I can see several drawbacks to this:
> * it's less generic than the priority solution
> * it means creating more events
> * but more importantly it means that modules will have strong dependencies
> (at maven level) on each other whereas it's not necessary and shouldn't be
> the case. In our example use case: it means that inits that must happen
> after database is started will need to depend on oldcore (which is where DB
> is started ATM)
>
> Proposal:
> ========
>
> * Don't break backward compat in Observation module
> * Introduce a PrioritizedEventListener interface that adds a getPriority()
> method
> * Modify ObservationManager implementation to take into account priorities
> * In order to make it simple I propose to have only a single priority per
> Listener and not a priority per event supported by a given listener
>
> General Context
> =============
>
> To give some context here's what I'd like to do on the medium term:
>
> * Step 1: Introduce notion of priority in EventListeners
> * Step 2: Refactor XWiki init to use an EventListener on AppStarted with
> low priority
> * Step 3: Refactor wiki macros to use an EventListener on AppStarted with
> priority value lower than at step2
> * Step 4: Write an EventListener for the new UI Extensions with a priority
> value higher than the one of step2  <-- this is the initial goal that led
> me to make this proposal ;)
>
> WDYT?
>

Sounds good if not overkill for the goal.
An simpler alternative would be to have more than a single AppStarted
event, like there is more than one starting level in Linux.
Let say one level before XWiki, the one during, the one after ? is there so
many other use case ?


> Thanks
> -Vincent
>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Denis Gervalle
SOFTEC sa - CEO
eGuilde sarl - CTO
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to