[Zope-dev] zope.component.zcml and global registry

Tres Seaver tseaver at palladion.com
Mon Mar 8 13:58:12 EST 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Roger wrote:
> Hi Tres
> 
>> Betreff: Re: [Zope-dev] zope.component.zcml and global registry
>>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Baiju M wrote:
>>> On Mon, Mar 8, 2010 at 9:18 PM, Fabio Tranchitella 
>> <kobold at kobold.it> wrote:
>>>> * 2010-03-04 20:51, Fabio Tranchitella wrote:
>>>>> Committed with tests.
>>>> If nobody objects, I would like to release a new (bugfix) 
>> release of 
>>>> zope.component with the current trunk. This is the relevant entry 
>>>> from the CHANGES.txt file:
>>>>
>>>> - The ZCML directives provided by zope.component now register the 
>>>> components in  the registry returned by getSiteManager 
>> instead of the global registry.
>>>>  This allows the hooking of the getSiteManager method 
>> before the load 
>>>> of a  ZCML file to register the components in a custom registry.
>>> Is this a feature release ?
>> It seems arguable either way to me:  the old behavior 
>> (forcibly populating the global registry instead of the 
>> hooked registry) could easily be construed as a bug.
> 
> Probably you have a very different point of view to this
> changes. Let me explain what I think about that.
> 
> We have two kind of registries in zope a global/non persistent
> and local/persistent in local sites. The setSite hooks forces
> to set the right context for component lookup.
> Note, I mean component lookup, and not component registry lookup
> or register components!
> 
> ZCML based configuration actions are not persistent and can't
> get registered in a local component registry. This is the 
> reason why we didn't use the hooked getSiteManager method
> for this configuration actions.
> 
> What this changes really does is, it allows to 
> set a site which forces to use another site manager
> which contains a different component registry. I don't
> think setup another site is the right concept to use
> another component registry. Probably there should be 
> an explicit call for the IComponents utility in this case.
> 
> btw, if you like to register actions for another registry
> then the global registry, there is a concept implemented in
> z3c.baseregistry. It does exactly what the changes forces
> to do without the possible sideeffect of register non peristent 
> actions in a local persistent component registry.
> With some lines of ZCML every action could register
> it's handler to such another global component registry.
> 
> e.g.
> <utility
>   component="my.global.Registry"
>   provides="zope.component.interfaces.IComponents"
>   name="other"
>   />
> <zope:registerIn registry="my.global.Registry">
>   <!-- include your ZCML here -->
> </zope:registerIn>
> 
> Now, if your site provides the 'other' IComponents utility,
> your fine and you will get what you need.
> 
> This concept explicit allows to register components in a
> component registry and does not invoke a running application
> in any way.
> 
> 
> In my point of view, this changes/feature is implemented as simple as
> possible and not done right.
> 
> If you configure a system during startup, in our case with ZCML actions,
> it's really not a good idea to change the running system itself for make
> this possible.
> 
> Another point, reloading ZCML actions after a system startup
> e.g. from the UI is probably not possible anymore. Then we whould
> have to call setSite(None) and this, on a running system, whould
> force to loose the local components registry at the same time.
> 
> 
> But anyway, if nobody objects I'm fine with this changes. I just like
> to make sure everybody really knows the sideeffects of this changes
> and hope we're not having problems later with this feature.

The Highlander model ("there can be only one") for ZCML-configured
non-persistent component registries is self-limiting.  BFG is an
existence proof that multiple non-persistent registries, each configured
via ZCML, can work and be useful:  it allows us to run multiple,
unrelated apps within a single process, without mingling their
configurations.  Note that BFG doesn't use persistent registries at all.



Tres.
- --
===================================================================
Tres Seaver          +1 540-429-0999          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkuVSL4ACgkQ+gerLs4ltQ5HxwCgp9melxb/ZBAer7nPOhh1Lo0b
OhsAn0pxFprn3GlC740+pjNSdbNhkHh9
=b3kb
-----END PGP SIGNATURE-----



More information about the Zope-Dev mailing list