马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
1.1. OAF状态管理
该部分讲述了OAF的状态管理结构,包括缓存应用客户数据以及页面间通信的技术。
1.1.1. 结构总览

1.1.2. ROOT AM(数据库会话以及事务状态保持)
如前所述,每个OAF页面均关联有一个rootAM,以便来提供事务上下文和JDBC的数据库连接。
RootAM是OA Framework模块的支柱,因为核心应用数据(在BC4J的VO、EO等中存储)和页面的web bean层次都自动缓存在rootAM的oracle.apps.fnd.framework.OADBTransaction对象中。
注意,使用浏览器的回退按钮会导致应用模块状态的丢失。在编码前,请阅读高级主题“支持浏览器的回退按钮”(Supporting the Browser Back Button)。在OAF开发课程第八章中关于编码规范部分也对如何处理该情况有具体的说明。
任何存储在AM事务中的数据,所有使用该rootAM的页面均是可以进行访问使用的。OA Framework提供了方法可以用来对用户数据进行存储、获取、删除操作。由于一个事务能不但能被来自控制器(客户端)还能被来自模型(服务端)的代码进行访问,则这些方法在oracle.apps.fnd.framework.webui.OAPageContext(控制器端)和OADBTransaction(服务端)类中均提供。
Root Application Module Retention(rootAM的保持)
默认情况下,当用户从一个页面导航到下一个页面(例如使用GET请求或是JSP服务器端重置),OA Framework生成一个新的页面时,AM中前一个页面的关联的实例被“释放”,新的实例从AM池中被请求出来。(参见后面的“AM池”部分)。
注:OA Framework不会在form提交POST请求的过程中自动释放AM,除非在控制器中进行干预。比如说,当一个用户在一个表格内进行排序或进行结果集导航时,这两个动作隐含提交了页面上的form,页面的rootAM实例被自动保持。
Retaining the Application Module Across Pages(页面转换时保持AM)
上面的描述的默认行为是发生在单独页面完成一个单独、完整工作的情况下。然而在实际的应用环境中,往往是多个页面间的流转实现一个简单的工作,或者是一系列相关的页面共同参与一个虚拟的事务。在这种情况下,这些不同的页面应该关联到相同的rootAM实例。
Ø 多页面流程中涉及到的每一个页面均应静态的关联到同一个rootAM类型。(请参考OAF开发课程第三张的Implementing the View中对声明页面属性的额外部分的内容)。
Ø 设置GET请求中页面URL参数,将AM保持标记retainAM设置为Y。该标记将在新的页面被创建的时候进行验证(前面说过,对于POST请求,OA Framework将不论retainAM参数值是否为Y,都将保持AM)。如果设置为“Y”,前一个页面的AM实例将被保持下来。如果设置为“N”(空值默认为“N”),OA Framework将会释放所有的AM-包括到该点时可能隐含保留的任何AM。
Conditionally Retaining/Releasing an Application Module(依据条件保持/释放AM)
在某些情况下,需要根据条件来判断AM是否应该被释放。可以通过为独立的AM实现oracle.apps.fnd.framework.webui.OAReleaseListener接口来完成。
注意:该接口不正确的使用可能会导致内存泄漏,OA Framework小组正在跟踪所有的实现。在不得不使用该接口的情况下必须确保正确使用。
Explicitly Releasing an Application Module(显式释放AM)
某些情况下,需要在OA Framework采用默认动作前,释放rootAM。这个时候,可以通过调用页面控制器的OAPageContext.releaseRootApplicationModule()方法来实现。OA Framework在完成页面的展现后即释放页面的rootAM,而不是等到下一个AM被请求时。
附件:
|