AM使用指南之六:使用Shared AM提高性能
来源:互联网 发布:西安丝路软件 编辑:程序博客网 时间:2024/05/22 16:41
开发环境:JDeveloper 11.1.2.2.0 + Oracle XE Database 10gR2。
默认情况下,每个用户发出一个请求,都会实例化一个新的AM来响应该请求。
与一般的AM不同,Shared AM可以只由一个AM实例来满足多次请求,适用于一些共享和公共的资源,比如公共的LOV:DepartemntLOV,ManagerLOV。
当然,由Shared AM管理这些LOV的前提是:这些LOV的数据基本很少改变,相对是“静态的”。
我们可以把这些公共的VO集中起来,统一交由Shared AM来管理,这样这些LOV将被一直存在于Application或Session范围中,大大减少访问数据库的次数,从而提高性能。
重点步骤说明:
1. 创建要Shared AM的Model Project
先后分别创建两个ADF Model Project:
(1)common.model.hrHrCommonModel:包括HrCommonAppModule AM、Jobs EO、JobsView VO。
(2)common.model.org.OrgCommonModel:包括OrgCommonAppModule AM、Departments EO、DepartmentsView VO。
特别要注意的是:一定要修改默认的Packge路径,不要和其它Package路径发生冲突,因为这些对象都是要被别的Project引用的。
2. 以ADF Library Jar File的形式发布要Shared AM的Model Project
3. 新建一个ADF应用,选择Employees Table
(1)为Model Project导入其它两个Model Project的ADF Library Jar File。
(2)为Model Project添加两个Shared AM,即HrCommonAppModule和OrgCommonAppModule。
注意,Shared AM将自动使用Shared Configuration,即HrCommonAppModuleShared和OrgCommonAppModuleShared,无论默认的配置是否设置的是Local Configuration。
(3)为EmployessView的DepartmentId和JobId分别增加LOV,分别指向OrgCommonAppModule中的DepartmentsView和HrCommonAppModule中的JobsView。
注意:这里只能使用Choice List作为展现形式,而不能使用Input Text with LOV。
因为Shared AM中的LOV是为所有用户服务的,因此必须是只读形式,而不能允许查询,否则会影响其它用户使用。
(4)创建页面,拖放Employee。
4. 为HrCommonAppModuleShared和OrgCommonAppModuleShared的jbo.shared.txn设置同样的值
这样设置后,HrCommonAppModuleShared和OrgCommonAppModuleShared将会共享一个数据库连接。
我觉得不设置这个属性也可以,因为除了第一次使用以外,以后都是从内存中读取LOV,不会再访问数据库。
5. 运行
使用SQL语句查询数据库连接数:select count(sid),username from v$session group by username;
(1)页面第一次Load出来,显示连接数:3。
解释:AppModule、HrCommonAppModule、OrgCommonAppModule各自使用了一个数据库连接。
(2)重新打开一个浏览器,再次访问页面,显示连接数:4。
解释:只有AppModule新增了一个AM实例,该实例使用了一个数据库连接,其它两个AM没有访问数据库。
即两个LOV的数据是从内存读取的,说明Shared AM的确起作用了。
Project 下载:ADF_AM_Shared.7z
参考文献:
1. http://www.oracle.com/technetwork/developer-tools/adf/learnmore/87-lov-using-shared-am-444769.pdf
2. 《Fusion Developer's Guide for ADF》之 Sharing Application Module View Instances
3. http://jobinesh.blogspot.jp/2011/05/two-root-application-modules-sharing.html
4. http://www.avromroyfaderman.com/2008/09/shared-application-module-instance-tricks-part-i-service-methods/
默认情况下,每个用户发出一个请求,都会实例化一个新的AM来响应该请求。
与一般的AM不同,Shared AM可以只由一个AM实例来满足多次请求,适用于一些共享和公共的资源,比如公共的LOV:DepartemntLOV,ManagerLOV。
当然,由Shared AM管理这些LOV的前提是:这些LOV的数据基本很少改变,相对是“静态的”。
我们可以把这些公共的VO集中起来,统一交由Shared AM来管理,这样这些LOV将被一直存在于Application或Session范围中,大大减少访问数据库的次数,从而提高性能。
重点步骤说明:
1. 创建要Shared AM的Model Project
先后分别创建两个ADF Model Project:
(1)common.model.hrHrCommonModel:包括HrCommonAppModule AM、Jobs EO、JobsView VO。
(2)common.model.org.OrgCommonModel:包括OrgCommonAppModule AM、Departments EO、DepartmentsView VO。
特别要注意的是:一定要修改默认的Packge路径,不要和其它Package路径发生冲突,因为这些对象都是要被别的Project引用的。
2. 以ADF Library Jar File的形式发布要Shared AM的Model Project
3. 新建一个ADF应用,选择Employees Table
(1)为Model Project导入其它两个Model Project的ADF Library Jar File。
(2)为Model Project添加两个Shared AM,即HrCommonAppModule和OrgCommonAppModule。
注意,Shared AM将自动使用Shared Configuration,即HrCommonAppModuleShared和OrgCommonAppModuleShared,无论默认的配置是否设置的是Local Configuration。
(3)为EmployessView的DepartmentId和JobId分别增加LOV,分别指向OrgCommonAppModule中的DepartmentsView和HrCommonAppModule中的JobsView。
注意:这里只能使用Choice List作为展现形式,而不能使用Input Text with LOV。
因为Shared AM中的LOV是为所有用户服务的,因此必须是只读形式,而不能允许查询,否则会影响其它用户使用。
(4)创建页面,拖放Employee。
4. 为HrCommonAppModuleShared和OrgCommonAppModuleShared的jbo.shared.txn设置同样的值
这样设置后,HrCommonAppModuleShared和OrgCommonAppModuleShared将会共享一个数据库连接。
我觉得不设置这个属性也可以,因为除了第一次使用以外,以后都是从内存中读取LOV,不会再访问数据库。
5. 运行
使用SQL语句查询数据库连接数:select count(sid),username from v$session group by username;
(1)页面第一次Load出来,显示连接数:3。
解释:AppModule、HrCommonAppModule、OrgCommonAppModule各自使用了一个数据库连接。
(2)重新打开一个浏览器,再次访问页面,显示连接数:4。
解释:只有AppModule新增了一个AM实例,该实例使用了一个数据库连接,其它两个AM没有访问数据库。
即两个LOV的数据是从内存读取的,说明Shared AM的确起作用了。
Project 下载:ADF_AM_Shared.7z
参考文献:
1. http://www.oracle.com/technetwork/developer-tools/adf/learnmore/87-lov-using-shared-am-444769.pdf
2. 《Fusion Developer's Guide for ADF》之 Sharing Application Module View Instances
3. http://jobinesh.blogspot.jp/2011/05/two-root-application-modules-sharing.html
4. http://www.avromroyfaderman.com/2008/09/shared-application-module-instance-tricks-part-i-service-methods/
5. http://www.avromroyfaderman.com/2008/09/shared-application-module-instance-tricks-part-ii-displaying-data/
http://maping930883.blogspot.com/2012/07/adf156amshared-am.html
0 0
- AM使用指南之六:使用Shared AM提高性能
- AM使用指南之五:在AM中执行SQL语句
- AM使用指南之二:Nested AM与Root AM之间的Transaction关系
- Android 开发之am使用
- am
- AM使用指南之三:如何在Managed Bean中获取AM实例?
- AM使用指南之四:把AM中的方法发布为WebService
- AM使用指南之七:Configuration参数说明(1)
- AM使用指南之七:Configuration参数说明(2)
- AM使用指南之七:Configuration参数说明(3)
- AM使用指南之七:Configuration参数说明(4)
- AM使用指南:如何在Managed Bean中获取AM实例?
- AM使用指南:在AM中执行SQL语句
- Makefile.am使用
- Android命令使用--am
- 使用git am打补丁
- am 命令使用
- Android AM命令使用
- java学习笔记5
- POJ 2195 Going Home (最小费用最大流)
- [LeetCode]Longest Palindromic Substring
- POJ 1151 Atlantis
- 如何调用百度卫星地图
- AM使用指南之六:使用Shared AM提高性能
- HDU 2094 STL
- 10.获取客户端指定路径下的文件目录,并传输至服务器端--客户端
- AM使用指南之七:Configuration参数说明(1)
- 快速排序的简单实现
- Libgdx的使用(15)——使用Gradle构建速度慢的问题
- Drainage Ditches(网络流_EK模板)
- AM使用指南之七:Configuration参数说明(2)
- OpenERP 之 Relational Types(关联类型)