On Tue, Apr 1, 2014 at 5:54 AM, Andrus Adamchik <[email protected]> wrote:
> I don't think we've ever used the term "flushing", so Google won't show it. 
> But transaction control is definitely there. If I understand this correctly 
> (and translating to Cayenne terms), you need a way to have an open 
> transaction (container managed, or managed in your code) and do multiple 
> commits within this transaction, with a single atomic rollback. This is 
> doable in Cayenne of course. Here is manual example using 3.2 (there's more 
> verbose API that does it in the older versions) :
>
> serverRuntime.performInTransaction(new TransactionalOperation<SomeResult>() {
>        public SomeResult perform() {
>
>           // this will be a flush
>           context1.commitChanges();
>
>           // this will be another flush
>           context2.commitChanges();
>
>           return someResult;
>        }
>    }
> );

In JPA, the flush happens right before a query.

So to make this work similar to JPA and transparently, we would need
to create a DataChannelFilter, and if we are in flush mode in onQuery,
then execute a commit on our originating query.   That actually seems
pretty easy.

And the transaction management itself seems simple -- bound to a
thread.   The only non-obvious part is the final commit, but for JPA
we've already had to use beginTopLevelTransaction/beginTransacton
methods to differentiate between these two situations.

http://cayenne.apache.org/docs/3.0/understanding-transactions.html

Thanks!

Reply via email to