private List applyOperationAndCheck ( Operation op , MithraTransaction tx ) { boolean oldEvaluationMode = tx . zIsInOperationEvaluationMode ( ) ; List resultList = null ; try { tx . zSetOperationEvaluationMode ( true ) ; if ( this . isPureHome ( ) || ( ! this . isOperationPartiallyCached ( op ) && ! this . txParticipationRequired ( tx , op ) ) ) { resultList = this . resolveOperationOnCache ( op ) ; } else { resultList = op . applyOperationToPartialCache ( ) ; if ( resultList == null && ! this . isOperationPartiallyCached ( op ) && this . getTxParticipationMode ( tx ) . mustParticipateInTxOnRead ( ) ) { // attempt to find what we have in cache to trigger waiting for potential other transactions List untrustworthyResult = op . applyOperationToFullCache ( ) ; checkTransactionParticipationAndWaitForOtherTransactions ( untrustworthyResult , tx ) ; } resultList = checkTransactionParticipationAndWaitForOtherTransactions ( resultList , tx ) ; } } finally { tx . zSetOperationEvaluationMode ( oldEvaluationMode ) ; } if ( this . isPureHome ( ) ) { checkTransactionParticipationForPureObject ( resultList , tx ) ; } return resultList ; }
the transaction is getting 100% correct data