I'm sporadically getting the following error thrown as a result of a routine I've written.
InvalidObjectReference: Attempt to store a reference to an object from a separate connection to the same database or multidatabase.
I can often run this routine several times without a problem. After a fresh Zope (re)start, this error never happens on the first run. Once the problem does occur I need to restart Zope to make it go away.
Can anyone tell me what this error actually means, and what bad practices could cause it?
I've found a couple of hits about "InvalidObjectReference: Attempt to store an object from a foreign database connection error" in the archives, but I don't know how close this is to my problem.
An example traceback would be:
2006-11-08T16:47:49 ERROR Zope.SiteErrorLog http://localhost:8080/WebSites/dev/test1/manage_publish
Traceback (innermost last):
Module ZPublisher.Publish, line 115, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 41, in call_object
Module Products.DWT.WebBase , line 756, in manage_publish
Module Products.DWT.WebBase, line 724, in manage_publish
Module OFS.CopySupport, line 564, in _getCopy
Module transaction._manager, line 110, in savepoint
Module transaction._transaction, line 295, in savepoint
Module transaction._transaction, line 292, in savepoint
Module transaction._transaction, line 675, in __init__
Module ZODB.Connection, line 1012, in savepoint
Module ZODB.Connection, line 526, in _commit
Module ZODB.Connection, line 553, in _store_objects
Module ZODB.serialize, line 407, in serialize
Module ZODB.serialize, line 416, in _dump
Module ZODB.serialize, line 341, in persistent_id
InvalidObjectReference: Attempt to store a reference to an object from a separate connection to the same database or multidatabase
I'm only dealing with one ZODB, so perhaps this is a multiple connection issue (although I have no idea how/why).
In case it helps to know the context of the problem, I have a collection of objects I've written:
1) WebSite, based on OrderedFolder
2) WebSection, based on OrderedFolder
3) WebPage, based on ZopePageTemplate
4) WebImage, based on Image.
Each of these classes inherit a common base of functionality from a WebBase class. The manage_publish() method, defined in WebBase, copies the current object (one of #'s 2-4) to the same relative path within the context of another WebSite. This gives me a basic "dev" to "live" publishing process.
Perhaps the most complex part of this routine is its ability to recurse. For example, a WebPage on the dev WebSite will first call its parent WebSection's manage_publish() if the parent WebSection doesn't exist on the live WebSite.
Other things do happen during the process which might be causing this InvalidObjectReference, but if I can get a grip on what kinds of programming offenses causes this exception then I can make a more educated review of my code. I will happily provide a copy of the source if anyone is interested or thinks it will be useful.
Thank you for any help or advice!
_______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )