First an additional answer: you can return whatever you want. That will then become the return value of the performInTransaction() call.
But I have a related question. How is an explicit rollback supposed to work there? If I halfway through decide to roll back the entire transaction, after a few commitChanges() already have happened, how do I do that? I tried context.rollbackChangesLocally(); BaseTransaction.getThreadTransaction().rollback(); but then I get java.lang.IllegalStateException: Transaction must have ‘STATUS_ACTIVE’ to be committed. Current status: STATUS_ROLLEDBACK What seems to work is throwing a CayenneRuntimeException, but that will get rethrown after the rollback, so I would have to catch that again outside the performInTransaction() call, which doesn't feel how it's supposed to work. Maik > Am 20.03.2018 um 16:40 schrieb John Huss <johnth...@gmail.com>: > > performInTransaction just encapsulates a database transaction, so it has no > affect on the object (ORM) level, it only affects what is visible in the > database. So the behavior with commitChanges() is the same as it would be > outside a performInTransaction block. > > > On Tue, Mar 20, 2018 at 10:25 AM Juan Manuel Diaz Lara > <jmdia...@yahoo.com.invalid> wrote: > >> runtime.performInTransaction(() -> { >> // ... do some changes >> context.commitChanges(); >> >> // ... do more changes >> context.commitChanges(); >> >> return true; >> }); Previous code is an example on "Guide to 4.0 Features". >> My questions are: >> - What is then persistence state of objects after first commitChanges() >> ? >> >> - If second commitChanges() fails, what happen to the persistence >> state coming from firs commitChages() ? >> - What happen if we return false? >> Atte. Juan Manuel Díaz Lara