开发环境:JDeveloper 11.1.2.2.0 + Oracle XE Database 10gR2。

通过Application Module可以调用getDBTransaction().commit()来提交数据,实际上Application Module中还有另外一个方法:getTransaction()。
实际使用时,一般都直接使用getDBTransaction(),因此一直有一个疑问:如果使用getTransaction().commit(),数据库是否也提交了?

从API上来看,DBTransaction和Transaction都是接口,DBTransaction是Transaction的子类。
Transaction主要提供了一些事务常用到的方法:
(1)commit: Commits the transaction; saves all changes to the database. If the database connection is established, the transaction is implicitly started.
(2)connect: Attempts to establish a connection to the given database URL.
(3)disconnect: Disconnects the server from the database.
(4)getLockingMode: Gets the preferred locking mode for this transaction. 
In ADF BC, the locking mode defaults to LOCK_PESSIMISTIC; however, Oracle Fusion applications use optimistic locking by default.
(5)rollback: Rolls back the transaction; discards all changes
(6)setLockingMode: Sets the preferred locking mode for this transaction. Changing the locking mode affects only subsequent locks that are placed.
DBTransaction继承了以上方法,并提供了一些针对EO的方法:
(1)findByPrimaryKey()
(2)getSession()
(3)getEnvironment()

实验主要步骤如下:
1. 根据表Jobs,建立相应的EO,VO,AM。
2. 定制化VO,AM,为AM类增加两个方法:createJob() 和deleteJob()  
(1)createJob() 方法

    public void createJob() {JobsViewImpl jobVO = (JobsViewImpl)getJobsView1();JobsViewRowImpl newJob = (JobsViewRowImpl)jobVO.createRow();jobVO.insertRow(newJob);newJob.setJobId("Oracle");newJob.setJobTitle("CEO");newJob.setMinSalary(new Integer(10000));newJob.setMaxSalary(new Integer(50000));// newJob.setMinSalary(new oracle.jbo.domain.Number(10000));// newJob.setMaxSalary(new oracle.jbo.domain.Number(50000));getTransaction().commit();//getDBTransaction().commit();}

(2)deleteJob() 方法

    public void deleteJob() {JobsViewImpl jobVO = (JobsViewImpl)getJobsView1();JobsViewRowImpl currentJob = (JobsViewRowImpl)jobVO.getCurrentRow();jobVO.removeCurrentRow();getTransaction().commit();//getDBTransaction().commit();}

(3)saveJob() 方法

    public void saveJob() {JobsViewImpl jobVO = (JobsViewImpl)getJobsView1();JobsViewRowImpl currentJob = (JobsViewRowImpl)jobVO.getCurrentRow();getTransaction().commit();//getDBTransaction().commit();}

3. 创建页面,拖放JobsView1 Data Control,选择生成Form;再增加三个Button:Create、Delete和Save。
完整的Managed Bean代码如下:

package view;import model.AppModuleImpl;import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCDataControl;import oracle.jbo.ApplicationModule;import view.util.ADFUtils;public class MyBackingBean {public MyBackingBean() {}public String delete_action() {// DCDataControl dc = BindingContext.getCurrent().getDefaultDataControl();// ApplicationModule am = (ApplicationModule)dc.getDataProvider();ApplicationModule am = ADFUtils.getDCBindingContainer().getDataControl().getApplicationModule();AppModuleImpl service = (AppModuleImpl)am;service.deleteJob();       return null;}public String create_action() {// DCDataControl dc = BindingContext.getCurrent().getDefaultDataControl();// ApplicationModule am = (ApplicationModule)dc.getDataProvider();ApplicationModule am = ADFUtils.getDCBindingContainer().getDataControl().getApplicationModule();AppModuleImpl service = (AppModuleImpl)am;service.createJob();return null;}public String save_action() {// DCDataControl dc = BindingContext.getCurrent().getDefaultDataControl();// ApplicationModule am = (ApplicationModule)dc.getDataProvider();ApplicationModule am = ADFUtils.getDCBindingContainer().getDataControl().getApplicationModule();AppModuleImpl service = (AppModuleImpl)am;service.saveJob();return null;}
}

4. 分别测试getTransaction().commit() 和getDBTransaction().commit()。
进入到数据库中查看,两次测试记录都被成功创建、删除和保存。

5. 结论
(1)使用getTransaction().commit()和getDBTransaction().commit(),数据库都提交了。
(2)一般情况下使用Transaction就可以了,除非你需要使用DBTransaction上的方法。

Project 下载:ADF_AM_Transaction_DBTransaction.7z

http://maping930883.blogspot.com/2012/06/adf151amtransactiondbtransaction.html

AM使用指南之一:Transaction和DBTransaction的区别与联系相关推荐

  1. 【转】肺小结节就诊指南:4种CT的区别及如何选择?

    又到医院体检的季节,胸外科医师又要忙着给本院同事看片子了.目前体检查出的早期肺癌越来越多,主要归功于CT检查的普及,相较于X-ray胸片,CT对肺内小结节,特别是小于1cm的结节诊断率更高.因此,要提 ...

  2. python3怎么使用pyrex_用户指南 - Cython 和 Pyrex 之间的区别 - 《Cython 3.0 中文文档》 - 书栈网 · BookStack...

    Cython 和 Pyrex 之间的区别 警告 Cython 和 Pyrex 都是移动目标.已经到了这一点,两个项目之间所有差异的明确列表将很难列出和跟踪,但希望这个高级列表能够了解存在的差异.应该注 ...

  3. mysql中autocommit,start transaction和begin/commit的异同

    相同点:这三个关键字都与mysql的事务相关,直接操纵事务的语句, 不同点: (1)他们的作用范围不一样. AUTOCOMMIT是数据库innodb引擎级别的属性,对于start transactio ...

  4. FreeSql接入CAP的实践

    CAP CAP 是一个基于 .NET Standard 的 C# 库,它是一种处理分布式事务的解决方案,同样具有 EventBus 的功能,它具有轻量级.易使用.高性能等特点. https://git ...

  5. C#使用ado.net打造多数据库通用操作类

    1. 创建数据库类型枚举 public enum DbProviderType : byte {// <summary>/// 微软 SqlServer 数据库/// </summa ...

  6. mysql 不同连接的事务 会嵌套_MySQL——事务

    事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致状态转换为另一种一致状态. 关键词 事务四大特性ACID MySql事务隔离级别 MVCC多版本并发控制 实 ...

  7. Mysql的事务事务的特征事务的隔离级别

    目录 事务 事务的(ACID)特征 事务的隔离级别 事务 事务的概念: 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么 ...

  8. 以太坊geth结构解析和源码分析

    原文地址: http://blog.csdn.net/DDFFR/article/details/74389051 第一部分 看看geth客户端的整体结构  创建私链的时候已经指定所有的信息都放在pr ...

  9. ssm mysql 插入date 数据_SSM中插入数据没有报错,但是数据库没有值?报错-问答-阿里云开发者社区-阿里云...

    mybatis默认开启事务不会自动提交,只有调用了commit才会提交事务.你这种情况明显是事务成功执行了,而且自增ID也已生效,但事务本身没有提交,请调用mybatis的commit方法提交事务! ...

  10. Terracotta - 分布式共享对象

    Terracotta是一种分布式java集群技术,它巧妙得隐藏了多个分布式JVM带来的复杂性,使得java对象能够透明得在多个JVM集群中进行分享和同步,并能够进行持久化.从某种意义上讲它类似于had ...

最新文章

  1. 刷题两个月,从入门到字节跳动offer,这是我的模板 | GitHub 1.2k星
  2. Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
  3. python决策树生成规则_如何从scikit-learn决策树中提取决策规则?
  4. Flex学习记录(一)——MXML基本知识
  5. 常见的清除浮动的五种解决办法
  6. jquery.autocomplete自动补齐和自定义格式
  7. 在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
  8. 手机远程控制软件和开源框架
  9. matlab 傅里叶变换代码,傅里叶变换的原理及matlab实现.doc
  10. 3D立体显示大屏幕拼接视频墙系统解决方案
  11. android连麦功能,Android IOS WebRTC 音视频开发总结(七六)-- 探讨直播低延迟低流量的粉丝连麦技术...
  12. Show一下拿的奖杯
  13. 【Web技术】前端水印实现方案
  14. 手机里html转成pdf,HTML转成pdf
  15. npm 安装 bin/npm: line 1: ../lib/node_modules/npm/bin/npm-cli.js: No such file or directory
  16. C++ Combo Box控件用法
  17. Linux下载tomcat压缩包
  18. iib mq 在linux环境下安装
  19. LAMP—Mysql数据库
  20. Using Sketch with Framer 使用Sketch与Framer Lynda课程中文字幕

热门文章

  1. Python3快速入门—5.函数
  2. 网站攻击常见的几种方式
  3. 如何让自己不再暴躁易怒
  4. 磁盘 IO 真的比网络 IO 快吗?
  5. lcs问题java_动态规划法(十)最长公共子序列(LCS)问题
  6. passenger中的设置ssl
  7. iPhone删除的照片能恢复吗?苹果手机照片怎么恢复
  8. 生活用电安全常识:零线与地线的区别!
  9. 笔记本电脑计计算机硬盘分区,笔记本电脑如何分区,教您笔记本电脑如何分盘...
  10. Java项目:超市进销存管理系统(java+SpringBoot+Html+Layui+echarts+mysql)