运行环境:JDeveloper 11.1.2.2.0 + Oracle Database 10g Express Edition 10.2.0.1。
ADF Bounded TaskFlow有一个很重要的特性:Transaction。
这个Transaction的概念与Java EE中的Transaction是同一概念,只不过两者的配置方式不同。
在Java EE中的事务是直接使用批注配置在EJB的方法上或者配置在ejb.xml中,运行时由Container解析。
而TaskFlow中的事务是配置在控制器层的,其中的所有的Activity(View和其它非可视化的)都将属于一个事务。
打开一个Bounded Task Flow,在Property中找到Behavior,其中Transaction属性:
(1)No Controller Transaction:不加入任何事务。
(2)Always Begin New Transaction:开始一个新的事务,无论是否已经在一个事务之中。
(3)Always Use Existing Transaction:加入已有的事务,如果没有事务可加入,抛异常:ADFC-00006: Existing transaction is required when calling task flow。
(4)Use Existing Transaction If Possible:加入已有的事务,如果没有事务可加入,开始一个新的事务。
事务的提交是在Task Flow Return Activity上完成的,在Property中找到Behavior,其中End Transaction属性,我们可以设置如何提交事务(commit or rollback)。
本实验场景:一个TaskFlow中有多个修改页面,测试修改操作是否在同一个事务之中。
重点步骤说明:
1. 1个AM,1个DB Connection,1个Bounded TaskFlow
2. 其中的TaskFlow包括两个修改页面
3. 设置Transaction=Always Begin New Transaction
4. 每个修改页面都没有事务提交功能,而是交给Task Flow Return Activity负责
5. 运行
先后修改Department和Employee数据,发现改动后的数据均成功入库,说明修改操作是在一个事务之中。
Project 下载:ADF_TaskFlow_Transaction.7z
参考文献:
1. http://andrejusb.blogspot.com/2008/03/adf-task-flows-managing-transactions.html
没有评论:
发表评论