客户端通过传递键对象调用实体定义的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. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_03-用户认证技术方案-Oauth2协议

    2.2 Oauth2认证 2.2.1 Oauth2认证流程 第三方认证技术方案最主要是解决认证协议的通用标准 问题,因为要实现 跨系统认证,各系统之间要遵循一定的 接口协议. OAUTH协议为用户资源 ...

  2. thymeleaf中switch case多出一个空行

    以下是<thymeleaf3.0.5中文参考手册.pdf>中的代码,官方代码没有具体去查询. <div th:switch="${user.role}"> ...

  3. 基于OpenAM系列的SSO----基础

    基于OpenAM系列的SSO----基础   OpenAM简介:OpenAM是一个开源的访问管理.授权服务平台.由ForegeRock公司发起.OpenAM前身为OpenSSO,由SUN公司创建,现在 ...

  4. java 工程编码格式由GBK转化成utf-8 (转载)

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  5. 关于lib和dll

    关于lib和dll 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:这里说的就是静态链接库LIB和动态链接库DL,有些时候经常弄混淆这两个东西,这里基于 ...

  6. 移动架构-UML

    UML(Unified Modeling Language),UML规范用来描述建模的概念有,类(对象的).对象.关联.职责.行为.接口.用例.包.顺序.协作,以及状态.这里对UML做一个简单介绍 前 ...

  7. C#API解决自定义请求头下的跨域问题

    解决方法一: public class CrosHandler : DelegatingHandler { private const string Origin = "Origin&quo ...

  8. ab webbench 网站测压解决

    ab 网站测压解决 ab –c 100 –n 100 http://192.168.1.117/forum.php (测试方式) 同时发100人发100个请求 ab –c 100 –n 1000 ht ...

  9. Python基础——matplotlib库的使用与绘图可视化

    1.matplotlib库简介: Matplotlib 是一个 Python 的 2D绘图库,开发者可以便捷地生成绘图,直方图,功率谱,条形图,散点图等. 2.Matplotlib 库使用: 注:由于 ...

  10. Linux IO的五种模型 ongoing

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型: 阻塞I/O模型  (Blocking IO) ------------(同步)(阻塞) 非阻塞I/O模型 (Non-Blocking IO) ...