ADF一个EO的事物提交周期

客户端通过传递键对象调用实体定义的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执行下面的步骤:
- 事务管理器调用validation()对validation listener list中的项目进行验证,也包括已更新的项目。这将进行所有你增加的实体级验证。
- 一旦全部验证通过,下一步就提交数据到数据库。事务管理器对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的事物提交周期的更多相关文章
- 连载《一个程序猿的生命周期》-《发展篇》- 22.城市奋斗者的阿Q精神
好久没有写文章了,有些人会认为博主肯定是没有什么好写的了.其实不然,是想写的太多,实在是没有时间.上半年一直比较忙,处于加班常态的状态,身心疲惫.相较于城市的伪奋斗者,我算比较实干的,而界定“实干”的 ...
- 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业
相关文章:随笔<一个程序猿的生命周期>- 逆潮流而动的“叛逆者” 15年前,依稀记得走出大山,进城求学的场景.尽管一路有父亲的陪伴,但是内心仍然畏惧.当父亲转身离去.准备回到 ...
- 连载《一个程序猿的生命周期》- 44.感谢,我从事了IT相关的工作
感谢博客园一直以来的支持,写连载都是在这里首发,相比较CSDN和开源中国气氛要好的多. 节前,想以此篇文章结束<一个程序猿的生命周期>的<生存>篇,对过10的年做一个了断,准备 ...
- 连载《一个程序猿的生命周期》-28、被忽悠来的单身HR(女同志)
一个程序猿的生命周期 微信平台 口 号:职业交流,职业规划:面对现实,用心去交流.感悟. 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103 微 博:h ...
- 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础
一个程序猿的生命周期 微信平台 口 号:职业交流,职业规划:面对现实,用心去交流.感悟. 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103 微 博:h ...
- 阅读<构建之法>第13、14、15、16、17章 与 《一个程序员的生命周期》读后感
第十三章 软件测试 这一章介绍了很多关于测试的方法,比如说单元测试,代码覆盖率测试,构建验证测试,验收测试等,我有一个很纠结的问题,如果我开发软件,是把这么多测试全做完,还是挑一些测试来进行呢?如 ...
- 连载《一个程序猿的生命周期》-《发展篇》 - 7.是什么阻碍了"程序猿"的发展?
有两件事想记录一下,具有普遍性和代表性."程序猿"加了引号,是泛指一类人,也并非局限于IT行业. 山东子公司的总经理是公司大股东之一,个子不高.有些秃顶.面容显老,但看 ...
- 13.14.15.16.17&《一个程序猿的生命周期》读后感
13.TDS 的标准是什么,怎么样才能认为他是一个标准的TDS?? 14.软件的质量包括哪些方面,如何权衡软件的质量? 15.如何解决功能与时间的矛盾,优秀的软件团队会发布有已知缺陷的软件么? 16. ...
- Maven 使用了一个标准的目录结构和一个默认的构建生命周期。
Maven 使用了一个标准的目录结构和一个默认的构建生命周期. 约定优于配置 当创建 Maven 工程时,Maven 会创建默认的工程结构.开发者只需要合理的放置文件,而在 pom.xml 中不再需要 ...
随机推荐
- QDateTime QString
QDateTime格式化 yyyy-MM-dd hh:mm:ss QString getFormatDateStr(QDateTime dateTimeParam) { qDebug() <& ...
- win10安装RabbitMQ
简单来说,两步走:先装erlang,再装rabbitmq.rabbitmq是用erlang开发的,既然erlang是一种语言,你可以把它当做Jdk来安装. 1.下载erlang安装包(官网下载地址ht ...
- Python - Django - 编辑作者
在作者列表页面的操作栏中加上编辑按钮 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- Cognos Framework操作记录
备注:这是我单位内部的Cognos Framework配置记录,里面涉及的名字等信息在其他使用环境需要进行相应修改. Cognos数据包配置 打开CYFTest项目, 右键点击andwdb的物理视图 ...
- React中如何实现模态框每次打开都是初始界面
问题描述如下 解决方案:每次点击打开模态框的时候为,当前模态框设置一个独立的key值,代码如下: /* * 上传文件的模块框控制 * */ showFileModal = () => { thi ...
- 如何禁用maven下载进度指示?
方法 mvn -B ..或者mvn --batch-mode ...
- 表格组件---bootstrapTable
bootstrapTable中文官方网站http://bootstrap-table.wenzhixin.net.cn1.文件引用 //1.引用Jquery <script src=" ...
- 【ARM-Linux开发】TI AM437x调试WEB CAM
Rico Board是基于TI AM437x的一款小型学习板,提供的丰富的接口以及资源,能够实现很多有趣的idea,从本周起,开始总共四期的实验教程,帮助玩家们快速上手Rico Board在嵌入式上面 ...
- 最新 字节跳动java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.字节跳动等10家互联网公司的校招Offer,因为某些自身原因最终选择了字节跳动.6.7月主要是做系统复习.项目复盘.Leet ...
- NLog文章系列—系列文章目录以及简要介绍
参考文章:http://www.cnblogs.com/dflying/archive/2006/12/04/581750.aspx