On Thu, Nov 26, 2009 at 12:20, Vincent Massol <[email protected]> wrote: > > On Nov 26, 2009, at 12:10 PM, Thomas Mortagne wrote: > >> On Thu, Nov 26, 2009 at 12:02, Vincent Massol <[email protected]> >> wrote: >>> >>> On Nov 26, 2009, at 11:52 AM, Thomas Mortagne wrote: >>> >>>> 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. >>> >>> Why is it not true? It's what it does (yes I know that technically >>> they are implemented as components implementing the ComponentManager >>> role and thus don't bring any new tech concept, but in practice they >>> do bring multi CM support to xwiki). >> >> Isn't ComponentManagerFactory part of the api ? > > Nope. I have moved it to "-multi" for that reason (in order to cleanly > separate the multi concept).
Then yes xwiki-component-multi is the right name, i understood it was just supposed to contain a list of specific CMs. And where is the implementation of ComponentManagerFactory ? xwiki-component-default depends on xwiki-component-multi ? > > Thanks > -Vincent > >>>> What about xwiki-component-context >>>> (provide context based CMs) >>> >>> I don't think we can understand what it means by looking at it. >>> >>>> or xwiki-component-tools (a bunch of CM >>>> tools that are one abstraction level above CM module) ? >>> >>> I find tools too generic. This module is about multi CM. Tools make >>> it >>> sound optional when it's not optional. For example the Wiki Macro >>> Bridge won't work without these. >>> >>> I still think "-multi" is the best suggested so far with "-context" >>> being my second choice. I also hesitated with "-isolation" and "- >>> realm" initially. >>> >>> Thanks >>> -Vincent >>> >>>>> 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

