客户端通过传递键对象调用实体定义的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. python 中密码处理函数

    一个简单的对某字符串进行 MD5加密 import hashlib def md5_pwd(pwd): """ 为了防止解密,hashlib.md5时加入自己的字段 将密 ...

  2. PostgreSQL创建database默认编码为UTF-8

    在psql中执行如下代码: create database logdb encoding='UTF8';

  3. 使用 ServiceStack.Text 序列化 json的实现代码

    相信做 .net 开发的朋友经常会遇到 json 序列化这样的需要,今天发篇文章总结下自己使用ServiceStack.Text 来序列化 json.它的速度比 Newtonsoft.Json 快很多 ...

  4. Yarn使用笔记

    1.安装需要下载安装包(这里只介绍windows系统的安装) 安装成功,会如图提示! 版本号:Yarn安装包-yarn-0.24.6 安装包下载地址:链接:http://pan.baidu.com/s ...

  5. Linux - 对比net-tools与iproute2

    简介 net-tools包含ifconfig.route.arp和netstat等命令行工具,用于管理和排查各种网络配置. 起源于BSD TCP/IP工具箱,旨在配置老式Linux内核的网络功能. 自 ...

  6. 不论报任何错误 都是网络源有问题,安装spacemacs报错的解决方式

    不论报任何错误 都是网络源有问题 打开.spacemacs ### 这是原头部 (defun dotspacemacs/layers ()   "Configuration Layers d ...

  7. Egret入门学习日记 --- 第十四篇(书中 5.4~5.6节 内容)

    第十四篇(书中 5.4~5.6节 内容) 书中内容: 总结 5.4节 内容重点: 1.如何编写自定义组件? 跟着做: 重点1:如何编写自定义组件? 文中提到了重要的两点. 好,我们来试试看. 第一步, ...

  8. 【计算机视觉】Selective Search for Object Recognition论文阅读1

    Selective Search for Object Recognition 作者: J. R. R. Uijlings, K. E. A. van de Sande, T. Gevers, A. ...

  9. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  10. 解读PHP面试-高并发解决方案类考察点

    整理自慕课网360大牛全面解读PHP面试 ,购买链接:https://coding.imooc.com/class/133.html 1.高并发和大流量解决方法 真题回顾 PHP如何解决高并发大流量问 ...