Re: double-clicking and DataContexts bound to the HttpSession

From: Mike Kienenberger (mkienen..laska.net)
Date: Thu Feb 17 2005 - 15:36:57 EST

  • Next message: Koen Segers: "Extended class"

    Laszlo Spoor <lspoor_cayenn..otmail.com> wrote:
    > Would it be an option if you create a Collection of 'pending users' in the

    > ServletContext? If a user submits a request, you can add him to the
    pending
    > collection. If the email is sent, you can clear the user from that list.
    > This way you don't have to do any tricky stuff...

    Yeah, I could serialize all requests.

    I'm just trying to find a balance between persisting a DataContext (for
    performance) over a session and not having two requests attempting to use
    the same DataContext at the same time.

    It's looking more and more like I need to serialize any requests that share
    a DataContext.

    -Mike

    > >From: Mike Kienenberger <mkienen..laska.net>
    > >Reply-To: cayenne-use..bjectstyle.org
    > >To: cayenne-use..bjectstyle.org
    > >Subject: double-clicking and DataContexts bound to the HttpSession
    > >Date: Thu, 17 Feb 2005 15:04:40 -0500
    > >
    > >I just had a non-fun event.
    > >
    > >One of our web users resubmitted a form while applying for an account.
    > >
    > >What happened was that the first submit paused 30 seconds while sending
    out
    > >an email message.
    > >I send out an activation message before I commit a new account creation.
    > >However, the impatient user clicked submit again after 10 seconds,
    starting
    > >the process a second time.
    > >
    > >So the 2nd request goes through, adds a second user object (along with
    > >second copies other garbage) to the context, sends the email without
    > >incident (obviously it was a temporary network timeout on the first
    > >request), then commits both the first and second set of each object.
    > >
    > >Then the first request recovers, and commits, but now has an empty
    > >DataContext.
    > >
    > >So now I'm trying to decide how to handle this.
    > >
    > >I can check in my getDefaultContext() if the DataContext is dirty and
    then
    > >return a new DataContext, but that doesn't really solve the problem. In
    > >that case, the 2nd request would have still created a second copy of the
    > >objects and commited only the second copy, and the first request would
    have
    > >still committed the first copy, so I'd still end up in the same
    situation.
    > >
    > >I can probably deal with this specific problem by detecting a
    double-click
    > >event and handling it differently.
    > >
    > >However, I'm now a little paranoid about sharing a DataContext within the
    > >same HttpSession. It never occurred to me before that two threads might

    > >be
    > >operating on the same HttpSession DataContext at the same time. Am I
    > >overlooking something?
    > >
    > >Do I need to somehow lock my DataContext on session request receive and
    > >unlock it on session response send? This is sounding depressingly like
    > >WebObjects 5.0/5.1 without the added safety of serialized access.
    > >
    > >Or maybe I just need to force all access to a session DataContext to be
    > >serialized.
    > >
    > >-Mike
    >
    > _________________________________________________________________
    > FREE pop-up blocking with the new MSN Toolbar - get it now!
    > http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/
    >



    This archive was generated by hypermail 2.0.0 : Thu Feb 17 2005 - 15:36:13 EST