Re: Configuring Caching 3.0M6

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Mon Jun 08 2009 - 06:21:14 EDT

  • Next message: Dave Lamy: "Group function support"

    On Jun 6, 2009, at 9:22 PM, Joe Baldwin wrote:

    > Question:
    > In a JSP webapp scenario with sessions, it appears that each session
    > gets its own ObjectContext (via getThreadObjectContext()). If this
    > is true, then, for example with an ECommerce site with a Product
    > abstraction, if one user queries Cayenne for a list of Products,
    > and then a second user makes the identical request are there
    > ultimately two data objects created for each Product or just one
    > data object?

    > My expectation used to be that there was one data object for each
    > Product, but given my reading, it appears that there are two. If
    > there are two, and I really want just one, should I start
    > implementing some sort of query caching?

    It is up to you how you configure the context scope (application,
    session, request, or any other that makes sense in your app), and
    whether your app will or will not share the objects. Here is a bit of
    explanation on the common choices. Not sure if it will answer all your
    questions, but it seems like a needed prerequisite to this discussion.

    Each context has its own distinct set of objects (something you've
    observed), so users of different contexts will not see each other's
    changes until those are committed, and even worse, won't be able to
    edit the same uncommitted DataObjects in parallel (note that
    ObjectContext is thread safe, but DataObjects are not).

    In a read-only application (or read-only parts of the application) you
    can use a single shared ObjectContext (application scope). It will be
    thread-safe, fast and have a low memory footprint. If your application
    modifies data, you have to use dedicated contexts. The easiest
    scenario is one per session, however there are some variations. E.g.
    to improve concurrency and reduce memory use, you can use one context
    per request, or even one per single data modification. You can also
    combine a single shared "read-only" and dedicated read-write contexts
    created on the spot... Again, using a session context is a reasonable
    default, but from there you need to analyze your application needs and
    make a decision on an appropriate config.

    Andrus



    This archive was generated by hypermail 2.0.0 : Mon Jun 08 2009 - 06:21:54 EDT