Hi Andreas,
I'm using T5 + cayenne (2.x) right now.
1:
There are a variety of ways you could go about obtaining a data
context in your services.
1) You could use the Cayenne-supplied servlet filter and obtain the
thread-local copy of the context
2) You could use a RequestFilter to duplicate the functionality of the
Cayenne's servlet filter
3) You could write a ContextProvider service, which provides the
context.
In my case, I did a combination of 2 & 3. I use a request filter to
check associate a data context with a request + current thread,
(either on a session-by-session basis or on a request-by-request
basis). I also have a ContextProvider service which I inject into
other services (by specifying it as a parameter in the service's
constructor). Ultimately, my context provider grabs the (thread
local) context set by the request filter.
2:
I would advocate having a method like: getReadonlyContext() in your
context provider service, which would contain your single, app-wide
context. Then in your pages and components, you can @Inject your
ContextProvider and grab the context.
3: You can contribute ValueEncoders, PrimaryKeyEncoders, etc. into
tapestry to handle your data objects.
4: Cayenne handles transactions for you transparently, unless you
explicitly handle them yourself.
So, in general, you have your form; your form submits; you perform
your object manipulations, and then you dataContext.commitChanges();
and all of those object manipulations will be wrapped in a db
transaction.
Robert
On Mar 5, 2008, at 3/56:05 AM , Andreas Pardeike wrote:
Hi,
I have several T4 projects that use Cayenne successfully but now I
would
like to start a new project in T5. Though I think I got my head
wrapped
around the new IoC concept in T5, I still don't see the big picture.
Maybe someone can provide me with pointers to examples or simply
explain
how I would set up the following:
- My application *mostly* does data mining, that is, read-only
access to
a couple of databases
- At a few places, I would need to have write access but it's simple
and
probably does not need transaction management (i.e. allow customers
to
update their email address)
- In my old projects, I have a shopping basket that builds temporary
dao
objects until the user logs in. At that time, I merge those with the
actual dao's from the database
- At a single point in the app (submitting the order), I actually need
transaction management
- I would also love to go with Cayenne 3 and pojo dao's.
My questions:
1) How do I provide an DataContext/ObjectContext to my services? Is it
as simple as injecting a ContextProvider into the service
constructors?
2) Since I don't need transaction management most of the time, can I
simply
use a global ASO that has a DataContext/ObjectContext which I then
use
in my page classes if necessary?
3) How do I solve the serialization problem that arises when I
submit forms
that contain dao's?
4) How do I handle my submit order where I *do* need transaction
management?
Any help appreciated,
Andreas Pardeike
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]