Re: Thread safety and Cayenne ( & Tapestry)

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Fri Sep 29 2006 - 10:11:36 EDT

  • Next message: Øyvind Harboe: "Re: Thread safety and Cayenne ( & Tapestry)"

    DataContext is not thread-safe, as it is intended for access by a
    single user.

    DataDomain and the rest of the stack underneath the DataContext is
    thread-safe.

    If a there is a chance of multiple threads belonging to the same user
    to access the context (and its DataObjects) simultaneously, you'll
    have to synchronize manually.

    Andrus

    On Sep 29, 2006, at 9:46 AM, Øyvind Harboe wrote:

    > Where can I read more about Cayenne and behaviour of objects when
    > accessed from multiple threads simultaneously?
    >
    >
    > We've screwed up a bit(how much I need to find out :-) when using
    > Tapestry + Cayenne, but things work surprisingly well even so. That
    > things appear to work fine is perhaps the scariest thing. I'd rather
    > they'd break immediately.
    >
    > Basically we have multiple threads accessing/modifying a list of
    > CayenneDataObjects.
    >
    > The problems started in our Visit object implementation in Tapestry:
    >
    > class Visit
    > {
    > public List getFoo()
    > {
    > if (list==null)
    > {
    > List l=someCayenneQuery();
    > Thread.sleep(5000); // (A)
    > list=l;
    > }
    > return list;
    > }
    > }
    >
    >
    > Several problems:
    >
    > - There is a race condition. Context switch at (A) and a subsequent
    > getFoo() invocation will will cause any number of someCayenneQuery()
    > method calls thus each thread may be operating on a different list of
    > objects.
    > - Items might be added/removed from multiple threads. A simple
    > LinkedList() is not thread safe, what about something returned from a
    > Cayenne query?
    >
    > - How will a CayenneDataObject respond to multiple threads
    > modifying properties?
    >
    > - How will a CayenneDataObject respond to multiple threads reading
    > properties?
    >
    >
    > Possible solutions for us that I'm pondering:
    >
    > - Read up more on Cayenne to understand the threading model better.
    > Multiple threads reading/writing the same CayenneDataObjects may be
    > fine.
    > - I could single thread all modifications of the session/visit state.
    > - use serialization somehow to create and write back a copy of each
    > object per HTTP request.
    > - Does some framework which can be used with Cayenne & Tapestry exist
    > that can help me address the issues?
    > - Can I make my Tapestry application single threaded? (I believe the
    > answer is Bad Idea :-)
    >
    >
    > --
    > Øyvind Harboe
    > http://www.zylin.com
    >



    This archive was generated by hypermail 2.0.0 : Fri Sep 29 2006 - 10:11:45 EDT