Oracle ADF框架简介(转)

主要讲述Oracle ADF框架的结构和关键功能,以及突出介绍了JDeveloper 10g IDE工具用Oracle ADF,EJB,Oracle TopLink 和JSF 来开发web应用程序的典型过程。

 

1
Oracle ADF 框架简介

 


Oracle ADF (Oracle Application Development Framework) 是一个端对端的应用程序框架,且是建立在J2EE标准和开源技术上的。它用来简化和加速构建面向服务的web应用程序。比如开发企业级的解决方案,要使用web,无线网络,桌面应用程序,及web services 等接口来搜索,显示,创建,更改以及更新数据,Oracle ADF能简化你的工作。现在Oracle JDeveloper 10g 和Oracle ADF结合得相当好,开发速度更能提升。

 

2
Oracle ADF框架体系结构及支持的技术

 


用Oracle ADF可以达到清晰的分离模型、视图、控制器,即完全实现了MVC设计模式。Figure1-1显示出每个ADF模块在框架体系结构中的位置。这个体系结构中的中心模块就是实现了JSR-227规格的数据绑定工具——Oracle ADF Model,它能用统一的途径且不用任何代码来绑定任意用户接口到任意业务服务。其他Oracle ADF模块包括:

 


Oracle ADF Controller 集成了Struts和JSF。

 


Oracle ADF Faces 提供用JSF建立web应用程序的组件库。

 


Oracle ADF Swing 用Swing把Oracle ADF Model扩展到桌面应用程序。

 


Oracle ADF Business Components 使开发者用4GL工具来简化建立业务服务,比如用Oracle Forms。


 

 

 

3
视图层技术支持

 


视图层是设计用户界面的地方,可以使用JSP和JSF等技术来开发。当然在桌面应用程序中还可以用Swing组件库。无论选择那种,都是用WYSIWYG(所见即所得)的方式和drag-and-drop(拖放)数据绑定。但选择JSF是最适合的,因为ADF Faces模块提供了近100个JSF组件的完全的组件库。

 


ADF Faces组件库包含了复杂的特征,例如换肤技术,使用了ajax技术等。

 

 

 

4
控制层技术支持

 


控制层是处理web应用程序页面流的关键业务。Oracle ADF集成了流行的Apache Struts框架和内置页面导航功能的JSF框架。不管用那个框架,JDeveloper提供了可视页面流图表来设计页面流,并且在控制层的页面处理周期ADF Controller模块也提供了合适插件集成到ADF模型数据绑定工具。

 

 

 

5
由ADF Model支持的业务服务技术

 


在模型层,Oracle ADF模型实现了JSR-227中称为数据控制的抽象服务,并且提供实现多数共同业务服务的盒外数据控制技术。支持的技术有:

 

■ EJB会话bean
由于多数J2EE应用程序需要事务处理服务,EJB会话bean是一个合乎逻辑的选择,因为它提供了开放的事务处理控制。在业务服务的EJB会话bean的后面,可以使用java对象(POJOs)或者EJB实体bean来代表业务域对象。JDeveloper提供集成的可支持创建EJB会话bean的功能,产生初始会话外观工具,以及创建java类或实体bean。你也可以使用Oracle TopLink来配置ORM。

 

 


 

■ JavaBeans


 

 

 

■ Web Services
当你的应用程序需要列出标准的web服务接口,仅仅需要提供给Oracle ADF以与web服务相联系的URL。这个服务端点的描述语言就绑定与用户交互的接口,然后显示出结果。

 

 

 

■ XML


 

 

 

■ ADF Application Modules
这些服务类是ADF业务组件模块的特征,它能自动执行业务规则列出可更新的SQL查询结SQL查询结果的数据集。

 

ADF是是一个end-to-end的框架。和Spring一样它在企业应用架构的每一个层次都提供了它的支持。ADF的架构如下图所示:  在每一层ADF都有它的一些组件。我这次主要想讲讲ADF的data binding,因为它隔离了业务逻辑层和web层,使得两个层次的独立性更强。但是,ADF似乎做得过于复杂,使得很难上手使用。 ADF中关键的数据绑定概念如下: Data Control: Data Control是对业务接口的抽象,也就是说所有访问业务对象的方法现在都通过Data Control来进行,这样使得绑定层使用一种方式来访问数据,不论后台的数据对象是种实现。可以把Data Control看做是一种代理机制。 Iterator Bindings and Control Bindings: Binding是一种轻量级的对象,它的主要目的就是让后台数据和前台显示解藕,这是老生常谈的问题,让我们看看ADF是怎么做的。Iterator Binding 和提供集合对象数据的Data Control合作。 Control Bindings 则提供了一个标准的接口让用户界面可处理集合对象或者调用业务方法。 Binding Containers: Binding Container 对象记录了某一个用户界面使用了哪些iterator binding、control binding。 有一个XML文件记录了这些内容,在运行时就会根据这个XML来生产一个Binding Container。 Binding Context: Binding Context 则是比Binding Container更大的一个概念,它包含了所有的Binding Container以及Data Control的信息。 下面介绍一个简单的应用蓝图:  这个应用是这样的, 现在有一个论坛,在这个论坛上有一个页面用来Review 一些Threads并指定一个team回复它,这个页面叫做ReviewThreads.jsp 。 这个页面需要从后台的ForumService来获得数据并指定回复的Team. ForumService是一个ADF的Application Module组件(Application module组件是对业务逻辑的一种抽象,它可以实现为java class,EJB,webservice等等,它也有自己的方法来调用View Object,这里大家只需要认为它是一种业务组件就行了)。另外,这个页面还需要一个所有可选Team的下拉框,这个下来框的数据来自一个web service LookupCodes。 对应每一个业务组件会有一个Data Control包装了该组件的业务方法。在该应用的Binding Context中包含了两个Binding Container, ReviewThreads和UnansweredPostings。前者提供给ReviewThreads.jsp使用,后者则同事支持uix页面(uix是一种基于XML的界面语言),以及Jclient的一个Swing Panel。 ReviewThreads绑定容器包含了以下Binding: 1. 三个指向该应用使用的数据集合的iterator binding。两个由ForumService提供,一个由LookupCodes提供,如图所示 2. 三个支持了界面上元素的Control Binding 首先是一个Attribute control binding 用来在页面上Name输入框中显示Forum名字 其次是一个list binding来支持下拉框 最后是一个range binding用来支持JSTL的 显示Team对象。 3. 一个control binding用来调用ForumService的一个方法,用来指定Team答复Thread. 需要注意的是,control value bindings 是需要通过iterator binding来获得他们的数据。特别是list value binding它同时需要使用两个iterator binding,一个用来取得所有的list中的值,另一个用来提供list中选择的值。 下图介绍了上述的组件在运行时是怎么样配合的。一个Binding Context包含了一个或者多个Data Control和Binding Container。每一个Binding Container会有一个或者多个iterator binding 指定了一个页面使用的数据集合。每一个iterator binding从一个特定的Data control获取及更改数据。Binding Container也会有一个或多个control binding 来支持页面控制。当Control binding需要和数据绑定时,就要一个iterator binding相关联。如果是一个control action binding,比如说和页面上的submit健关联的binding则会要和一个data control 关联用来调用service 层的方法。

ADF是Oracle公司为简化J2EE程序开发的复杂性专门开发的一种解决方案,ADF通过减少实现设计模式和应用程序框架的代码量,简化了J2EE的研发难度。其优点主要体现在以下四个方面:

  (1) 开发环境:大部分J2EE框架都没有与之配套的开发工具,ORACLE为ADF提供了JDEVELOPER开发工具,它和ADF实现了完美的结合,方便了程序的开发。

  (2) 平台独立:ADF能够运行在任何符合J2EE标准的应用服务器上。

  (3) 技术选择:对于应用程序的不同层,开发人员可以使用自己擅长的技术进行开发。

  (4) 端到端的解决方案:ADF不只关注应用程序的某一层,而是对应用程序的每一层,都提供了完整的解决方案。

  Oracle ADF的架构

  Oracle ADF的架构是基于MVC设计模式的,其架构如图1所示。从图1我们可以看出,ADF把应用程序分成了四层,下面我们分别介绍:

  1)Business Service 层

  Business Service 层包括三个小层(见图1),分别是持久层(Persistent Business Objects),数据访问层(Data Access)和接口层(ADF Application Module)。这三层建立的顺序是这样的,先建立持久层的实体对象(Entity Object),然后建立数据访问层的视图对象(ViewObject),最后建立接口层。其中建立持久层的实体对象主要是和数据库的表或者同义词对象建立关联,数据访问层的视图对象(ViewObject)是基于实体层的实体对象建立的,主要是进行数据库的访问,而接口层是整个Business Service 层和Model层的接口,在数据访问层建立的视图对象需要注册到接口层中,这样在Model层中才可以访问。

  2)Model 层

  该层包括两部分(见图1),分别是ADF Bindings和ADF DataControl,其中ADF Bindings是ADF提供的一种绑定技术,ADF DataConrol 是指我们已经在接口层中注册的视图对象(ViewObject)。这一层在实际开发中基本不需要开发者做太多的工作。

  3)Controller 层

  ADF 在Controller层中扩展了APACHE基金会的STRUTS框架,它为Struts提供了一个页面流转图,以简化应用程序的开发。开发者可以简单地拖拽Struts的组件到这个图表中,这个图表会自动地同步更新Struts-config.xml文件,其中我们最常用的是DataPage组件,该组件的作用主要是建立一个页面,并且自动为其建立一个DataForwardAction,如果我们有一些自定义的方法,也可以写一个Action,然后覆盖DataForwardAction。

  4)View 层

  在View层可以采用ORACLE 的UIX 技术,它里面定义了大量功能强大的组件。Oracle Jdeveloper 在View 层提供了一个可视化的布局编辑器,开发者可以使用组件面板向应用程序添加可视化的组件,并可以运用属性编辑器(Property Inspector)来定义这些组件的属性。可视化的编辑器是和源码同步的,所以开发者可以选择自己喜欢的开发方式。

  
  图1 Oracle ADF 架构图

  ADF应用开发过程

  下面给大家简单介绍一下ADF具体的实现过程,开发工具我们选择Oracle的Jdeveloper10g,因为在目前的各种开发工具中,Jdeveloper是对ADF这个框架支持最好的工具,它内部直接集成了ADF开发时所需要的各种工具,给开发带来很大的方便。我们以《某合同管理系统中的设备招投标》模块为例。

  第一步:在Jdeveloper中,创建一个工作区,工作区的名字取为TestProject,在应用程序模板一项中,选择WEB APPLICATION(DEFAULT),确认后的工作区如图2所示,按照我们上面讲述的ADF的架构,我们先建立Business Service层的持久层对象,在Model这个工程上边,右键单击新建,然后选择Business Tier 下的Business Component ,选择EntityObject,然后出现图3;schema Object是让我们选择数据库中的表或者同义词等对象,name 是我们建立的持久层对象的名字,这里我们把name命名为CdtEquipmentEO,package指定这个对象放在什么包下面。

  
  图2 workspace TestProject建立时的情况

  
  图3 EntityObject 向导第一步

  第二步:建完持久层的实体对象后,我们就需要建立数据访问层的视图对象(ViewObject)。右键单击Model,新建选择ViewObject出现图4,左边是供我们选择已经存在的持久层的实体对象(EntityObject),这里面我们选择刚建好的CdtEquipmentEO这个实体对象。

  
  图4 ViewObject向导第二步

  第三步:需要建立接口层(ApplicationModule),将数据访问层的视图对象(ViewObject)注册到ApplicationModule中,如图5所示,我们选择CdtEquipmentView1这个视图对象,并把它添加到AppModul1中。

  
  图5 ApplicationModule 建立向导

  第四步:按照ADF架构,Model层我们基本不需要作什么工作,那么我们下面开始建立Controller层,首先需要建立DataPage,可以是UIX格式的也可以是JSP,这里我们用UIX格式。在Struts-config.xml中,从右侧的component中,可以直接选择DataPage,拖拽过来,listEquipment是我们给定的名字。

  
  图6 Struts_config.xml截面图

  第五步:建完Controller层,需要建立展现层(View),在listEquipment.uix页面中设置页面布局,可以对DataControl中的View进行拖拽,如图7所示,我们选择Data Control 面板中的CdtEquipmentView1,这就是我们刚才建立的View,下面的拖拽类型选择只读表就可以了。

  
  图7 listEquipment.xml截面图

  第六步:我们单击listEquipment.uix这个文件,选择运行(图8示),就可以直接得出所有设备的数据了,运行的效果如图9所示。

  
  图8 struts_config.xml截面图

  
  图9 运行效果图

  结论

  在Jdeveloper10g中结合ADF框架,使开发人员能够从零开始构建J2EE应用程序和WEB服务。因为Oracle ADF的高度结合性,以及它里面提供的优秀技术,使得开发应用变得十分简单方便,从而大大提高了应用程序的开发效率,具有很高的应用价值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值