My current favorite pattern is a single read-only context per app (this gives very good read performance, especially when combined with LOCAL_CACHE cache strategy), and short-scoped per user contexts for editing (short scoped can mean different things in different apps I guess, depending on whether you need to carry over uncommitted state between requests, etc.)
Andrus On Feb 16, 2011, at 4:17 PM, Michael Gentry wrote: > Hi Christian, > > You'll typically have at least one context-per-user. (Not always, but > typically.) The patterns we use here are to have a thread-based > context-per-user and also separate (peer or child) contexts on our > edit pages. This lets us isolate the edit changes in a different > context (and wire the UI directly to the underlying Cayenne object) > and we are able to throw the context away without polluting the main > thread-based context when needed (such as when there are validation > errors and the user cancels instead of fixing them). This approach > keeps unexpected modified objects from floating around in our > thread-based context that might later get committed when we didn't > want them. > > mrg > > > On Wed, Feb 16, 2011 at 5:18 AM, Christian Grobmeier > <grobme...@gmail.com> wrote: >> Thanks Andrey, >> this helped. >> Christian >> >> On Wed, Feb 16, 2011 at 10:56 AM, Andrey Razumovsky >> <razumovsky.and...@gmail.com> wrote: >>> Hi Christian, >>> >>> In case of Web application it is incorrect to have one ObjectContext, >>> because you can't really know which session added certain changes, so >>> you'll be facing tons of multithreading issues, e.g. one session will >>> commit other session's partial changes. Common way is to have one >>> context per session, and for easy access to it having it bound to your >>> servlet's thread. See >>> http://cayenne.apache.org/doc30/web-applications.html >>> >>> Hope that helps, >>> Andrey >>> >>> 2011/2/16 Christian Grobmeier <grobme...@gmail.com>: >>>> Hello, >>>> >>>> sorry, a dumb question: >>>> >>>> do I need a ObjectContext per thread or per app? >>>> >>>> In fact I wrote a spring bean (its a singleton) which creates one >>>> single ObjectContext for all my app. In other terms, multiple threads >>>> will use it to insert, read, commit etc. >>>> Since ObjectContext offers the commit method, I am now doubting if >>>> this was correct. I feel it might be good to have an ObjectContext for >>>> each thread/user. Or does the ObjectContext know what happened as one >>>> transaction? >>>> >>>> Can you advise? >>>> >>>> Thanks >>>> Christian >>>> >>>> -- >>>> http://www.grobmeier.de >>>> >>> >>> >>> >>> -- >>> Andrey >>> >> >> >> >> -- >> http://www.grobmeier.de >> >