在使用乐观事务的系统中考虑以下两个 Java 伪代码块。
示例 A:
try {
txn.begin();
// database operations
txn.commit();
}
catch (Exception e) {
txn.rollback();
}
示例 B
txn.begin();
// database operations
try {
txn.commit();
}
catch (Exception e) {
txn.rollback();
}
我在我们的代码中看到交易是双向进行的;我确信A是正确的。我的直觉告诉我B是错误的,但是B似乎没有什么坏处,因为commit()
它在 try 块中,并且可以在发生错误的情况下被捕获并回滚。请解释B是否正确,为什么。谢谢!
编辑:所以我并没有真正得到我正在寻找的答案。我已经知道B在某种程度上是“坏的”,我正在寻找的是它为什么不好;也就是说,是否存在某种可能的情况,A会在B失败的情况下工作?
-tjw