OAF教程4-基础原理.doc_第1页
OAF教程4-基础原理.doc_第2页
OAF教程4-基础原理.doc_第3页
OAF教程4-基础原理.doc_第4页
OAF教程4-基础原理.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle Appliaction FrameworkOA Framework 教程Author:Danny ShenCreation Date:September 26, 2005Last Updated:九月 27, 2005Document Ref:Version:1.0ContentsJ2EE Web 技术简介iii什么是J2EEiiiJava Web编程技术的发展历史iii学习OAF所需的相关知识iv面向对象技术简介v面向对象的基本概念v面向对象的基本原则viiOA Framework 基础1OA Framework 框架技术简介1解析OA Framework Page1OA Framework状态管理14J2EE Web 技术简介什么是J2EEJ2EE,Java 2 Platform Enterprise Edition, 是Sun公司为企业计算推出的企业级Java平台。J2EE定义了一个适用于企业级计算的Java平台,支持多层、分布式应用。J2EE定义的标准架构包括了一个J2EE平台规范,其中定义了用于支持J2EE应用必须具备的特定的Java功能(API),如JSP(Java ServerPage)、EJB(Enterprise JavaBean)等。J2EE平台已经成为使用最广泛的Web程序设计技术,该技术主要支持两类软件的开发和应用:一类是做高级信息系统框架的Web应用服务器(Web application server),另一类是在Web应用服务器上运行的Web应用程序(Webapplication)。J2EE所包含的以下API:l Servletsl JavaServer Pagesl Enterprise JavaBeansl JDBCl Java Message Servicel Java Transaction APIl JavaMaill Java Activation Frameworkl Java API for XML Processingl Java Connector Architecturel Java Authentication and Authorization ServiceJava Web编程技术的发展历史随着Web的发展和兴起,Web技术也发生了翻天覆地的变化。从应用开发角度来看,Java Web编程技术主要经历了以下的发展过程(从JSP应用开始):1、单纯的JSP,Java代码(业务逻辑和显示控制)嵌入在HTML中最早的Java Web编程技术只是单纯的将Java代码嵌入在HTML中,混合而成。一个JSP文件中包含了所有的程序逻辑(业务逻辑、显示控制等)。在这种情况下,任何一部分的代码都不能直接的实现共享和重用。2、JSP与Java类混合(模型一)将业务逻辑封装到JavaBean(Java类或EJB)中,实现了业务逻辑与html代码的分离。但是HTML中仍然包含许多与显示相关的逻辑及一些控制逻辑。虽然这在很大程度上实现了代码的共享和重用,但是这种模型下,还有存在一些缺点:l Java 程序员除了开发服务,还要处理 HTML。HTML 和 Java 强耦合在一起。l 更改页面布局时需要更改JSP代码。l 内嵌的流程逻辑l 调试困难(混合了HTML、Javascript、Java)3、MVC模式的应用(模型二)将业务逻辑、流程控制、视图显示彻底分离。模型实现了应用核心的业务逻辑(EJB及其它业务对象);控制器实现应用的流程控制,它将来自页面的请求转化为对模型的操作,再将处理后的数据返回给视图显示(Servlet);视图提供了模型的表示(JSP)。Oracle 的OAF框架也是一个基于MVC的J2EE应用框架。学习OAF所需的相关知识1、 JSP、Servlet等基础WEB技术2、 JDBC数据库技术3、 XML4、 面向对象设计5、 Oracle技术,如SQL、PL/SQL等6、 EBS技术面向对象技术简介面向对象的基本概念面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。对象,属性,服务,对象标识对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务构成。属性是用来描述对象状态特征的一个数据项。服务是用来描述对象动态特征的一个操作序列。对象标识就是对象的名字,有“外部标识”和“内部标识”之分。类,一般类,特殊类,抽象类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。类的作用是用来创建对象,对象是类的一个实例。抽象与分类:忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,叫做抽象;把具有共同性质的事物划分为一类,得出一个抽象的概念,叫做分类。不同程度的抽象可得到不同层次的分类。较多地忽略事物之间的差别得到较一般的类;较多地注意事物之间的差别得到较特殊的类。如果类A具有类B的全部属性和全部服务,而且具有自己特有的某些属性或服务,则A叫做B的特殊类,B叫做A的一般类。继承特殊类拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。一般类与特殊类之间的关系叫泛化关系(继承关系),简称泛化。继承简化了人们对事物的认识和描述,非常有益于软件复用,是OO技术提高软件开发效率的重要原因之一。消息对象通过它对外提供的服务在系统中发挥作用。当系统中的其他对象或其他系统成分(如main函数)请求这个对象,执行某个服务时,该对象就响应这个请求,完成该服务。在OO方法中,把向对象发出的服务请求称为消息。例子:顾客买报纸消息是向对象发出的服务请求。在语法上,一条消息应包括消息名、入口参数和返回参数;在语义上,一条消息应包括发送者、接收者和其它需传送的信息。目前在大部分面向对象的编程语言中,消息其实就是函数(或过程)调用。但是,函数调用只是实现消息的方式之一,上述理解只适合于顺序系统。聚合与组合组合:用部分对象的类作为一种数据类型,用于定义整体对象的类的属性,构成嵌套对象。在这种形式中,一个部分对象只能属于一个整体对象,例如订单头和订单行,它们同生同灭。聚合:部分对象和整体对象都是独立定义和创建的,在整体对象中设立一个属性,它的值是部分对象的标识,或者是指向部分对象的指针。在这种形式中,一个部分对象可以属于多个整体对象,生命期可以不同。关联类之间的静态联系称作关联。类(或对象)和类(或对象)之间的关联包括一对一、一对多和多对多。多态性是指同一个命名可具有不同的语义。OO方法中,常指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。对于子类,可用不同的方法替代实现父类的服务的方法。面向对象的基本原则信息隐蔽或封装、消息传递、后期连接、委托、类/对象和关系等。抽象从事物中舍弃个别的非本质的特征,而抽取共同的、本质特征的做法叫抽象;也即,一个现实事物,可能担任很多角色,只有与问题域有关的角色,才予以考虑。过程抽象:任何一个完成确定功能的操作序列,其使用者都可把它看作一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。数据抽象:根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。封装把对象的属性和服务结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。只是向外部提供接口,降低了对象间的耦合度。由封装机制保证:数据不能被对象的使用者直接访问。只允许通过由对象提供的方法或代码访问数据。信息隐藏包含属性(数据)的对象定义其什么服务(函数)可被其他对象访问。实际上,其他的对象对被请求的对象怎样提供服务(方法/代码)没有感知。对象的服务定义其他的对象怎样获得对其方法的访问。每一个对象将愿意提供给所有对象的公共服务公开化。它也提供仅局限于特定对象的其它的服务(受保护的和私有的)。委托借助消息传递,工作可从一个对象(客户)传递到另一个对象(代理),因为从客户的观点,代理具有客户所需要的服务。工作连续地传递,直到到达了既有数据又有方法(代码)能完成这项工作的对象。消息通信即要求对象之间只能通过消息进行通讯,而不允许在对象之外直接地存取对象内部的属性。类/对象所有的对象都是类的实例。实例能够在运行时被产生(初始化)或销毁(删除)。对象怎样提供服务由该对象为其实例的类所决定。这样,同一个类的所有对象在响应特定的服务请求(功能调用)时使用相同的方法。行为分析关系机制为我们提供了用同等(关联、依赖)和层次(一般化/特殊化和聚合)结构组织类/对象的方法。很多面向对象的专家把模型的这部分结构称作静态模型。然而,一个应用/系统有了结构分析并不充分;我们还需要进行行为分析。行为分析是我们用来考察一个对象(类)是怎样提供它的服务(也就是方法)的过程。有两种类型的行为:静态行为和动态行为。在静态行为中,方法内的操作(代码)不被任何外部或内部的事件(动作)所影响。在动态行为中,发生这些变化的原因可能是由于对象存在很多不同的状态。随后,对象根据它的状态做出反映。使用命令式编程技术不能很好地处理这种类型的行为。使用另外的一种称为有限状态机的机制会更好地捕获这样的方法。如航班定票系统中的定票过程对象“机票”的状态:预定、等待、确认、取消、使用、归档。粒度控制引入包(package)的概念,使模型具有大小不同的粒度层次,以利于控制复杂性。20OA Framework 基础OA Framework 框架技术简介Oracle Application Framework(OA Framework)是 Oracle 提供的基于 HTML应用的开发和发布平台OA Framework 由一系列的中间层服务和 Oracle9i JDeveloper 的扩展(Oracle Applications Extension,OA Extension)组成OA Framework是一个基于MVC的应用开发框架,主要包括以下组件和技术框架:模型层使用BC4J(Business Components for Java),是一个管理持久性数据和实现业务逻辑的框架,主要包括以下对象:实体对象、实体关联对象、视图对象、视图链接对象、应用模块对象、事务对象等。视图层使用UIX框架,以XML来描述页面。控制器层使用Controller类,实现对Request/Response逻辑处理。解析OA Framework Page本节介绍一个OA Framework Page的基本元素。本节所包含的内容包括:l Page基础l 模型l 视图l 控制器l Web Bean结构Page基础在浏览器层次上,一个OA Framework Page和任何一个Web页面一样,都是由HTML来显示的。在中间层,页面在内存中实际上被一系列层次结构的Java Beans(非常类似于经典的Java 客户端界面)执行。每一个UI部件(按钮、表格、页标签等等)实际上正对应了层次中的一个或多个Web Beans。当浏览器请求一个新的页面时,OA Framework读取页面的声明性元数据定义来创建Web Beans层次结构。每个bean都关联着一个控制器,OA Framework调用你写的代码来初始化页面。当页面处理完成,OA Framework使用UIX框架来处理web bean层次结构,来生成并传递HTML给客户端。OA Framework MVC结构模型模型封装了底层的数据和应用程序业务逻辑。OA Framework基本的模型结构如下图所示:Application Module(应用程序模块)BC4J的应用程序模块本质上是一个管理和提供访问相关的BC4J模型对象的容器。应用程序模块类是oracle.apps.fnd.framework.server.OAApplicationModuleImpl的子类。每一个OA Framework页面都有一个根应用程序模块和顶层的页面区域(pageLayout区域)。根应用程序模块提供事务上下文和创建数据库连接。l 如果多个页面共同参与相同的物理或虚拟事务,它们应该共享相同的根应用程序模块。l 如果一个页面独立于任何一个页面执行职责,那么它应该拥有自己的应用程序模块。根应用程序模块可以包含一个或多个嵌套的应用程序模块,此时根应用程序模块可以访问所有的子应用程序模块的数据和对象,子应用程序模块分享根应用程序模块创建的事务。当你创建一个可重用的和数据库相交互的UI区域时,将会使用这个功能。Entity Objects and Association Objects(实体对象和关联)Entity ObjectsBC4J实体对象封装了与数据库表中行相关联业务规则(验证,行为等)。实体对象也可以基于视图,同义词或快照。实体对象类是oracle.apps.fnd.framework.server.OAEntityImpl的子类。实体对象在它们的属性和底层数据表列之间使用声明性的映射,来自动实现查询、插入、更新和删除。在许多案例中,你需要增加验证规则逻辑。Association Objects如果你有一些复杂的实体对象,比如3个层次的采购订单,订单头、订单行、订单发运之间存在着一对多的关系,你可以根据相应的实体对象创建关联对象来定义这种一对多的关系。可以创建弱的关联,比如订单头和供应商之间的关系(供应商独立于任何一个采购订单),还可以创建强组合的关联,比如订单头拥有订单行,订单行不能独立于订单头而存在。View Objects and View Links(视图对象和视图链接)View Object在最简单的情况下,视图对象封装了一个数据库查询,视图对象提供了遍历结果集的功能。结果集包含了view row,每个row有对应于查询的字段的属性组成。视图对象类都是oracle.apps.fnd.framework.server.OAViewObjectImpl类的子类。可以使用以下之一的策略配置视图对象:l 视图对象的属性映射到一个简单查询语句的列(通常用于小型的,只读的视图对象)l 视图对象的属性映射到实体对象的属性(通常用于插入、更新、删除实体对象)l 一些属性映射到实体属性,而另一些直接映射到SQL查询的列(使用临时列,如一个计算的列)在OA Framework应用程序,在以下的场景中使用视图对象:l 以最优化的方式在特定的用户界面中展现数据。如果用户界面提供插入、更新和删除实体对象,你将通过视图对象来执行这样的功能l 以简单的查询创建下拉列表、LOV及其它UI控件l 创建供业务逻辑使用的有效的验证查询。比如在采购订单头实体对象中,必须使用一个验证的查询来获得当前最大的采购订单行号来增加一个新的行。View Link类似于实体关联。OADBTransactionOADBTransaction在模型中处于中心的位置,封装了和根应用模块相关联的JDBC连接,并且直接拥有创建的实体对象。(应用程序模块拥有视图对象,通过视图rows关联着实体对象)。OADBTransaction用途:l 创建一个callable statement执行PL/SQL函数和过程l 访问session级应用程序环境,如用户名、id、当前职责等l 在需要执行NLS操作(如更改服务器的日期格式为用户日期格式)时,访问oracle.apps.fnd.framework.OANLSServices对象视图视图编排并展现模型数据给用户。定义页面在开发阶段,使用JDeveloper工具声明性的定义页面的bean层次,如果不是基于Oracle Applications开发,那么OA Framework在数据库之外运行页面定义。定义的页面包括region和item:l item是一些简单的小部件,如button、fields、images等等不包含子部件的小部件l region是一个用于包含item和其它region的容器对象l 每个定义的region和item都包含一个style属性,以便在运行时,OA Framework知道创建什么样的web bean对象l 所有的页面必须有一个style为pageLayout的top-level region(root region)。这个region将被实例化成oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBeanl OA Framework将以在JDeveloper页面的树结构中region和item的出现次序,增加到bean层次结构中。图中的名称对应了web beansAttribute Sets每个region或者item都能继承属性集中的一组属性。一个属性集是一个有名称的可重用的属性集合,能够被任意类型的UI对象使用,如regions、items及其它attribute sets。在应用开发时,每个表都必须关联属性集以显示每一列。这些属性集包含prompt、display width等等。控件重用如果你需要在页面中使用共享对象,你可以简单的扩展他们。数据源绑定包含数据库交互(查询、插入、更新、删除)的beans,需要给一个视图对象实例指定data source binding,关联视图属性。OA Framework使用数据源绑定来获得查询的数据,写入用户输入的数据。视图对象实例名称是指应用模块中包含的实例化的视图对象的名称,而不是视图对象的名称。控制器控制器响应用户的动作,指挥应用程序的流程。在大多数的情况下,控制器在region级别上关联着视图。所有的控制器类都是oracle.apps.framework.webui.OAControllerImpl的子类。控制类定义了web beans如何运转:l 在运行时初始化和操作UI(包括任何你不能使用声明的方式创建的layout)l 截取和处理用户事件处理请求当浏览器使用OA.jsp来请求一个页面时:l oracle.apps.fnd.framework.webui.OAPageBean(主要的OA Framework页面处理类)使用页面的名称从应用模块池中获得需要的根应用模块。这个应用模块同时也从连接池中获得一个JDBC,同时页面的事务环境也被建立l 验证用户session是否有效,如果无效,则转到登录页。l OAPageBean根据请求参数来判断(GET或POST)和处理请求处理一个GET请求当处理一个GET请求时,OA Framework使用声明的UI定义来创建web bean层次:l OAPageBean在页面顶层pageLayout bean上调用processRequest(),整个web bean层次按下面所述的递归地被处理来初始化web beans,包括任何相关的模型组件。n 每个web bean实例化它的控制器(如果它包含控制器),调用控制器的processRequest方法。使用这个方法你可以构造或修改页面layout,设置web bean属性及执行任何手工的数据初始化(比如在导航到页面前先执行自动查询)n 一些复杂的web bean(如oracle.apps.fnd.framework.webui.beans.table.OATableBean和oracle.apps.fnd.framework.webui.beans.layout.OAPageLayoutBean)通过调用控制器的prepareForRendering()方法来进行处理n 每个web bean在它们的子bean上调用processRequestl oracle.apps.fnd.framework.webui.OAPageBean将web bean层次传递给UIX以生成HTML再传递给浏览器处理一个POST请求当处理一个POST请求时:l OAPageBean检查是否内存中已包含web bean层次,(因为资源是可再生的)如果没有则按上面GET请求所描述的过程重新创建层次l OAPageBean在层次的每个bean上调用processFormData,来将Form中的数据写入模型(先在pageLayout region上调用processFormData,然后递归调用每个web bean)。将Form数据写入底层的模型将自动调用属性和实体级的验证,如果验证有异常,则处理停止,将错误信息显示给用户。l OAPageBean在所有层次上的bean以上面所述相同的方式调用processFormRequest,这个方法可以加入控制器代码来响应用户的动作l 如果没有JSP Forward或者redirect及异常,那么页面将被刷新OAPageContext当OA Framework接受到一个OA.jsp请求,OAPageBean创建一个oracle.apps.fnd.framework.webui.OAPageContext对象(仅仅在页面处理时才存在)。上面所讲的3个核心方法processRequest、processFormData、processFormRequest都以OAPageContext作为参数,任何控制器代码总是使用这个重要的类。OAPageContext包含请求和根应用模块的引用,这种关联关系,事实上OAPageContext在控制器的每一个reponse处理方法被传递,OAPageContext所处理的任何如下所述:l 访问Request参数通过OAPageContext类的getParameter(String name)方法获取请求参数值。l 访问根应用模块OAPageContext包含了一个根应用模块的引用,通过根应用模块可以访问视图对象和事务对象:OAApplicationModule am = (OAApplicationModule)pageContext.getRootApplicationModule();l 使用导航使用OAPageContext执行JSP Forward和Redirect:pageContext.setForwardURL(OA.jsp?page=/oracle/apps/dem/employee/webui/EmpDetailsPG,null,OAWebBeanConstants.KEEP_MENU_CONTEXT,null,null,true, / Retain AMOAWebBeanConstants.ADD_BREAD_CRUMB_YES, / Show breadcrumbsOAWebBeanConstants.IGNORE_MESSAGES);l 访问应用环境信息OAPageContext提供了一个servlet级的Oracle Applications环境来访问如用户名、id、职责等等的信息。String userName = pageContext.getUserName(); Web Bean结构首先,OA Framework bean类的子类对应着UIX的框架的bean类。每一个OA Framework web bean实现了一组实现了OA Framework增加到基础的UIX bean的全部行为的接口。(在UIX bean基础上增加了一些用于OA Framework的接口)l oracle.apps.fnd.framework.webui.beans.OAWebBean定义所有web bean的核心行为,定义了每个web bean执行的processRequest、processFormData、processFormRequest方法。l oracle.apps.fnd.framework.webui.OAWebBeanConstants定义通用的个性化定义及数据源管理的行为l oracle.apps.fnd.framework.webui.beans.OAWebBeanContainer定义所有容纳其它web bean的bean的特征,只有当bean实现了这个接口才可以拥有控制器l OAWebBean定义OA Framework环境下一个bean固有的行为。如OATableBean实现了oracle.apps.fnd.framework.webui.beans.OAWebBeanTable接口。内部Bean结构每个web bean维护着它自身的以下信息:l _indexedChildren:child web beansl _namedChildren:child web beans that UIX tags for special behaviorl _attributes:web bean描述性的属性,如下图数据绑定值web bean的属性值在显示时实际上通过数据绑定值由地层数据源提供。Rendering在页面rendering时,UIX框架处理web bean层次来产生HTML。rendering contextOA Framework Javadoc向导oracle.apps.fnd.framework包含能安全访问模型(server)和用户界面控制器(client)代码的类和接口。比如当页面需要访问一个根应用模块时,你将使用oracle.apps.fnd.framework.OAApplicationModule接口(不要去访问客户端应用模块的实现)。这个包还包含以下内容:l 所有OA Framework的异常类l 执行国际化操作所需的OANLSServices类oracle.apps.fnd.framework.server包含了实现model的类和接口。这些类被任何用户界面使用(不仅仅是OA Framework HTML pages),这些类都应该包含任何oracle.apps.fnd.framework.webui包或子包里类的引用或者任何应用程序指定的webui包和子包。当创建一个应用模块时,你将总是使用这个包下的类而不是他们扩展的BC4J的类。注意:永远不要在控制器或视图中加入这个包下的类。oracle.apps.fnd.framwork.webui包含创建和处理OA Framework UI的核心类。包中最常用的类和接口:l OAControllerl OAPageContextl beans子包里的类注意:永远不要在模型中调用这个包里的类。oracle.apps.fnd.framework.webui.beans包含不在各种bean子包中的操作UI控件的web bean类。当写一个UI控制器时,你需要以编程的方式操作这些web bean。包里还包含所有web beans实现的核心OA Framework接口。包和子包里的类对应了UIX控件。你将总是使用OA Framework里的类,除非你想使用一个OA Framework还不支持的仅在UIX使用的类。UIX PackageOA Packageoracle.cabo.ui.beansoracle.apps.fnd.framework.webui.beansoracle.cabo.ui.beans.formoracle.apps.fnd.framework.webui.beans.formoracle.cabo.ui.beans.includeoracle.apps.fnd.framework.webui.beans.includeoracle.cabo.ui.beans.layoutoracle.apps.fnd.framework.webui.beans.layoutoracle.cabo.ui.beans.messageoracle.apps.fnd.framework.webui.beans.messageoracle.cabo.ui.beans.navoracle.apps.fnd.framework.webui.beans.navoracle.cabo.ui.beans.tableoracle.apps.fnd.framework.webui.beans.table注意:永远不要在模型中调用这个包里的类。oracle.apps.fnd.framework.webui.beans.form包含含有HTML form(包含submit按纽和各种数据entry/specification控制)的web bean类(checkbox, radio group, shuttle, text input field等)。许多这个包下的类是oracle.apps.fnd.framework.webui.beans.message包下的类的变种。(message web beans拥有显示错误、信息、和解释一起的警告图标的能力,而相应的数据entry/specification web beans不具有这些)。当使用JDeveloper创建页面时,OA Framework自动实例化这两个包里的message beans。你将仅仅在以下两种情况下使用这个包下的类:l 类不包含可选的message bean(如OASubmitButtonBean仅仅在这个包里存在)l 不能使用message beanoracle.apps.fnd.framework.webui.beans.include包含外部资源的页面中的片段的web beans。注意:不要在模型中使用该包下的类。oracle.apps.fnd.framework.webui.beans.layout包含页面中放置内容的web beans。如:hide/show, content containers, bulleted lists, headers, standardized templates for single/double column layouts等。注意:不要在模型中使用该包下的类。oracle.apps.fnd.framework.webui.beans.message包含能显示HTML form数据entry/specification控件的错误、信息等的web bean。注意:不要在模型中使用该包下的类。oracle.apps.fnd.framework.webui.beans.nav包含导航控件(links, trees, menu elements, quick links, breadcrumbs等等)的web beans。注意:不要在模型中使用该包下的类。oracle.apps.fnd.framework.webui.beans.table包含tables和HGrid(tree和table的混合,table中显示tree)控件的web bean类。注意:不要在模型中使用该包下的类。oracle.apps.fnd.framework.webui.laf包含用于控制HTML rendering特征(look-and-feel和context-specfic)的行为的工具类。注意:不要在模型中使用该包下的类。OA Framework状态管理本章介绍OA Framework状态管理结构,包括缓存客户数据和页面间通信。结构简介概念上的状态管理,如下图所示:根应用模块(数据库session和事务状态)根应用模块是任何OA Framework模块的核心,因为主要的应用数据(保存在BC4J视图对象、实体对象等等)和页面的web bean层次自动患存在根应用模块的oracle.apps.fnd.framework.OADBTransaction对象中。注意:使用浏览器的后退按钮,将导致应用模块状态的丢失。所有共享根应用模块的页面都可以访问保存在transcation对象上的数据。OA Framework提供了从transcation保存、返回和删除应用数据的方法。单一的一个transcation可以同时被控制器(client)和模型(server)访问,这些方法同时被oracle.apps.fnd.framework.webui.OAPageContext(控制器)和OADBTranscation(模型)提供。根应用模块保持默认情况下,当用户从一个页面向另一个页面导航时,OA Framework rendering新的页面,和前一个页面相关的应用模块被释放,新的应用模块实例从应用模块池中获得,如下图:OA Framework在form 提交(POST)期间不会释放应用模块,除非你在控制器代码中明确地释放。所以如果一个用户对表格里的数据排序或在表中的结果集导航,两个动作隐含的从页面中提交,页面的根应用模块实例将自动保持。在页面间保持应用模块上面介绍是在一个孤立的页中保持应用模块,如果一系列页面共享一个虚拟的transcation,不同的页面需要被关联到同一个根应用模块。为了实现这个,必须执行以下工作:l 在multipage flow中为每个页面关联到相同的根应用模块l 设置页面的URL参数retainAM=Y。在GET请求中,OA Framework根据这个参数保持根应用模块;而对POST请求,OA Framework总是保持应用模块,而忽略retainAM参数。注意:仅仅简单的为每个页面指定相同的根应用模块是不够的,还需要设置retainAM参数。有条件的保持/释放应用程序模块实现oracle.apps.fnd.framework.webui.OAReleaseListener接口。明确释放应用程序模块在页面的控制器里调用OAPageContext.releaseRootApplicationModule(),OA Framework将在完成页面rendring后释放页面的根应用模块。根应用模块保持使用场景1、无关的,离散的任务不应该使用保持。2、Multipage Flow当在一个单一的事务中相互协作地组成一个完整的任务的多个相互关联的页面之间导航,应该保持应用模块。3、关联的页面(虚拟的事务)当在使用相同的业务对象执行不同任务的相互关联的页面间导航,如果页面紧密联系着UI,应该保持应用模块。4、带分支事务的Multipage Flow比如当创建采购订单时同时创建供应商,应该在主采购订单流程中保持应用模块,同时在创建供应商页面中使用OAPageContext.releaseRootApplicationModule方法。Servlet SessionOA Framework仅仅允许在session中缓存String、Number及Date。操作Servlet Session使用OAPageContext put*() get*() remove*()Oracle Applications用户Session当用户登陆到OA Framework应用,OA Framework创建一个AOL/J对象(mon.WebAppsContext)和一个基于浏览器cookie的session来保持主要的应用环境信息,如当前的职责,or

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论