检测AutoCloseable中的异常close()

Bar*_*lom 10 java transactions exception-handling java-7

我想构建一个自定义AutoCloseable类,所以我可以转为:

try {
    begin();
    doThings();
    commit();
} finally {
    if (transactionIsActive()) rollback();
}
Run Code Online (Sandbox Code Playgroud)

变得更容易

try (Transaction t = begin()) { // too bad I have to store it in t though I don't use it
    doThings();
}
Run Code Online (Sandbox Code Playgroud)

Transaction将在AutoCloseable这里,并在close()其中将适当地提交或回滚事务.

但为了实现这一目标,我需要检测Transaction.close()try块内是否发生异常或者是否正常完成.这有可能吗?

如果它需要从新的异常中解析堆栈跟踪,那就没问题.更简单的编程将值得带来的微小性能打击.

mil*_*ose 6

我能想出的最接近的仍然需要手动标记事务的成功作为块的最后一个语句:

class Transaction implements AutoCloseable {
    private boolean rollback = true;

    public void success() {
        rollback = false;
    }

    public void close() {
        if (rollback) doRollback();
        else doCommit();
        // …
    }
}

class Main {
    public static void main(String[] args) {
        try (Transaction t = new Transaction()) {
            doThings();
            t.success();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)