RE: optimistic locking?

From: Gentry, Michael (michael_gentr..anniemae.com)
Date: Tue Jun 08 2004 - 10:30:48 EDT

  • Next message: Andrus Adamchik: "Re: Cayenne in action"

    If I understood correctly, you expect Cayenne to automatically
    initialize 'version' to zero and, on each subsequent UPDATE, to
    automatically increment the value?

    If so, that is not what optimistic locking does (at least, I'm assuming
    Cayenne works the way EOF does in this regard, since I haven't had time
    to use the new optimistic locking features).

    Let's say you have a User table, with firstName, lastName, and
    favoriteColor fields (plus a primary key, but we don't really care about
    that), all of which are locking attributes:

    firstName: Mary
    lastName: Johnson
    favoriteColor: Red

    Then Mary gets married and changes her last name to "Jones" and you do a
    setLastName("Jones") on that record (after fetching it into memory, of
    course). When you save the changes, Cayenne should issue something like
    this:

    UPDATE User SET lastName = 'Jones'
    WHERE firstName = 'Mary' AND lastName = 'Johnson' AND favoriteColor =
    'Red' AND primaryKey = ...

    Basically, any attributes marked as used for locking are included in a
    WHERE clause with their previous values present. Also, only the
    attributes that changed values should be present in the SET clause.

    Be sure you do not use BLOBs as locking attributes! I'd even suggest
    having BLOBs in their own table.

    If you want to use a 'version' column, you can do that, but it'll
    probably be more manual on your part (initializing and incrementing
    yourself) and is less effective. When the original values are checked
    in the UPDATE clause, it helps ensure data integrity even when someone
    (production support) goes in and updates a DB value by hand (they'd most
    likely not update the 'version' column) or if there is another
    application which shares the DB and does updates and doesn't use all the
    nice Cayenne framework code you've written.

    Hope that helps.

    /dev/mrg

    -----Original Message-----
    From: Bill Dudney [mailto:bdudne..ac.com]
    Sent: Tuesday, June 08, 2004 5:58 AM
    To: cayenne-use..bjectstyle.org
    Subject: optimistic locking?

    Hi All,

    I would like to introduce a 'version' property on my objects and use it
    for optimistic locking.

    I modified my model to add optimistic locking (with the checkbox
    'Optimistic Locking' in the Entity tab) to each of my classes and
    specified which attributes in each was 'Used for Locking' (the version
    attribute).

    I expected Cayenne to automatically set the 'version' attribute to zero
    on initialization and then maintain its value with each commit. i.e.
    Create Foo, version = 0, update Foo version = 1 and I don't have to
    know or care about this version field. It did not so I initialize it to
    zero in the default constructor. Is this the expected usage?

    Thanks!

    -bd-



    This archive was generated by hypermail 2.0.0 : Tue Jun 08 2004 - 10:30:53 EDT