2009年5月10日星期日

Oracle Application Development Framework 简介

1.1    概述

    Oracle Application Development Framework是Oracle Fusion中间件体系架构的重要组成部分,是一个端到端的J2EE开发框架。ADF框架通过提供实用级别的基础架构服务和虚拟的声明式开发体验,从而简化了J2EE开发。不同于其他开源开发框架,Oracle ADF提供了一个包含Business Service、Model、View、Controller的完整MVC实现,在企业应用架构的每一个层次都提供了支持。

1.2    Oracle ADF 11g框架简介

    ADF架构图:
    如架构图所示,Oracle ADF 11g分别提供了MVC架构中每一层次的实现,并允许在不同层次使用不同的技术。如可以使用ADF Business Components构件Business Service层,使用structs构建Controller层等。这里主要描述使用Oracle ADF对MVC框架的实现构建,即Business Service层使用ADF Business Component,Model层使用ADF Model,Controller层使用JSF,View层使用JSF/ADF Faces。

1.2.1    View 层

    最简单的View层实现即为一个包含用户界面组件的页面,并允许该页面中的组件调用Model层中的方法。Oracle ADF为了提高View层的重用程度,引入了如下结构体系。
  • Page
    使用JDeveloper构建的Page即为最终向用户展现的Web 页面,其为Oracle 富客户端组件构建的基础。
  • Page Fragment
    Page Fragment的创建与使用与Page极其相似,对于开发人员来说,在JDeveloper中开发一个Page与开发一个Page Fragment基本没有什么区别。Page与Page Fragment的主要区别在于,Page Fragment并不是最终向用户展现的页面,它可以作为一个Page的组件所存在。在通常的开发场景下,常遇到部分页面的某部分布局和业务逻辑固定不变的情况。在ADF中可将其开发为一个Page Fragment,并将其作为页面组件放入所需Page中,以提高页面的可重用程度。
    得益于Page Fragment的可重用特性,在常见的应用场景中,并不需要为一个业务流程创建一组页面,而只需创建针对该业务流程的一个页面以及与其相对的一组Page Fragment即可。
  • Page Template
    Page Template可以用于构建Page 或 Page Fragment,并可将其上放置的ADF富客户端组件与Model/Controller绑定以执行业务逻辑。Page Template主要用于用于快速构建一组具有相同部分的页面。Oracle ADF开发人员可以创建一个模板,并基于模板创建Page或Page Fragment。
    在常的应用场景下,可以通过Page Template构建某应用的页眉、页脚、导航栏等,而将页面内容的构筑交予其他开发人员,进一步降低开发耦合度,提高团队协作水平。
  • Region
    Region是Fusion架构体系中新引入的概念,可以被应用于Page或Page Fragment。可以将Page Fragment或Task Flow作为Region放入Page中,而Page Fragment、Task Flow、目标Page将分别使用独立的上下文配置。
    常见的使用场景是使用Region构建页面内容,以实现导航菜单与页面内容的松耦合设计。
  • Contextual Event Framework
    Oracle ADF为实现View的松耦合设计,允许通过Context对页面富客户端组件添加绑定,以调用Controller或Model(Bussiness Service Application Model)中的方法,实现MVC架构中的调用关系。这种基于上下文的事件处理架构即称为Contextual Event Framework。
  • ADF富客户端组件
    在Fusion架构体系中,ADF提供了超过100种富客户端组件供开发人员在Page或Page Fragment上创建富用户交互界面。所有组件均基于JSF及AJAX技术构建。包括:
    • 页面布局控件
    • 表/树控件
    • List of Value控件
    • 输入控件
    • 导航控件
    • 输出控件
    • 查询控件
    • 数据图表组件

1.2.2    Controller层

ADF Controller是ADF应用的重要组成部分,用于控制用户交互及程序流的执行。其核心为Task Flow,包含如下内容:
  • Task Flow
    Task Flow任务流供开发人员定义一组Page或Page Fragment之间的流程及逻辑关系。Task Flow中的对象可视为一组活动(activities),如每一个加入Task Flow中的Page或Page Fragment均被视为一个视图活动(View activity)。当用户在一个Task Flow中的各个页面间跳转时,即可视为在各视图活动之间的跳转。亦可在Task Flow中添加其它类型的活动。Oracle ADF已经将Task Flow中的各种活动包装为组件供用户调用。
    Task Flow在Oracle ADF中包含两种类型的实现:Bounded Task Flow/Unbounded Task Flow。
  • Bounded Task Flow
    Bounded Task Flow是Oracle ADF框架支持的两种Task Flow实现之一。该类型的Task Flow支持事务处理和作为Region重用,具体具有如下特性:
    • 定义明确的事务处理边界;
    • 单个Task Flow入口及零至多个定义明确的Task Flow出口;
    • 支持PageFlow级别的变量传递,可以将定义的变量在Task Flow的各个活动间传递;
    • 允许为该Task Flow创建新的实例;
    • 允许在退出该Task Flow之前执行commit或rollback的操作;
    • 当该类型Task Flow被其他Task Flow调用时,允许在进入该Task Flow时传入参数作为PageFlow级别的变量;
    • 当该类型Task Flow被其他Task Flow调用时,允许在退出该Task Flow时返回变量。
  • Unbounded Task Flow
    Unbounded Task Flow与Bounded Task Flow的主要区别在于Unbounded Task Flow没有定义明确的边界,不支持将某活动定义为Task Flow的入口,亦不可将其作为Page的Region使用。每一个ADF应用中只包含一个Unbounded Task Flow。典型的应用情境是使用Unbounded Task Flow构造导航栏,调用Bounded Task Flow。
    注意,若一个ADF应用中定义了多个Unbounded Task Flow文件,编译时会对Unbounded Task Flow进行合并。若一个Unbounded Task Flow中的视图活动(View activity)被设置为bookmarkable时,则可通过URL直接访问这个视图活动。
  • Task Flow Template
    Task Flow Template提供了重用一个或多个Bounded Task Flow的方法。这里的重用包含两种机制:复制(Copy)和引用(reference)。

1.2.3    Model层

    Model层提供了访问源数据及业务逻辑的功能。在Fusion架构中,将源数据的访问与业务逻辑的访问分为两部分:Data Control与Business Service。Data Control使用Databinding文件连接View层与Business Service/源数据,是Model层的主要组成部分;Business Service主要分为Application Module和ADF Business Components,通过Data Control连接至View层。这种分离式的架构允许在View层已经创建的前提下为View层添加数据访问或Business Service访问。
  • Model
    • Data Control
      Data Control用于为Page或Page Fragment创建数据访问界限(Data Bounds),可以实现为诸如XML文件、Web Service或ADF业务组件。使用JDeveloper进行开发,当创建Page或Page Fragment时,会自动创建对应的Data Control。
    • Placeholder Data Control
      当进行Page或Page Fragment的UI开发时专用的Data Control,用于在界面建立后连接数据源。
  • Business Service
    在Fusion体系架构中,ADF业务组件(ADF Business Component)是主要的数据访问和业务逻辑来源。ADF业务组件,亦称为ADF BC,主要由以下几个部分组成:
    • Application Module
      Application Module(AM)定义了一组可更新的数据模型及顶层的可调用方法(亦称为Service Methods),是用户界面进行数据操作的接口。AM中包含View Object对象。
      为了简化应用集成的复杂度,可以为Application Module启用服务接口。这里的服务接口指的是一组允许第三方应用程序使用标准Web Service协议完成查找、创建、更新、删除业务数据的任务的可编程API。所有的业务验证规则均被封装在Entity Object中,并会在进行业务数据操作时自动进行验证。
    • View Object
      View Object是一条SQL查询的持久化对象,允许对SQL查询的结果进行操作。同时,View Object间允许通过建立连接(link)的方式创建主从(Master-Detail)结构。当用户从用户界面改变数据时,View Object会将数据改变传递至Entity Object触发对应验证规则和保存改变。
    • Entity Object
      Entity Object是数据库中某张表的某个行的持久化对象。Entity Object内部通过DML操作将数据改变反映至数据库。Entity Object支持通过建立Association的方式进行Entity Object之间的关联,并支持通过此方式反映数据源层次的表关系,如数据表的外键关联。