I got this to work today after some experimentation. My app is a client app that normally connects to a remote server, but can also run offline by connecting to a local DB. So the client will have the model / map files present locally to enable the offline mode. Since the model is available, CayenneDataObject can be used as the common base class (with a little work*). CayenneDataObject is not that different from PersistentObject (it is a subclass of it after all). The primary difference is the presence of the validate methods, and those require access to the DbEntity info contained in the model. I also was able to get a version working based on PersistentObject for both the client and server, but I chose to stick with CayenneDataObject since it is more standard and more full-featured. So I think I'm good to go now.
* The little work is replacing the entity resolver on the client with an entity resolver obtained from a ServerRuntime (for the local offline db), and making sure the server doesn't use the client entity resolver when sending data to the client. If anyone is interested I can share some more specific code. John On Wed, Sep 21, 2011 at 7:50 PM, Aristedes Maniatis <[email protected]>wrote: > On 21/09/11 12: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? >> > > > We have had the exact same issues and ended up with separate classes for > client and for server. And of course plenty of interfaces and helper classes > to share common business logic. We are also thinking about creating a single > user application with the server and client code merged into one > application: when we get around to that, I think the approach will be to > continue to use ROP, but short circuit the connection between client and > server so it doesn't need to travel over Hessian/Jetty. Hopefully we'll be > working on that in a month or so. > > Regards > Ari > > > > -- > --------------------------> > Aristedes Maniatis > GPG fingerprint CBFB 84B4 738D 4E87 5E5C 5EFA EF6A 7D2E 3E49 102A >
