[Zope] Transaction in zodb

Sin Hang Kin kentsin@poboxes.com
Sun, 18 Jun 2000 00:48:16 +0800


Hi,

Is transaction build in of ZODB? I have a product which keep a counter
property and a inc method which will increase the property with a integer
amount. I would like to make sure that concurrent inc call will not cause
problem. Is ZODB automatically do transaction and prevent corrupt of data?

My class is like this:

class Cid(
    OFS.SimpleItem.Item,   # A simple Principia object. Not Folderish.
    Persistent,            # Make us persistent. Yaah!
    Acquisition.Implicit,  # Uh, whatever.
    AccessControl.Role.RoleManager # Security manager.
    ):
    """Cid object.

    Keep an integer value and provide an way to inc it.
    """

    meta_type = 'Cid' # what do people think they're adding?

    manage_options = ( # what management options are there?
 {'label': 'Edit',       'action': 'manage_main'},
 {'label': 'View',       'action': ''}, # defaults to index_html
 {'label': 'Security',   'action': 'manage_access'},
        )

    __ac_permissions__=( # what permissions make sense for us?
 ('View management screens', ('manage_tabs','manage_main')),
 ('Change permissions',      ('manage_access',)           ),
 ('Change Cid'     ,     ('manage_edit',)             ),
 ('View Cid',            ('',)                        ),
 )

    def __init__(self, id, title='', initval=0):
        """initialise a new instance"""
        self.id = id
        self.title = title
        try:
            self.counter = int(initval)
        except:
            self.counter= 0

    def inc(self, increment=1):
        """ inc counter """
        self.counter = self.counter+increment
        return

    def __repr__(self):
        '''aa'''
        return self.counter

    def __str__(self):
        ''' a '''
        return str(self.counter)

    def index_html(self):
        ''' return data '''
        return self.counter

    manage_main = HTMLFile('CidEdit', globals()) # Management Interface

    def manage_edit(self, title, counter, REQUEST=None):
        """does this really need a doc string?"""
        self.title = title
        try:
            self.counter = int(counter)
        except:
            pass
        if REQUEST is not None:
            return MessageDialog(
     title = 'Edited',
     message = "Properties for %s changed." % self.id,
     action = './manage_main',
     )

I add an object aaa of Cid and make the following call on dtml:

<dtml-call "aaa.inc()">
Counter is now : <dtml-var aaa>

How could I prevent aaa get updated after inc() is call?


Rgs,

Kent Sin
---------------------------------
kentsin.weblogs.com
kentsin.imeme.net