Example usage for org.springframework.transaction.interceptor RollbackRuleAttribute getDepth

List of usage examples for org.springframework.transaction.interceptor RollbackRuleAttribute getDepth

Introduction

In this page you can find the example usage for org.springframework.transaction.interceptor RollbackRuleAttribute getDepth.

Prototype

public int getDepth(Throwable ex) 

Source Link

Document

Return the depth of the superclass matching.

Usage

From source file:org.springframework.transaction.interceptor.RuleBasedTransactionAttribute.java

/**
 * Winning rule is the shallowest rule (that is, the closest in the
 * inheritance hierarchy to the exception). If no rule applies (-1),
 * return false.//from w w  w  .j  av  a 2s. c o  m
 * @see TransactionAttribute#rollbackOn(java.lang.Throwable)
 */
@Override
public boolean rollbackOn(Throwable ex) {
    if (logger.isTraceEnabled()) {
        logger.trace("Applying rules to determine whether transaction should rollback on " + ex);
    }

    RollbackRuleAttribute winner = null;
    int deepest = Integer.MAX_VALUE;

    if (this.rollbackRules != null) {
        for (RollbackRuleAttribute rule : this.rollbackRules) {
            int depth = rule.getDepth(ex);
            if (depth >= 0 && depth < deepest) {
                deepest = depth;
                winner = rule;
            }
        }
    }

    if (logger.isTraceEnabled()) {
        logger.trace("Winning rollback rule is: " + winner);
    }

    // User superclass behavior (rollback on unchecked) if no rule matches.
    if (winner == null) {
        logger.trace("No relevant rollback rule found: applying default rules");
        return super.rollbackOn(ex);
    }

    return !(winner instanceof NoRollbackRuleAttribute);
}