在使用ADF BC时,我们通常依赖于在数据库中执行DML操作的框架。 在DBTransaction提交周期内,该框架正确地在数据库中进行了所有必要的更新。 很酷的事情是,在这种情况下,数据库事务将被自动管理。 因此,如果出现问题,如果某些实体无法发布到数据库,则框架将在提交过程的最开始将当前事务回滚到保存点。 此外,根应用程序模块的状态也将还原到同一点。 该框架为我们完成了所有这些工作,我们不需要关心它。

但是,当需要在数据库中执行一些DML以实现某些业务服务方法时,存在一个非常常见的用例。 让我们考虑AM实现类中的方法:

public void someBusinessMethod() {invokePLSQLProcedure1();modifySomeAttributes();invokePLSQLProcedure2();       getDBTransaction().commit();
}

该方法调用PL / SQL过程,修改数据库中的某些数据,修改实体缓存中的某些属性,调用另一个PL / SQL过程并执行提交。 想象一下,如果第二个PL / SQL过程调用失败,或者由于某种原因框架未能提交事务,将会发生什么。 显然,数据库中有一个锁,因为事务既不提交也不回滚。 此外,尽管someBusinessMethod失败,实体缓存仍包含由ModifySomeAttributes()方法修改的数据。 为了防止所有这些不好的事情,我们必须手动管理此事务。 让我们在AM实现类中有几个实用程序方法:

//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);   }

让我们在someBusinessMethod()方法中使用这些辅助方法:

public void someBusinessMethod() {String spid = passivateStateForUndo();try {           invokePLSQLProcedure1();            modifySomeAttributes();           invokePLSQLProcedure2();       getDBTransaction().commit();               } catch (RuntimeException e) {activateStateForUndo(spid);throw new JboException(e);}}

请注意, passivateStateForUndoactivateStateForUndo方法仅在AM状态管理方面与保存点一起使用,而实际上与数据库中的事务保存点无关。 activateStateForUndo方法会在数据库中执行真正的回滚 ,但是直到通过passivateStateForUndo方法拍摄快照时,AM状态(包括脏实体缓存)都将被还原。

而已!

翻译自: https://www.javacodegeeks.com/2015/01/managing-savepoints-with-adf-bc.html

使用ADF BC管理保存点相关推荐

  1. adf4351_使用ADF BC管理保存点

    adf4351 在使用ADF BC时,我们通常依赖于在数据库中执行DML操作的框架. 该框架在DBTransaction提交周期内正确地在数据库中进行了所有必要的更新. 很酷的事情是,在这种情况下,数 ...

  2. adf4351使用_使用ADF BC管理保存点

    adf4351使用 在使用ADF BC时,我们通常依赖于在数据库中执行DML操作的框架. 该框架在DBTransaction提交周期内正确地在数据库中进行了所有必要的更新. 很酷的事情是,在这种情况下 ...

  3. ADF BC:创建绑定到业务组件的UI表

    在此示例中,我们将展示如何创建绑定到业务组件的简单UI表(af:table). 我再次尝试使用简单的标准在网上进行搜索: "如何创建绑定到业务组件ADF 11g的af:table" ...

  4. 网站输入正确账号密码页面刷新一下_Folx的密码管理保存网站登陆信息

    Folx的密码管理保存网站登陆信息 大家下载某个文件时,需要登录文件所在的网站才能进行下载,否则哪怕有下载链接也无权限进行文件下载,那Folx遇到这种情况是否就无法使用了呢?Folx的密码管理也能保存 ...

  5. 360 浏览器设置里安全设置里清除上网痕迹中没有“管理保存过的账号和密码”这个选项

    360浏览器设置里安全设置里清除上网痕迹中没有"管理保存过的账号和密码"这个选项 点击360浏览器右上角"管理"->"管理"里的&qu ...

  6. ADF BC bc4j.xcfg

    ADF BC bc4j.xcfg专贴 分类: 2008年前的老古董2007-04-28 12:13 1041人阅读 评论(0) 收藏 举报 importapplicationclassstring测试 ...

  7. 计算机管理里面的用户名是否可以导出,360浏览器管理保存过的账号和密码步骤教程...

    许多360浏览器的用户在注册网站账号的时候,都会被360浏览器提醒安全保存该账号和密码,一般用户也会选择安全保存.但是,如果一个网站注册了多个账号,或者当时360浏览器管理保存过的账号和密码是错误的或 ...

  8. python宿舍管理保存_学生宿舍管理信息系统详细报告

    学生宿舍管理信息系统详细报告 目 录 第一章 前言--------------------------------------------------------4 1.1 MIS概述-------- ...

  9. chrome 保存密码_如何在Chrome中管理保存的密码

    chrome 保存密码 Google Chrome comes with a handy password manager already built in. You can have your br ...

最新文章

  1. vue数据源转json问题
  2. java命令行编译时提示找不到或无法加载主类的问题
  3. 这个结构体排序开始没有想到!!
  4. Hive的两种操作模式
  5. Python 标准库 18.5 - asyncio
  6. 微型计算机系统包括( )几部分,微型计算机系统包括哪几个部分?
  7. java 菜单 分隔符_在Java中使用分隔符连接值列表最优雅的方法是什么?
  8. CDH 6.x 安装 Phoenix 服务
  9. MyEclipse—如何在MyEclipse中创建servlet3.0
  10. 前端第二天 表格/表单和H5
  11. 2018年4月自考感想
  12. 2 数据可视化大屏 - 布局
  13. 【期末复习】现代管理科学基础
  14. 台式机鼠标失灵打开计算机,终于懂了台式电脑鼠标键盘不能用怎么办了
  15. 激光清洗的优点和实际案例
  16. 期货与期权的主要区别与联系?
  17. “宅一族”大数据报告:喜欢学习,喜欢健身,生活同样很精彩
  18. 大容量U盘制作USB多重系统启动盘初探
  19. 集成流程安全报警功能迁移心得
  20. Android studio使用.9图片报错

热门文章

  1. 使用Servlet上传多张图片——访问提示
  2. jQuery 操作元素
  3. 2015蓝桥杯省赛---java---A---8(移动距离)
  4. java oschina_简单说说 OSChina 的技术架构
  5. windows mysql memcached_Memcached在Windows下的安装
  6. apache shiro怎么升级_Springboot整合Shiro之授权
  7. jakarta ee_Jakarta EE贡献–入门
  8. java线程池返回线程状态_Java线程的不同状态
  9. Neo4j导入:java.lang.IllegalStateException:不支持在单个导入中混合指定和未指定的组所有物...
  10. tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题