I'm in the process of evolving a DB and have come across an issue where
the zope.app.broken classFactory isn't being used, hence broken objects
come back as Pc
PersistentBroken rather than zope.app.broken.Broken.

The installBroken handler takes care of the logistics in monkey patching
the ZODB.DB object's classFactory function when an IDatabaseOpened event
is emitted, however a reference to the original ZODB.DB.classFactory is
held by the ObjectReader created by the ZODB.Connection object when
zope.app.appsetup.bootstrap.bootStrapSubscriber is called upon a
IDatabaseOpened event.

The problem is that zope.app.zcmlfiles includes zope.app.appsetup before
zope.app.broken and so when an IDatabaseOpened event is emitted a
reference to original classFactory is held by the ObjectReader before
the DB.classFactory can be patched with the zope.app.broken classFactory.

Of course modifying zope.app.zcmlfiles.configure.zcml to include
zope.app.broken before zope.app.appsetup fixes the problem.

Seems odd for this to been an oversight so thus the question, I doing
something wrong here?

-Michael Dove
Zope3-users mailing list

Reply via email to