• Remember Mailing List

  • Changes to object_implements on membrane trunk

    from rossp on Jun 23, 2009 04:18 AM
    On membrane trunk I've implemented the previously discussed changes to
    the object_implements index.
    
    The object_implements index used to use the ZCA to find out not only
    what interfaces an object provided, but what interfaces an object could
    be adapted to out to the second order (adapting two objects).  Providing
    this degree of magical awareness proved to be a large performance
    problem.
    
    As such, the object_implements index now uses special marker interfaces
    (ending in "Avail" by convention) to designate what membrane interfaces
    membrane content objects provide or can be adapted to.  IOW, the work of
    determining what membrane capabilities a membrane content object can
    provide is not shifted to the developer instead of the poorly performing
    code.
    
    When implementing a content object that directly provides a
    IMembraneQueryableInterface interface, be sure that object also provides
    the corresponding "I*Avail" marker interface.  When implementing an
    adapter that provides an IMembraneQueryableInterface interface, be sure
    that objects that can be adapted to the interface also provide the
    corresponding "I*Avail" marker interface.
    
    See the implements declaration of
    Products.membrane.examples.simplemember.SimpleMember for an example.
    
    If you can, I'd very much appreciate any testing against trunk before I
    roll up a release.  This is a significant enough change that I'd like to
    get some eyes on it before cutting a release just to make my life
    easier.  :)
    
    Ross