On May 28, 2009, at 10:37 AM, Vincent Massol wrote:
> Note that what I proposed doesn't work since it's not possible to
> register a component with 2 roles (for the same component instance)
> in plexus AFAIK. Thus you'd need 2 components: one for the listener
> and another one for the main business logic. Then the pb arises of
> how to pass information from one to another...
>
> Still looking for a simple solution to that (I have one but it's too
> complex). If you have any idea, shoot.
I spoke too fast. I think this solution could work:
@Component
DefaultMacroManager implements MacroManager
{
private Map macros;
public Macro getMacro(...)
{...}
public void registerMacro(...)
{...}
...
}
@Component("macro")
MacroManagerListener implements ObservationListener
{
@Requirement
MacroManager mm;
void onEvent(Event event)
{
mm.registerMacro(...);
...
}
The only "downside" is that it forces MacroManager (in our example) to
add a public method registerMacro which was not needed before. Is that
a problem?
Is there a better solution?
Thanks
-Vincent
> On May 26, 2009, at 10:19 PM, Vincent Massol wrote:
>
>> Hi,
>>
>> There's a pb with the current implementation:
>> When we get the Observation manager implementation and list the
>> registered listeners we only get the components that have been
>> initialized *before* we get the Observation manager component. Thus
>> if we want to be sure all listeners will receive events we need to
>> ensure they're loaded first. This is hard to do.
>>
>> I'm proposing instead to modify the observation module:
>>
>> * Modify EventListener to be a @ComponentRole
>> * Add List<Event> EventListener.getEvents() (the events that the
>> listener handles)
>> * Inject List<EventListener> in DefaultObservationManager. Thus
>> when the Observation Manager is looked up, all listener components
>> are created and injected.
>> * Keep add/removeListener in ObservationManager so that listeners
>> can be manually added/removed (for ex if a new listener component
>> is added dynamically in the system) but with following signatures:
>> - addListener(EventListener);
>> - removeListener(EventListener);
>>
>> WDYT?
>>
>> Thanks
>> -Vincent
>>
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs