运行环境:JDeveloper 11.1.2.2.0 + Oracle Database 10g Express Edition 10.2.0.1。
本实验场景:3层嵌套的TaskFlow,Transaction分别设置为Always Begin New Transaction、Always Use Existing Transaction、Use Existing Transaction if Possible,测试三个TaskFlow中的修改操作是否在同一个事务之中。
实验设计说明:
1. adfc-config.xml
2. 第1层TaskFlow:update-location-btf.xml
(1)
(2)Transaction设置为Always Begin New Transaction
(3)点击OK按钮,Commit事务
(4)点击Cancel按钮,Rollback事务
3. 第2层TaskFlow:update-department-btf.xml
(1)Transaction设置为Always Begin New Transaction
(2)Transaction设置为Always Use Existing Transaction
(3)点击OK按钮,不Commit事务,只是返回到上一层TaskFlow
(4)点击Cancel按钮,不Rollback事务,只是返回到上一层TaskFlow
4. 第3层TaskFlow:update-employee-btf.xml
(1)Return Activity上的红色叉子警告可以忽略,因为我没有在Return Activity上Commit或Rollback事务
(2)Transaction设置为Use Existing Transaction if Possible
(3)点击OK按钮,不Commit事务,只是返回到上一层TaskFlow
(4)点击Cancel按钮,不Rollback事务,只是返回到上一层TaskFlow
5. 运行
(1)导航到Update Location TaskFlow,修改Location数据
(2)接着导航到Update Department TaskFlow,导航到修改Department数据
(3)接着导航到Update Employee TaskFlow,修改Employee数据
(4)然后点击OK按钮从Update Employee TaskFlow返回到Update Department TaskFlow
(5)然后再点击OK按钮从Update Department TaskFlow返回到Update Location TaskFlow。
(6)最后点击OK按钮,Commit事务。
(7)检查数据库表,发现Location、Department、Employee的数据都修改成功了。
说明:事务由第1层TaskFlow发起,因此也应该在第1层结束,在其它层Commit或Rollback事务是不行的。
我曾试验在Update Employee TaskFlow中Commit,发现数据并未提交。
Project 下载:ADF_TaskFlow_MultiTransactions.7z
参考文献:
1. https://blogs.oracle.com/raghuyadav/entry/adf_taskflow_transaction_manag
2. http://xmlandmore.blogspot.jp/2010/03/understanding-task-flow-transaction-and.html
没有评论:
发表评论