adf4351使用_使用ADF BC管理保存点
adf4351使用
在使用ADF BC時(shí),我們通常依賴于在數(shù)據(jù)庫(kù)中執(zhí)行DML操作的框架。 該框架在DBTransaction提交周期內(nèi)正確地在數(shù)據(jù)庫(kù)中進(jìn)行了所有必要的更新。 很酷的事情是,在這種情況下,數(shù)據(jù)庫(kù)事務(wù)將被自動(dòng)管理。 因此,如果出現(xiàn)問(wèn)題,如果某些實(shí)體無(wú)法發(fā)布到數(shù)據(jù)庫(kù),則框架將在提交過(guò)程的最開(kāi)始將當(dāng)前事務(wù)回滾到保存點(diǎn)。 此外,根應(yīng)用程序模塊的狀態(tài)也將還原到同一點(diǎn)。 該框架為我們完成了所有這些工作,我們不需要關(guān)心它。
但是,當(dāng)需要在數(shù)據(jù)庫(kù)中執(zhí)行一些DML以實(shí)現(xiàn)某種業(yè)務(wù)服務(wù)方法時(shí),存在一個(gè)非常常見(jiàn)的用例。 讓我們考慮AM實(shí)現(xiàn)類中的方法:
public void someBusinessMethod() {invokePLSQLProcedure1();modifySomeAttributes();invokePLSQLProcedure2(); ? ? ? getDBTransaction().commit(); ? ? ? ? ? ? ? }該方法調(diào)用PL / SQL過(guò)程,修改數(shù)據(jù)庫(kù)中的某些數(shù)據(jù),修改實(shí)體緩存中的某些屬性,調(diào)用另一個(gè)PL / SQL過(guò)程并執(zhí)行提交。 想象一下,如果第二個(gè)PL / SQL過(guò)程調(diào)用失敗,或者由于某種原因框架未能提交事務(wù),將會(huì)發(fā)生什么。 顯然,數(shù)據(jù)庫(kù)中有一個(gè)鎖,因?yàn)槭聞?wù)既不提交也不回滾。 此外,盡管someBusinessMethod失敗,實(shí)體緩存仍包含由ModifySomeAttributes()方法修改的數(shù)據(jù)。 為了防止所有這些不好的事情,我們必須手動(dòng)管理此事務(wù)。 讓我們?cè)贏M實(shí)現(xiàn)類中有幾個(gè)實(shí)用程序方法:
//Passivates the AM's state in the passivation storage private String passivateStateForUndo() {String savePoint =super.passivateStateForUndo(null, null, PASSIVATE_UNDO_FLAG);return savePoint;}//Rollbacks the transaction and restores the AM's state private void activateStateForUndo(String savePointId) {super.activateStateForUndo(savePointId, ?ACTIVATE_UNDO_FLAG); ? }讓我們?cè)趕omeBusinessMethod()方法中使用這些輔助方法:
public void someBusinessMethod() {String spid = passivateStateForUndo();try { ? ? ? ? ? invokePLSQLProcedure1(); ? ? ? ? ? ?modifySomeAttributes(); ? ? ? ? ? invokePLSQLProcedure2(); ? ? ? getDBTransaction().commit(); ? ? ? ? ? ? ? } catch (RuntimeException e) {activateStateForUndo(spid);throw new JboException(e);}}請(qǐng)注意, passivateStateForUndo和activateStateForUndo方法僅在AM狀態(tài)管理方面與保存點(diǎn)一起使用,而實(shí)際上與數(shù)據(jù)庫(kù)中的事務(wù)保存點(diǎn)無(wú)關(guān)。 activateStateForUndo方法會(huì)在數(shù)據(jù)庫(kù)中執(zhí)行真正的回滾 ,但是直到通過(guò)passivateStateForUndo方法拍攝快照時(shí),AM狀態(tài)(包括臟實(shí)體緩存)都將被還原。
而已!
翻譯自: https://www.javacodegeeks.com/2015/01/managing-savepoints-with-adf-bc.html
adf4351使用
總結(jié)
以上是生活随笔為你收集整理的adf4351使用_使用ADF BC管理保存点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 编译原理抽象语法树_平衡抽象原理
- 下一篇: (魅族是安卓系统)