java編程思想讀書筆記 - Java編程思想習(xí)題請教: 使用動態(tài)代理來編寫一個系統(tǒng)以實現(xiàn)事務(wù)?
問題描述
大家好,小弟最近在學(xué)習(xí)《Java編程思想》第四版,學(xué)習(xí)到第十四章《類型信息》中動態(tài)代理的時候,在習(xí)題23后遇到一個問題,使用動態(tài)編寫一個系統(tǒng)以實現(xiàn)事務(wù),不知道該如何解決,特來請教大家,題目如下:
使用動態(tài)代理來編寫一個系統(tǒng)以實現(xiàn)事務(wù),其中,代理在被代理的調(diào)用執(zhí)行成功(不拋出任何異常)執(zhí)行提交,而在執(zhí)行失敗時執(zhí)行回滾。你的提交和回滾都針對一個外部的文本文件,該文件不在Java異常的控制范圍之內(nèi)。你必須注意操作的原子性。
該題目英文原文如下:
謝謝大家。
問題解答
回答1:我覺得,事務(wù)處理的難點在于“恢復(fù)”這部分,要能恢復(fù)就必須得保存現(xiàn)場,或者提供有效的逆操作。當(dāng)然,逆操作通常屬于業(yè)務(wù)范疇,既然這里要求使用動態(tài)代理實現(xiàn),進(jìn)行狀態(tài)恢復(fù)應(yīng)該相對合適一些。
對于一個文件操作來說,保存狀態(tài)最簡單粗暴的辦法就是保存文件備份。所以我覺得這個動態(tài)代理是這樣的
保存要操作的文件備份
調(diào)用被代理的代碼,進(jìn)行本身的業(yè)務(wù)操作(同時監(jiān)控異常)
發(fā)生異常則恢復(fù)文件備份,否則忽略這一步
刪除文件備份
看我的回答能不能給你提供一個思路
相關(guān)文章:
1. python 利用subprocess庫調(diào)用mplayer時發(fā)生錯誤2. python - pycharm 自動刪除行尾空格3. python - Pycharm的Debug用不了4. python文檔怎么查看?5. datetime - Python如何獲取當(dāng)前時間6. javascript - 關(guān)于apply()與call()的問題7. html - eclipse 標(biāo)簽錯誤8. 請問PHPstudy中的數(shù)據(jù)庫如何創(chuàng)建索引9. 安全性測試 - nodejs中如何防m(xù)ySQL注入10. javascript - nginx反向代理靜態(tài)資源403錯誤?
