Hi Craig,

I am still on my first cup of copy this morning, so I may not be following you completely, but I'd think that that remote object persistence feature is close to what you describe:

http://objectstyle.org/confluence/display/CAY/Remote+Object+Persistence

Basically here Cayenne client accesses Cayenne server, with both layers based on Cayenne API, and both implementing arbitrary business logic.

Actually even in a single VM you can partition logic with nested DataContexts. DataContext accesses data store via a DataChannel, which can be implemented by a DataDomain, another DataContext, or it can be your custom facade wrapping a DataContext. DataChannel is a virtual object data source.

Such multi-layer capabilities is a signature feature of Cayenne 1.2. I am sure it will lead to previously unforeseen uses.

Andrus


On Mar 29, 2006, at 2:35 AM, Craig Turner wrote:
This was from the thread "Re: violates not-null constraint question."

Mike Kienenberger wrote:
And it's not like I came up with this brilliant thought on my own
either -- I also thought I should be able to use DB default values
when I first started using ORMs.   I also had to have it explained to
me as well :)  The same thing applies to auto-increment db-side
generated primary key values, although Andrus (and others) have worked
out the methodology to "read-back" that db-side generated value.

This thread has reminded me of a similar issue I've been mulling over for a while.

At the OpenBase conference last year one of the users made a request during the feature request system for some sort of in- database constraint system. I think what he wanted is for multiple applications to be able to access the database tables directly and have the database complain if they tried to do something nasty.

My initial reaction was that he misunderstood the domain and then I thought - no - I can think of good reasons why he might want this. I told myself to be open minded and decided that what he wanted sounded reasonable. Basically - he wants supervised access to the datastore rather than proxied access which is what tends to get used by developers at the moment.

I know of two typical methods to shielding databases, both of them supervised: stored procedures and RPC engines, which are conceptually the same thing - an exposed API.

I'm not thrilled about stored procedures as an answer to this situation: they're not particularly convenient to work with for ORBs, you can only do what's allowed by the API, and methods can have side-effects which are not apparent to users. As for RPC: while this is nice in theory, in practice I think it's very heavy- handed, and it means applications outside that have to use that same sort of limiting API-style access.

Maybe my initial reaction was correct - having multiple autonomous apps access the same datasource directly is completely out of the question and the only way to have them share data is to wrap it with an engine. But I'm not convinced.

I wonder whether there could be some sort of virtual objects that behave and are managed like cayenne entities but which map to a java engine instead of mapping to a database. The engine would not have a traditional API of exposed methods, rather than having an exposed schema of data-objects, just like a database does, and from the app-programmer's perspective, accessing this through cayenne would be just like accessing a database.

In addition to having just:

App  ---- [cayenne] --> db

you could then have:

App  ---- [cayenne] --> engine

An alternative to putting the burden of developing this on cayenne would be to have a virtual datasource that appeared to the outside to be a database but which behaved quite differently and was streamlined for this sort of usage.

Any thoughts/suggestions?

  - C


Reply via email to