客户端通过传递键对象调用实体定义的findByPrimaryKey(),获得EO。ADF框架首先检查实体缓存, 如果在实体缓存中没有找到实体,就执行SQL SELECT查询,从数据库读取行。示例如下:

SELECT DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID FROM DEPARTMENTS DepartmentEO WHERE DEPARTMENT_ID=:1

Where binding parameter 1: 10

用获得的实体实例更新实体缓存,实体状态被标记为Unmodified(未更改)。客户端收到获得的实体实例。

下一步,客户端调用实体实例的setter更新属性。在允许变更之前,ADF框架检查是否允许对属性变更。如果属性是可以修改的,就会对新值进行验证,并且传递给实体。实体的状态将变为Modified。

接下来就是事务管理器。oracle.jbo.server. DBTransactionImpl2是缺省的BC事务管理器。

DBTransactionImpl有三个列表执行事务提交周期:

l  Validation listener list:这个列表包含了要验证的实体

l  Transaction post listener list:这个列表包含了需要提交到数据库的实体

l  Transaction listener list:这个列表包含了侦听事务提交的应用模块和实体

修改过的实体实例被增加到这三个列表中。当程序提交事务时,EO执行下面的步骤:

  1. 事务管理器调用validation()对validation listener list中的项目进行验证,也包括已更新的项目。这将进行所有你增加的实体级验证。
  2. 一旦全部验证通过,下一步就提交数据到数据库。事务管理器对transaction post listener list迭代,调用postChanges()。实体数据的提交包括如下步骤:

    2.1  对实体加锁:基于AM中设置的jbo.locking.mode确定锁模式。本节的讨论都是基于乐观锁定(乐观锁模式在提交数据更改到数据库之前对实体加锁,接着检查数据是否过时),这是fusion web  应用的缺省锁模式。实体的Lock()方法对当前实例加锁,触发SELECT FOR UPDATE 查询对数据库行加锁。如果这个实体是复合关联的成员,也对复合关联中的实体加锁。

    2.2  为DML准备实体:调用实体的prepareForDML()方法,完成提交数据到数据库之前的准备工作。包括更新历史列和其它列。

    2.3  提交数据到数据库:doDML()方法生成SQL语句,对行执行INSERT,UPDATE或DELETE操作。

  3.一旦数据提交到了数据库,下一步就是提交事务。事务管理器调用transaction listener list中每一个项目的beforeCommit()方法。然后提交事务。如果提交成功,就调用transaction listener list中每一个项目的afterCommit()方法。在afterCommit()方法中,EO的状态就被重置为Unmodified。

ADF一个EO的事物提交周期的更多相关文章

  1. 连载《一个程序猿的生命周期》-《发展篇》- 22.城市奋斗者的阿Q精神

    好久没有写文章了,有些人会认为博主肯定是没有什么好写的了.其实不然,是想写的太多,实在是没有时间.上半年一直比较忙,处于加班常态的状态,身心疲惫.相较于城市的伪奋斗者,我算比较实干的,而界定“实干”的 ...

  2. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业

    相关文章:随笔<一个程序猿的生命周期>- 逆潮流而动的“叛逆者”        15年前,依稀记得走出大山,进城求学的场景.尽管一路有父亲的陪伴,但是内心仍然畏惧.当父亲转身离去.准备回到 ...

  3. 连载《一个程序猿的生命周期》- 44.感谢,我从事了IT相关的工作

    感谢博客园一直以来的支持,写连载都是在这里首发,相比较CSDN和开源中国气氛要好的多. 节前,想以此篇文章结束<一个程序猿的生命周期>的<生存>篇,对过10的年做一个了断,准备 ...

  4. 连载《一个程序猿的生命周期》-28、被忽悠来的单身HR(女同志)

    一个程序猿的生命周期 微信平台 口   号:职业交流,职业规划:面对现实,用心去交流.感悟. 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103    微   博:h ...

  5. 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础

    一个程序猿的生命周期 微信平台 口   号:职业交流,职业规划:面对现实,用心去交流.感悟. 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103    微   博:h ...

  6. 阅读<构建之法>第13、14、15、16、17章 与 《一个程序员的生命周期》读后感

    第十三章   软件测试 这一章介绍了很多关于测试的方法,比如说单元测试,代码覆盖率测试,构建验证测试,验收测试等,我有一个很纠结的问题,如果我开发软件,是把这么多测试全做完,还是挑一些测试来进行呢?如 ...

  7. 连载《一个程序猿的生命周期》-《发展篇》 - 7.是什么阻碍了"程序猿"的发展?

    有两件事想记录一下,具有普遍性和代表性."程序猿"加了引号,是泛指一类人,也并非局限于IT行业.       山东子公司的总经理是公司大股东之一,个子不高.有些秃顶.面容显老,但看 ...

  8. 13.14.15.16.17&《一个程序猿的生命周期》读后感

    13.TDS 的标准是什么,怎么样才能认为他是一个标准的TDS?? 14.软件的质量包括哪些方面,如何权衡软件的质量? 15.如何解决功能与时间的矛盾,优秀的软件团队会发布有已知缺陷的软件么? 16. ...

  9. Maven 使用了一个标准的目录结构和一个默认的构建生命周期。

    Maven 使用了一个标准的目录结构和一个默认的构建生命周期. 约定优于配置 当创建 Maven 工程时,Maven 会创建默认的工程结构.开发者只需要合理的放置文件,而在 pom.xml 中不再需要 ...

随机推荐

  1. 自定义string类

    #include <iostream> #include <cstring> using namespace std; class String; class Data{ // ...

  2. topcoder srm 633 div1

    problem1 link 如果两个循环之内可以跳完,那么我们只要让这些步数之内的数字组成两个数字$p,q,p\leq q$,使得$p,q,x$组成三角形即可($p+q\geq x,p+x\geq q ...

  3. 万能锁对象 EZ_BDCP2

    万能锁对象 EZ_BDCP2 *&---------------------------------------------------------------------* *& F ...

  4. vs2012编译的程序不能在XP和2003下执行问题的解决方法

    问题如题,通过无数次百度和谷歌后,发现,微软已经确认这是一个缺陷,安装Vs2012的update 3的升级包就可以解决问题.同时,在分发包的地方,vcredist_x86.exe 随程序分发一份就可以 ...

  5. .Net Core 请求上下文IHttpContextAccessor

    namespace Microsoft.AspNetCore.Http { public interface IHttpContextAccessor { HttpContext HttpContex ...

  6. charles 工具菜单总结

    本文参考:charles 工具菜单总结 主要是下面的功能,具体可以点击对应菜单查看 工具菜单总结 禁用缓存 禁用Cookies 远程映射到URL地址 映射到本地 重写工具 黑名单 白名单 DNS欺骗 ...

  7. 【VS开发】【数据库开发】libevent入门

    花了两天的时间在libevent上,想总结下,就以写简单tutorial的方式吧,貌似没有一篇简单的说明,让人马上就能上手用的.首先给出官方文档吧: http://libevent.org ,首页有个 ...

  8. 最新 百合佳缘java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 百合佳缘等10家互联网公司的校招Offer,因为某些自身原因最终选择了 百合佳缘.6.7月主要是做系统复习.项目复盘.Le ...

  9. mysql的AB及读写和集群

    Mysql的AB及读写  第1章 Mysql的AB配置 1.1 master配置 1.2 slave配置 第2章 读写分离 2.1 安装mycat 2.2 启动mycat 2.3 登录mycat相关问 ...

  10. QT信号槽连接

    一:信号槽是什么? Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就 ...