AM使用指南之一:Transaction和DBTransaction的区别与联系
开发环境: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的区别与联系相关推荐
- 【转】肺小结节就诊指南:4种CT的区别及如何选择?
又到医院体检的季节,胸外科医师又要忙着给本院同事看片子了.目前体检查出的早期肺癌越来越多,主要归功于CT检查的普及,相较于X-ray胸片,CT对肺内小结节,特别是小于1cm的结节诊断率更高.因此,要提 ...
- python3怎么使用pyrex_用户指南 - Cython 和 Pyrex 之间的区别 - 《Cython 3.0 中文文档》 - 书栈网 · BookStack...
Cython 和 Pyrex 之间的区别 警告 Cython 和 Pyrex 都是移动目标.已经到了这一点,两个项目之间所有差异的明确列表将很难列出和跟踪,但希望这个高级列表能够了解存在的差异.应该注 ...
- mysql中autocommit,start transaction和begin/commit的异同
相同点:这三个关键字都与mysql的事务相关,直接操纵事务的语句, 不同点: (1)他们的作用范围不一样. AUTOCOMMIT是数据库innodb引擎级别的属性,对于start transactio ...
- FreeSql接入CAP的实践
CAP CAP 是一个基于 .NET Standard 的 C# 库,它是一种处理分布式事务的解决方案,同样具有 EventBus 的功能,它具有轻量级.易使用.高性能等特点. https://git ...
- C#使用ado.net打造多数据库通用操作类
1. 创建数据库类型枚举 public enum DbProviderType : byte {// <summary>/// 微软 SqlServer 数据库/// </summa ...
- mysql 不同连接的事务 会嵌套_MySQL——事务
事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致状态转换为另一种一致状态. 关键词 事务四大特性ACID MySql事务隔离级别 MVCC多版本并发控制 实 ...
- Mysql的事务事务的特征事务的隔离级别
目录 事务 事务的(ACID)特征 事务的隔离级别 事务 事务的概念: 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么 ...
- 以太坊geth结构解析和源码分析
原文地址: http://blog.csdn.net/DDFFR/article/details/74389051 第一部分 看看geth客户端的整体结构 创建私链的时候已经指定所有的信息都放在pr ...
- ssm mysql 插入date 数据_SSM中插入数据没有报错,但是数据库没有值?报错-问答-阿里云开发者社区-阿里云...
mybatis默认开启事务不会自动提交,只有调用了commit才会提交事务.你这种情况明显是事务成功执行了,而且自增ID也已生效,但事务本身没有提交,请调用mybatis的commit方法提交事务! ...
- Terracotta - 分布式共享对象
Terracotta是一种分布式java集群技术,它巧妙得隐藏了多个分布式JVM带来的复杂性,使得java对象能够透明得在多个JVM集群中进行分享和同步,并能够进行持久化.从某种意义上讲它类似于had ...
最新文章
- 刷题两个月,从入门到字节跳动offer,这是我的模板 | GitHub 1.2k星
- Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
- python决策树生成规则_如何从scikit-learn决策树中提取决策规则?
- Flex学习记录(一)——MXML基本知识
- 常见的清除浮动的五种解决办法
- jquery.autocomplete自动补齐和自定义格式
- 在配置使用Membership或其他的Providers的ASP.NET2.0时一定要设置applicationName属性
- 手机远程控制软件和开源框架
- matlab 傅里叶变换代码,傅里叶变换的原理及matlab实现.doc
- 3D立体显示大屏幕拼接视频墙系统解决方案
- android连麦功能,Android IOS WebRTC 音视频开发总结(七六)-- 探讨直播低延迟低流量的粉丝连麦技术...
- Show一下拿的奖杯
- 【Web技术】前端水印实现方案
- 手机里html转成pdf,HTML转成pdf
- npm 安装 bin/npm: line 1: ../lib/node_modules/npm/bin/npm-cli.js: No such file or directory
- C++ Combo Box控件用法
- Linux下载tomcat压缩包
- iib mq 在linux环境下安装
- LAMP—Mysql数据库
- Using Sketch with Framer 使用Sketch与Framer Lynda课程中文字幕
热门文章
- Python3快速入门—5.函数
- 网站攻击常见的几种方式
- 如何让自己不再暴躁易怒
- 磁盘 IO 真的比网络 IO 快吗?
- lcs问题java_动态规划法(十)最长公共子序列(LCS)问题
- passenger中的设置ssl
- iPhone删除的照片能恢复吗?苹果手机照片怎么恢复
- 生活用电安全常识:零线与地线的区别!
- 笔记本电脑计计算机硬盘分区,笔记本电脑如何分区,教您笔记本电脑如何分盘...
- Java项目:超市进销存管理系统(java+SpringBoot+Html+Layui+echarts+mysql)