On Thu, Nov 26, 2009 at 08:55, Vincent Massol <[email protected]> wrote:
> 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.

Well "xwiki-component-multi" looks like "the module adding the multi
CM concept" which is not true. What about xwiki-component-context
(provide context based CMs) or xwiki-component-tools (a bunch of CM
tools that are one abstraction level above CM module) ?

>
> 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
>



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to