2012年8月13日星期一

ADF_195:Task Flow使用指南之八:Transaction(1)

运行环境: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

没有评论: