Re: Leak-free context - requesting feedback

From: Tore Halset (halse..vv.ntnu.no)
Date: Tue Nov 14 2006 - 11:46:18 EST

  • Next message: Andrus Adamchik: "Fwd: Server migration heads up"

    Hello.

    +1 (move to cayenne and make it default behaviour)

    This is a realy good idea. It should improve situations with a
    context bound to a session as well. We need to have a pretty long
    session timeout so this improvement should be significant.

    I see that you have created a pluggable QueryCache. As discussed
    before we should also create a DataRowStore equivalent with a
    pluggable caching solution. I think you mentioned that this store
    should cache DataObjects instead of DataRows, so I do not know where
    to start :)

      - Tore.

    On Nov 14, 2006, at 16:02, Andrus Adamchik wrote:

    > As we all know, DataContext doesn't clean up unused registered
    > objects on an assumption that the entire DataContext has a finite
    > lifespan and will be garbage-collected eventually.
    >
    > In my session-less web application I am using an app-scoped read-
    > only DC shared by all requests. Sure enough it leaks memory, given
    > a big enough database. In the past we solved this problem by
    > periodically replacing a shared instance of DC with a new one.
    > Since this approach intrerfered with the caching mechanism and
    > generally seemed dirty, the other day I implemented a self-cleaning
    > ObjectStore based on commons-collections ReferenceMap:
    >
    > class LeakFreeObjectStore extends ObjectStore {
    >
    > public LeakFreeObjectStore(DataRowStore dataRowCache) {
    > super(dataRowCache);
    > objectMap = new ReferenceMap(AbstractReferenceMap.HARD,
    > AbstractReferenceMap.WEAK);
    > }
    > }
    >
    > Note that I couldn't use LRUMap, as we can't unregister objects
    > that are referenced by other application objects, so instead I used
    > weak references to cleanup otherwise unreferenced instances. Been
    > watching this in production for a day and it works perfectly.
    >
    > Now the question is whether we want this behavior as a default (or
    > as an option) for the DataContext? In other words should I move
    > this fix to Cayenne? (I will have to modify it to create hard
    > references to the dirty objects as we can't deallocate those even
    > if they are not referenced in the app).
    >
    > I'd say yes, but I was wondering if premature garbage collection of
    > registered objects is bad for any reason? Thoughts?
    >
    > Andrus
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Tue Nov 14 2006 - 11:47:44 EST