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]

Reply via email to