I'll do one better a little later today (or possibly tomorrow): I'll clean up my code and package it as a standalone "cayenne integration" module.

Cheers,

Robert

On Mar 5, 2008, at 3/53:05 PM , Borut Bolčina wrote:

+1 good carma if you share points 2 and 3. ;-)

Cheers,
bob

2008/3/5, David Marko <[EMAIL PROTECTED]>:


Can you share some code example of the integration?

Thanks,
David




Robert Zeigler wrote:

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]





--
View this message in context:
http://www.nabble.com/T5%3A-Examples-for-Cayenne-integration--tp15848762p15860055.html
Sent from the Tapestry - User mailing list archive at Nabble.com.



---------------------------------------------------------------------
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