private < R > R transactOnce ( final ObjectifyImpl parent , final Work < R > work ) { final ObjectifyImpl txnOfy = factory . open ( parent . getOptions ( ) , next -> new TransactorYes ( next , this ) ) ; boolean committedSuccessfully = false ; try { final R result = work . run ( ) ; txnOfy . flush ( ) ; txnOfy . getTransaction ( ) . commit ( ) ; committedSuccessfully = true ; return result ; } finally { if ( txnOfy . getTransaction ( ) . isActive ( ) ) { try { txnOfy . getTransaction ( ) . rollback ( ) ; } catch ( RuntimeException ex ) { log . error ( "Rollback failed, suppressing error" , ex ) ; } } txnOfy . close ( ) ; if ( committedSuccessfully ) { ( ( PrivateAsyncTransaction ) txnOfy . getTransaction ( ) ) . runCommitListeners ( ) ; } } }
One attempt at executing a transaction