okay, i'll try again, with some code this time. i'm trying to use zodb to provide persistent store. after various permutations swiped from the howto, jim fulton's SPAM8 paper, and quick python, i've still got the same basic problem, with no clue what's wrong. so i've distilled it down to a small example. i've got a simple Person class, defined in Person.py: import Persistence class Person(Persistence.Persistent): """A Persistent Person""" def __init__(self, name, age): self.name = name self.age = age i can create a database and populate it by running a small script (not shown here). it works fine when run by hand. i've also got a file in $ZOPE/Extensions called Keepers.py: import ZODB, ZODB.FileStorage db = ZODB.DB( ZODB.FileStorage.FileStorage( 'TestDB.fs' ) ) connection = db.open() root = connection.root() def GetPeople( self ): "Return list of people in DB" people = [] for key in root.keys(): people.append( root[ key ] ) return people if __name__ == '__main__': for person in GetPeople( None ): print person.name, 'is', person.age, 'years old' i can run this by hand, and it works fine. so i create an External Method that points to GetPeople(). when i reference it in a DTML document, i get: Could not lock the database file. There must be another process that has opened the file. and a lengthy traceback: Traceback (innermost last): File /usr/local/src/Zope-2.1.4-src/lib/python/ZPublisher/Publish.py, line 214, in publish_module File /usr/local/src/Zope-2.1.4-src/lib/python/ZPublisher/Publish.py, line 179, in publish File /usr/local/src/Zope-2.1.4-src/lib/python/Zope/__init__.py, line 202, in zpublisher_exception_hook (Object: ElementWithAttributes) File /usr/local/src/Zope-2.1.4-src/lib/python/ZPublisher/Publish.py, line 165, in publish File /usr/local/src/Zope-2.1.4-src/lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: index_html) File /usr/local/src/Zope-2.1.4-src/lib/python/ZPublisher/Publish.py, line 102, in call_object (Object: index_html) File /usr/local/src/Zope-2.1.4-src/lib/python/OFS/DTMLDocument.py, line 166, in __call__ (Object: index_html) File /usr/local/src/Zope-2.1.4-src/lib/python/DocumentTemplate/DT_String.py, line 502, in __call__ (Object: index_html) File /usr/local/src/Zope-2.1.4-src/lib/python/DocumentTemplate/DT_In.py, line 633, in renderwob (Object: GetPeople()) File /usr/local/src/Zope-2.1.4-src/lib/python/DocumentTemplate/DT_Util.py, line 335, in eval (Object: GetPeople()) (Info: GetPeople) File <string>, line 0, in ? File /usr/local/src/Zope-2.1.4-src/lib/python/Products/ExternalMethod/ExternalMethod.py, line 239, in __call__ (Object: GetPeople) File /usr/local/src/Zope-2.1.4-src/lib/python/Products/ExternalMethod/ExternalMethod.py, line 195, in getFunction (Object: GetPeople) File /usr/local/src/Zope-2.1.4-src/lib/python/App/Extensions.py, line 205, in getObject (Info: ('/usr/local/src/Zope-2.1.4-src/Extensions/Keepers.py', 'Keepers')) File /usr/local/src/Zope-2.1.4-src/Extensions/Keepers.py, line 10, in ? File /usr/local/src/Zope-2.1.4-src/lib/python/ZODB/FileStorage.py, line 262, in __init__ File /usr/local/src/Zope-2.1.4-src/lib/python/ZODB/lock_file.py, line 101, in lock_file StorageSystemError: (see above) i've gotten this same message sometime when running by hand, typically when i called two routines in a row that each instantiated a ZODB.DB. so it appears that this has something to do with the DB object not being destroyed. but i don't know how to make this work. i've sanned the archives, and seen no similar complaint, so i assume others don't have this problem. any ideas why i do? -- Garry Hodgson Every night garry@sage.att.com a child is born Software Innovation Services is a Holy Night. AT&T Labs - Sophia Lyon Fahs