Hi Michel,
Here is our template: https://gist.github.com/frisco82/5058374
We are using a custom filter to bind a context per request.
And then with our template you have auto rollback with auto rollback on
errors (without losing exception info) and deadlock retries for mysql.
Also this template can be used for async task as if there is not context
bound to thread it just spans one using servlet config (you can change
it to your needs).
All this working with Spring without problems.
We still haven't found the need to use context per session (indeed that
caused a lot of problems also for us) or shorted lived context, but in
that case I would think in using child contexts instead of context.
The template still uses the old semantics of deleteObject/Objects
becouse it was based on another one I found somewhere for Cayenne 2.X
but we have been using it for several months and it is a great
improvement over messing with context in almost every method, before
this we didn't use the filter (nor Spring IoC but that's antoher story)
and there were contexts everywhere.
But anyway just try different options until you are sattisfied with one
Cayenne is really flexible so there is always a workaround to do the
same thing.
Ramiro
El 28/02/2013 17:12, Michael Gentry escribió:
Hi Ramiro,
I typically create web applications, so manually binding a single context
to the thread isn't really an option. I need to create them on an ad-hoc
basis for each user, etc.
Thanks,
mrg
On Thu, Feb 28, 2013 at 10:28 AM, Ramiro Aparicio <
ramiro.apari...@prot-on.com> wrote:
El 28/02/2013 16:15, John Huss escribió:
If it's a servlet app, then the runtime is created in CayenneFilter and
bound to the thread for each request and you access it via
WebUtil.getCayenneRuntime(**servletContext);
Or you can get a context from the injector if you have bound that to a
thread:
ObjectContext context =
CayenneRuntime.**getThreadInjector().**getInstance(**
ObjectContextFactory.class
).createContext();
If not a servlet app, then yeah, I'd just store it in a static variable or
application instance.
On Thu, Feb 28, 2013 at 8:43 AM, Michael Gentry <mgen...@masslight.net
wrote:
Is there an existing place (class) in 3.1 to stuff a ServerRuntime
instance
for global use or is it expected that you'll create a separate class to
hold a static instance variable of ServerRuntime?
Thanks,
mrg
We avoid storing it as a singleton and use the same concept for non web
apps using BaseContext
<http://cayenne.apache.org/**docs/3.1/api/org/apache/**
cayenne/BaseContext.html<http://cayenne.apache.org/docs/3.1/api/org/apache/cayenne/BaseContext.html>
**BaseContext.**bindThreadObjectContext(**context)||
context = BaseContext.**getThreadObjectContext()
So you usually just bind the context on startup and don't need to have
write your own singleton for that.
Indeed we made a DAO Template that works in both scenarios to be able to
reuse the dao library.