壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2784|回复: 5

[OAF] OracleOAF开发指南第二章翻译(中文)-(8)

[复制链接]
发表于 2008/4/7 13:42:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
Root Application Module Retention Use Case Scenarios

下表是保持/释放AM的用例以及建议说明

用例

建议

不连续的工作

当不相关页面间的导航完成时,不连续的任务不会保持AM

多页面流转

当相关页面间通过协同合作而包含了一个单独事务中的一个完整的工作,AM会被保持。

多页面相关 (虚拟事务)

当相关页面间的导航执行相同业务对象的不同的任务(即使页面为用户产生了不同的提交处),如果页面在UI上被紧密组合,AM会被保持。比如,一个可保持的AM允许你完成查询、更新、删除和打印采购订单。

带有子事务的多页面流转

涉及到多个页面的一个子事务,比如生成采购订单时生成供应商的时候,不要保持采购订单生成过程中的订单AM,而在生成供应商页面中使用OAPageContext.releaseRootApplicationModule 方法来释放其AM


注意:在钝化(passivation)以及JDBC连接池化/收集机制没有在OA Framework中被介绍前,开发者们总是经常性的释放AM,因为保持JDBC连接需要很多资源。但是如果你提高钝化性能,则不会有这个问题来让你烦恼。passivation是钝化的意思,也就是从内存中移到外存中。

1.1.1.      Servlet会话

与在“JSP Application Primer章节中所描述的servlet会话是实现在浏览器和服务器进行一系列连续的交互时在HTTP请求间保持状态的一个技术。一个会话可以在任何事件由应用来进行初始化,在用户关闭浏览器或一段时间内的不活动时由应用来中断。一个会话通常对应与应用中的一个登录到注销的过程,当然在OA Framework中也不完全时这种情况。(参考下面的Oracle应用用户会话)
你可以在servlet会话中选择缓存小型的,可序列化的对象(OA Framework中规定为字符串、数字和日期对象);在该会话内的任何数据都是可以被会话内有效的所有页面所使用的。比如,如果需要使用的数据每次从数据库查询出来的时候代价都比较大,则可以使用该办法将其保存在会话中,以减少数据库交互次数。
注意:使用会话进行中间数据的保持仅适用于你需要在多个页面中设置或访问单个值,而这些页面具有不同的rootAM。需要澄清一点的是servlet会话中的数据不会被自动清除,除非用户登出、返回全局主页开始一个新的事务流程或者发生会话超时的情况。因此,你必须在不再使用该数据的时候,将其显式删除。基于以上的原因,如果用户没有登出就结束了会话,这时没有事件触点可利用以便进行内存的清空,在该种情况下通过会话来进行处理就是最后的选择。
提示:有经验的JSP开发者会想知道为什么form种的隐藏域不能做为替代来使用呢?由于OA Framework当前的菜单实现的缘故(一些菜单在点击后提交的是GET请求而不是POST请求)。当用户通过选择菜单进行导航时,通常不太可能在相应的请求中添加参数值,此时rootAM的界限就发生了交错。
如果你想从servlet会话中存储、获取或者删除值,参见OAPageContext中操纵会话值的put*()get*()remove*()方法。
1.1.2.      Oracle应用用户会话

当用户登录进入OAF应用时,OA Framework会生成一个AOL/Joracle.apps.fnd.common.WebAppsContext对象并且一个浏览器的基于会话的cookie也会被生成。该cookie中将会保存诸如当前职责、组织ID以及其他各种各样的属性比如用户名、用户ID、雇员ID等等。
ü         Cookie中包含有一个加密过的关键标识。此关键标识对应的会话行存储在Application的数据库中。特别地,这个servlet会话的被加密的ID,在服务器端数据库中就做为ICX_SESSION表的主键而存在。
ü         WebAppsContext在每次请求后获取这个关键字段值并且用它来对当前的会话状态进行查询。
ü         Oracle Application中的用户会话与servlet会话有关联关系,有其自身的生命周期和超时属性。(参加附录B:配置文件选项中关于配置用户会话属性的部分)
注:通常来说,Oracle Application的用户会话比servlet会话的生命周期要长。Servlet会话很快就会超时。一个用户会话可能和多个servlet会话发生关联。比如说,在生成OAF费用报表的过程中,用户接了一个电话而导致servlet会话超时,那么还可以在用户会话超时前重新恢复该工作。
ü         如果用户会话发生超时,同时用户没有关闭浏览器(浏览器中基于会话的cookie没有丢失)并且没有在服务器数据库的ICX_SESSIONS表中删除相应的会话记录,则用户可以在被提示超时并重新登录后恢复以前的工作。
如果需要访问与用户会话有关的数据,可以通过OAPageContext(在控制器代码中)或者OADBTransaction(在模型代码中)。
Applications Context State
你也可以通过应用上下文来存储一些状态信息,比如在你不能访问OAPageContex的情况下(比如在PL/SQL或者Java server tier代码中)。这时,你需要使用WebAppsContext.setSessionAttribute(java.lang.String pName,java.lang.String pValue)方法。更多的信息,请查看WebAppsContextJavadoc

1.1.3.      页面上下文

每次页面的一个请求被接收到时,OA Framework创建一个OAPageContext并保持到新的页面完成处理。特别地,OAPageBean-页面处理背后的主体-生成OAPageContext
Request and Page Boundaries
与“剖析OAF页面”描述的一样,一个web应用的工作单元是一个请求/响应对(request/response pair):浏览器提交一个请求,servlet处理请求并且返回一个响应。一个response被看作是被完成的请求与新请求间的“边界”,意味着单个请求的结束。

同样的,当OAPageBean完成一个页面的处理,这也就是当前页面和新页面的“边界”。

所以,当一个用户从页面X导航到页面A,然后再到页面B,这就存在了两个请求边界:第一个是在页面X和页面A之间,第二个是在页面A和页面B之间。在页面X和页面A、页面A和页面B之间也有两个相同概念下的页面边界。


附件:
发表于 2009/5/22 12:20:33 | 显示全部楼层
学习。。。
发表于 2009/5/22 12:21:08 | 显示全部楼层
学习。。。
发表于 2009/8/17 11:21:57 | 显示全部楼层
顶顶顶顶顶
发表于 2010/5/30 13:40:22 | 显示全部楼层
楼主辛苦了。谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 07:03 , Processed in 0.018907 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表