這篇文章的目的主要是講解rm在接收tc的請求後執行全域性分支事務提交(dobranchcommit)和全域性分支事務回滾(dobranchrollback)的流程。
全域性的分支事務提交過程和回滾過程也算rm處理流程中核心的一環,了解以後並結合之前講解的本地事務提交流程就能夠較好的理解整個過程了。
整體流程
public class rmhandlerat extends abstractrmhandlerat implements
rminboundhandler, transactionmessagehandler
@override
protected void dobranchrollback(branchrollbackrequest request, branchrollbackresponse response)
throws transactionexception
}
說明:
dobranchcommit流程
public class datasourcemanager implements resourcemanager
throws transactionexception
}public class asyncworker implements resourcemanagerinbound else
return branchstatus.phasetwo_committed;
}public synchronized void init() catch (throwable e)
}}, 10, 1000 * 1, timeunit.milliseconds);
}private void dobranchcommits()
iteratoriterator = async_commit_buffer.iterator();
while (iterator.hasnext())
contextsgroupedbyresourceid.add(commitcontext);
iterator.remove();
}connection conn = null;
try catch (sqlexception sqle)
for (phase2context commitcontext : contextsgroupedbyresourceid) catch (exception ex)
}} finally catch (sqlexception closeex) }}
}}
}
說明:
dobranchrollback流程
public class datasourcemanager implements resourcemanager
try catch (transactionexception te) else
}return branchstatus.phasetwo_rollbacked;
}}public final class undologmanager
}deleteundolog(xid, branchid, conn);
conn.commit();
} catch (throwable e) catch (sqlexception rollbackex)
}throw new transactionexception(branchrollbackfailed_retriable, string.format("%s/%s", branchid, xid), e);
} finally
if (selectpst != null)
if (conn != null)
} catch (sqlexception closeex) }}
}
說明:
下篇文章會針對undoexecutor作具體的介紹。
fescar 原始碼解析系列
Spring手動管理事務提交 回滾
配置好spring事務之後 spring事務配置,可參見其它檔案 我們可以簡單的新增乙個注釋 transactional實現事務,但是如果方法中catch了異常,此異常沒有丟擲,那麼事務將不會生效。可以在catch中加入如下 實現事務回滾功能 transactional rollbackfor ex...
SVN 提交回滾
第一種情況 改動沒有被提交 commit 這種情況下,使用svn revert就能取消之前的修改。svn revert用法如下 svn revert r something 其中something可以是 目錄或檔案的 相對路徑也可以是絕對路徑。當something為單個檔案時,直接svn rever...
對mysql事務提交 回滾的錯誤理解
一 起因 begin或者start transaction開始乙個事務 rollback事務回滾 commit 事務確認 人們對事務的解釋如下 事務由作為乙個單獨單元的乙個或多個sql語句組成,如果其中乙個語句不能完成,整個單元就會回滾 撤銷 所有影響到的資料將返回到事務開始以前的狀態。因而,只有事...