cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Kienenberger <>
Subject Re: Use same entity classes for server and ROP client
Date Wed, 21 Sep 2011 21:36:31 GMT
I haven't used ROP, so I can't really speak to it.

However, you should be able to solve the issue of having a single set
of classes that supports both in a couple of different ways.

1) You can create a wrapper object which will be your single set of
classes, and have it delegate to the appropriate class.

2) You can create an interface, and have both sets of objects implement it.

In both cases, I would use code generation to create the wrapper or interface.

I have used both methods in the past.   The project I am working on
right now uses a wrapper approach for JPA and stub testing objects. In
the original project, there was a generated Cayenne wrapped object
instead of a JPA object, but the two frameworks are different enough
that maintaining the unused Cayenne classes was deemed impractical at
some point.

I think for an all Cayenne project, the interface is likely to be
easier.  I have used this methodology to write unit tests for projects
involving Cayenne, although, if I remember right, my test classes
extended from the Cayenne objects.

You will likely need to add a "getWrappedClass()" kind of method in
either case for those times when you need to pass the real class to a
query or something else.

On Tue, Sep 20, 2011 at 10:37 PM, John Huss <> wrote:
> I'm try to find out if I can make a single app that can work either with a
> local DB or using ROP with a remote DB.
> For the ObjectContext it looks like as long as the code uses the
> ObjectContext interface that should allow to code to run against either and
> there doesn't seem to be much loss of functionality from just using the
> interface.
> But for the entities it looks like the client should use PersistentObject
> subclasses and the server should use CayenneDataObject subclasses, and
> PersistentObject is missing some useful methods.  So I'm wondering what in
> CayenneDataObject prevents it from being used on the client, or what in
> PersistentObject prevents it from being a good fit on the server.  What is
> the best way to end up with a single set of classes that supports both?
> Thanks,
> John

View raw message