validate(TransactionMap mapTx, java.util.Set setInsert, java.util.Set setUpdate, java.util.Set setDelete, java.util.Set setRead, java.util.Set setPhantom)
Validate that the content of the TransactionMap is "fit" to be committed into the base map.

Validate that the content of the TransactionMap is "fit" to be committed into the base map.

This method is invoked during "prepare" phase after all the resources involved in this transaction are successfully locked at the base map. The Validator is expected to retrieve the "old" and "new" values (using map.get(oKey), map.getBaseMap().get(oKey)) and use the information gathered during "enlist" calls to make the determination whether or not commit should be allowed to proceed.

To force a roll back it should throw an exception indicating the reason this transaction cannot be committed. When that happens, the sets are expected to hold just the keys of the "offending" resources.

It is this method's responsibility to call a next Validator in the validation chain (i.e. getNextValidator().validate(map, setI, setU, setD, setR, setF);)

Parameters:

mapTx - the TransactionMap that is being prepared

setInsert - the set of inserted resources

setUpdate - the set of updated resources

setDelete - the set of deleted resources

setRead - the set of read resources. It is always empty for TRANSACTION_GET_COMMITTED isolation level.

setPhantom - the set of phantom resources, that is resources that were added to the base map, but were not known to the transaction. This set can be not empty only for TRANSACTION_GET_SERIALIZED isolation level.

Throws:

java.util.ConcurrentModificationException - if the validator detects an unresolveable conflict between the resources