[Zope] Re: [Warning] Zope 3 component architecture (CA) not reliably usable for registrations from Python

Philipp von Weitershausen philipp at weitershausen.de
Wed Jan 10 09:40:51 EST 2007


Dieter Maurer wrote:
> I tried to use Zope3 events to get informed when requests start and end.
> 
> One of our modules (the interface module to "jpype") requires such
> a notification for reliable work. Therefore, it tried to register
> the corresponding subscriptions on import of this module.

That is an uncommon approach, at least it used to be. Typically, we 
first have a bootstrap level and then we register things. During the 
bootstrap level, the Component Architecture is initialized.

Things changed a bit after Zope 2.8/X3 3.0. Nowadays, the Component 
Architecture doesn't need any setup anymore and you can do registrations 
on import. I'd still recommend against that.

> Unfortunately, this works very unreliably -- for the following reasons:
> 
> 
>   The CA performs by itself only extremely minimal initialization.
>   Especially, it does not register the "Adapters" service, necessary
>   for the registration of event subscriptions.
> 
>   The full CA initialization is only performed quite late, in the call
>   to "Products.Five.initialize".
>   Event notification registration attempts before this time will fail
>   (with a "ComponentLookupError: 'Adapters'"), 
>   those performed after this time will succeed.
> 
> The "Five" initialization is stupid enough that it will fail
> when the service registration for 'Adapters' has already been performed.

That's because Five assumes it's responsible for the setup layer. I 
suggest to register components through ZCML. Five will pick up 
configure.zcml in products automatically *after* everything has been set 
up properly. That's the canonical way, at least in Zope 2.8/X3 3.0

> At the current state, event notifications can reliably only be defined 
> via ZCML. This is unfortunate for our use case where the registration
> should be bound to the import of a given module.

I typically find it quite magic when application policy things happen at 
import:

   Never mix mechanism with policy
     -- Brooks' Second Law of Software Reuse

Philipp


P.S.: I agree with Martijn, the big "warning" is uncalled for. You're 
just trying to fight the semantics of the framework.

-- 
http://worldcookery.com -- Professional Zope documentation and training
2nd edition of Web Component Development with Zope 3 is now shipping!



More information about the Zope mailing list