Stephen, 1) What will the CM interface look like? I think you just end up back where you started...
2) what is the difference between ComponentRegistry and a ComponentSelector? 3) Could you go through Berin's use cases and show how this looks like from a component's point of view? It's nice and all, but: + We *still* have that CM interface there... Since that is all that the component will see, the ComponentRegistry/container part is hidden. /LS > -----Original Message----- > From: Stephen McConnell [mailto:[EMAIL PROTECTED]] > Sent: den 18 juni 2002 10:51 > To: Avalon Developers List > Subject: Re: [A5] CM Use Cases from real requirements > > > > Which implies the following: > > |-----------------------------------| > | container | > | | > | | creates |-----------| > | creates and prepares components | -------------> | component | > | using CM/SM which are private to | | | > | the container and the component | | | > | implementation | | | > | | | | > |-----------------------------------| | | > ^ | | > | uses container to | | > | create new components | | > v | | > |------------------------------------| |-----| | | > | ComponentRegistry |---->| CM |<--| | > | Serves component requests | |-----| | | > | | | | > | | query | | > | | <------------ | | > | | | | > | | service | | > | | -----------> | | > |------------------------------------| |-----------| > > > Stephen McConnell wrote: > > > > > > > Vadim Gritsenko wrote: > > > >>> From: Stephen McConnell [mailto:[EMAIL PROTECTED]] > >>> > >> > >> > >> <snip/> > >> > >> > >> > >>> In the context of Cocoon (which I don't know much about), > it appears > >>> that ECM is being used as an object repository. A > sitemap processor > >>> is basically invoking lookup on ECM to get the pre-configured > >>> components that it wants. From all of the discussion so far, it > >>> seems to me that ECM is serving these request out of the lookup > >>> operation - and I think this is breaking the thinking > pattern - and > >>> potential solutions. > >>> > >>> Let me explain: > >>> > >>> Imagine we design a modern, clean container. Imagine that the > >>> lookup operations is *never* exposed to anything but a component > >>> instance that has been instantiated by the container, and > to which > >>> the container has supplied a component manager. In this > situation, > >>> the component manager knows the classname of the component, know > >>> lookup labels based on the components meta-info, knows > the service > >>> to include in the supplied manager, can basically take care of > >>> everything to completely satisfy the component. HOWEVER, > how does > >>> the container serve request for components to a client? > >>> > >> > >> > >> Stephen, > >> > >> Let me correct you a bit before somebody else does :) > >> > > > > Given my knowledge of Cocoon and ECM - yep - I'm open to > > corrections: > > > > :-) > > > >> > >> > >> Cocoon's sitemap processor *is* a component, managed by the > >> container, and instantiated by container, and provided > with component > >> manager by container. > >> > >> > > > > Mechanically - yes - but the very fact that ECM does not deal with > > dependencies means that component is responsible for component > > selection via a query (as distinct from Merlin/Phoenix where the > > container does the selection and handes the compoent only what it > > needs). > > > > Problem is that the semantic that are assumed in ECM are that the > > component > > under composition is free to ask for any service - which > means that the > > model of interaction is that the component being serviced > is acting as a > > client towards a component registry. In this model, restrictions to > > scalability are infurred by the expresssiness of the > repository lookup > > interface (in ECM the ComponentManager interface is being > used as the > > repository query interface). This is the important distinction. > > > > Workarounds to this include the ComponentSelector - enabling the > > client to > > enter into a finer-grain of selection semantics. As the application > > complexity grows, debate on additional parameters on the > lookup operation > > emerge as solutions to the problem. In fact, the problem > is that the > > manager is being used as a repository. If we can figure a way of > > breaking > > out of this usage pattern then life will become a lot easier. > > > > I sure the following will raise a torrent of objections, but its an > > example of seperating concerns: > > > > 1. Component manager check component type it is instantiating > > for its formal, contractual dependecies - if available, the > > the manager provides only these service in the service > > manager. > > > > 2. If the component implements composable/serviceable and no > > dependecies are declared - we can assume (a) its a broken > > component, or (b) its a component that is implicity > > requesting a component repository service. > > > > I.e. component composable imp: > > > > public void lookup( String role ) > > { > > ComponentRepository rep = (ComponentRepository)lookup( > > ComponentRepository.ROLE ); > > > > final String role = Something.ROLE; Query > > query = getQuery(); > > Object object = rep.query( role, query ); > > } > > > > Cheers, Steve. > > > > -- > > Stephen J. McConnell > > OSM SARL > digital products for a global economy > mailto:[EMAIL PROTECTED] > http://www.osm.net > > > > > -- > To unsubscribe, e-mail: > <mailto:avalon-dev-> [EMAIL PROTECTED]> > For > additional commands, > e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>