Re: cayenne.datacontext - session attribute- question

From: Michael Gentry (mgentr..asslight.net)
Date: Sat May 23 2009 - 12:37:03 EDT

  • Next message: Joseph Wamicha: "Ant cgen task not working after following tutorial"

    It sounds like you are using the Cayenne Servlet Filter:

    http://cayenne.apache.org/doc/web-applications.html

    This filter creates (or reattaches) a DataContext in (or from) the
    user's session and attaches it to the current request thread. This is
    a convenience for applications that are heavily session-based. A
    DataContext itself is pretty lightweight, but it accumulates
    CayenneDataObjects (database records) over time if you don't empty it
    out. You may want to look at the invalidateObjects() or
    unregisterObjects() methods on the DataContext class:

    http://cayenne.apache.org/doc20/api/cayenne/org/apache/cayenne/access/DataContext.html

    Is it normal? Yes. Is it scalable? A harder question to answer, but
    you might have to be more careful with the way you access the database
    and track objects. Will it create problems with hundreds of sessions?
     Again, a harder question to answer. You can certainly use a
    session-based DataContext, but you might need to be more strategic in
    managing it and the memory footprint. Maybe you don't need a
    session-based one? Or maybe you don't need to keep as much stuff in
    the session-based one? If you only need to track objects during the
    request, you could create a new DataContext and use it only during the
    request and then it (and the database records it loads) won't be
    stored in the session and will be garbage collected at the end of the
    request. You might also need to reset the session one to be an empty
    one. Essentially you'd create a new DataContext and replace the old
    and potentially bloated one with the empty one. Look at:

    http://svn.apache.org/repos/asf/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/WebApplicationContextFilter.java

    and

    http://svn.apache.org/repos/asf/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conf/ServletUtil.java

    To see how Cayenne stores the DataContext in the session and the key
    it uses for the session.

    mrg

    On Sat, May 23, 2009 at 11:32 AM, Devyandu <devyand..mail.com> wrote:
    > Hi,
    > I am using cayenne 2.04 with tomcat 5.5.
    > Recently I started using a software called lambda probe, which is a tomcat
    > analysis tool.
    >
    > I see that all my user sessions have an attribute called cayenne.datacontext,
    > which has object of size (between 700K and 1MB) and type
    > org.apache.cayenne.access.DataContext.
    >
    > This seems to be something that Cayenne creates and manages because I do not
    > create this session attribute.
    >
    > 1. Is this normal?
    > 2. Is this scalable?
    > 3. Will it create problems if I have hundreds of sessions ?
    > 4. In my struts actions/jsp, I get the context like this - DataContext
    > context = DataContext.getThreadDataContext();. Is this OK?
    >
    > Thanks,
    > Devyandu
    >



    This archive was generated by hypermail 2.0.0 : Sat May 23 2009 - 12:37:38 EDT