Addition:

* I'll also create a xwiki-component-multi module to hold the multiCM
implementations since otherwise if we have them in
xwiki-component-default, it means xwiki-bridge will be required by all
modules, including the rendering API module which is supposed to work
without the bridge in standalone mode for example.

If you have a better name for that new module please suggest.

Thanks
-Vincent

On Wed, Nov 25, 2009 at 3:56 PM, Vincent Massol <[email protected]> wrote:
> On Wed, Nov 25, 2009 at 3:06 PM, Vincent Massol <[email protected]> wrote:
>> Hi,
>>
>> I'm starting to work on this again. Compared to what was mentioned
>> below here are the changes I'm bringing:
>>
>> * No need to modify the ComponentDescriptor to add a get/setAdditionalData
>> * Addition of a new ComponentManagerFactory.createComponentManager()
>> interface + EmbeddableComponentManagerFactory implementation
>> * The Wiki/User/All CM are now independent of the underlying
>> implementation (abstracted away by ComponentManagerFactory)
>
> Change of plan: I'm now no longer planning to modify what's below and
> thus it will stay as it is now:
>
>> * Move EmbeddableComponentManager class to the internal package (ie
>> make it non public)
>> * Expose ComponentAnnotationLoader in the documentation
>>
>> The old way to initialize XWiki components:
>>
>> EmbeddableComponentManager ecm = new EmbeddableComponentManager();
>> ecm.initialize(classLoader);
>>
>> The new way:
>>
>> ComponentManagerFactory factory = new EmbeddableComponentManagerFactory();
>> ComponentAnnotationLoader() cal = new ComponentAnnotationLoader();
>> cal.initialize(factory.createComponentManager(), classLoader);
>>
>> This is cleaner since it spearates the creation of the CM from the
>> loading of components. For ex it's possible to not load components
>> from annotations and instead use CM.registerComponent(...).
>
> Thanks
> -Vincent
>
>> Please shout quickly if there's something you don't like since I'm
>> working on implementing this as you read it... :)
>>
>> Thanks
>> -Vincent
>>
>> On Tue, Sep 8, 2009 at 8:28 AM, Vincent Massol <[email protected]> wrote:
>>> Hi,
>>>
>>> We have the need to isolate groups of components. For ex a wiki macro
>>> created in a subwiki should only be visible in that subwiki by default.
>>>
>>> Here's an implementation proposal that I'm planning to implement:
>>>
>>> * There's a Root Component Manager (the current CM)
>>> * There are 3 components which implement the ComponentManager role and with
>>> 3 hints: "wiki", "user" and "all". There's a CompositeComponentManager class
>>> that allows chaining CM and the "all" CM chains the "default" (root CM),
>>> "wiki" CM and "user" CM. This works the same as with the configuration
>>> module.
>>> * Other components can have CMs injected as they want (if not specified then
>>> it's the default, etc). For ex:
>>>
>>> @Requirement("all")
>>> private ComponentManager cm
>>>
>>> * Creation process. As for now the user creates the root CM and then the
>>> annotation loader will create the descriptors for the other CMs and register
>>> them against the root CM. They'll get instantiated once (singleton) the
>>> first time they're looked up.
>>> * In order to register a component for, say, a given "enterprise" wiki, we
>>> need to add a new property to the ComponentDescriptor:
>>> get/setAdditionalData(Object data). For example: wikiCM.registerComponent(CD
>>> mycd) where cd.setAdditionalData("enterprise").
>>> * Last, Guice uses Modules to isolate component definitions so it should be
>>> possible and relatively easy to port the implementation to Guice (even
>>> though Guice uses static Modules we can make them dynamic).
>>>
>>> WDYT?
>>>
>>> Thanks
>>> -Vincent
>>>
>>>
>>
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to