首页 Oracle9iJDeveloper开发手册-构建J2EE应用程序

Oracle9iJDeveloper开发手册-构建J2EE应用程序

举报
开通vip

Oracle9iJDeveloper开发手册-构建J2EE应用程序可编辑可编辑精品精品可编辑精品第Ⅰ部分概述第1章JDeveloper概述JDeveloper是一种用于Java编程的集成开发环境(IDE)。它为设计、开发、调试和部署所有类型的3GLJava及组成J2EE(Java2Platform,EnterpriseEdition)战略的其他相关文件提供了相当丰富的特性。JDeveloper包括很多向导和代码生成器,可以简化Java的内部机制,使您能够将精力集中在用Java解决业务问题上。它还提供了强大的代码组织与配置管理功能。Oracle9i版的JDeveloper与它的以前...

Oracle9iJDeveloper开发手册-构建J2EE应用程序
可编辑可编辑精品精品可编辑精品第Ⅰ部分概述第1章JDeveloper概述JDeveloper是一种用于Java编程的集成开发环境(IDE)。它为设计、开发、调试和部署所有类型的3GLJava及组成J2EE(Java2Platform,EnterpriseEdition)战略的其他相关文件提供了相当丰富的特性。JDeveloper包括很多向导和代码生成器,可以简化Java的内部机制,使您能够将精力集中在用Java解决业务问题上。它还提供了强大的代码组织与配置管理功能。Oracle9i版的JDeveloper与它的以前版本相比是一个巨大的飞跃。本章将从整体上介绍JDeveloper,展示其中各种各样的特性和功能。本章讨论JDeveloper的一个主要特性——Java业务组件(BusinessComponentsforJava,BC4J),并概述如何用JDeveloper开发应用程序;还提供了一些简单的动手练习,以便您可以开始生成一些代码。有关BC4J的更详细信息将在本书的第Ⅱ部分介绍。第2章讲述了JDeveloperIDE本身由哪些组件构成。第3章讨论如何用IDE构建BC4J应用程序;对于Java初学者来说,第4章简要介绍了一些重要概念,要想更有效地使用JDeveloper,必须理解这些概念。第5章讨论了形成一致的命名约定的重要性,对于使用JDeveloper开发应用程序过程中需要用到的各种元素,都给出了如何为其命名的建议。用JDeveloper的调试特性进行调试的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 将在第6章讨论。第7章则概要描述了部署Java客户端(Java应用程序和applet)及JSP(JavaServerPages,Java服务器页面)应用程序的方法。最后,第8章着眼于9i版中的一个新特性:类建模器(ClassModeler),MATCH_ word word文档格式规范word作业纸小票打印word模板word简历模板免费word简历 _1716172830882_0了如何运用这个工具协助进行应用程序开发。本书经常会提到创建“应用程序”,下面的说明框将帮助您弄清楚作者在本书中是如何使用这个词的。什么是应用程序在IT业界,很多人都会用到“应用程序”这个词。然而,在不同的环境中它可能代表完全不同的意思。一些人用“应用程序”表示整个计算机系统,其他人则用这个词表示整个计算机系统中的一部分,它在单个程序中物理地实现。在本书中,第2种定义将用来表示整个系统中的一个逻辑组成部分,通常是在单独的JDeveloper工作区内实现的。“应用程序”一词还有其他用法,如Java应用程序,这是与Java虚拟机(JVM)一起部署在客户端的一类Java程序,这类程序不需要浏览器的介入。本书中的“Java应用程序”仅指这类特定的程序。应用程序模块(ApplicationModule)是一种BC4J组件,客户端程序可以通过它访问一组视图对象和视图链接。可编辑可编辑精品精品可编辑精品1.1JDeveloper的过去、现在和未来JDeveloper的起源可追溯到1997年,当时Oracle公司从BorlandInternational获得了基于Java的开发工具的许可,将这些开发工具与Oracle数据库、Internet及传统客户/服务器平台上的应用程序开发工具集成在一起。当时,Borland公司的JBuilder是十分强大的Java开发工具。Oracle购买了JBuilder的源代码,开始了其创建Java开发环境的历程。最初的JDeveloper1.0(称为AppBuilderforJava)于1998年发布,它与其根基JBuilder非常相似。在1998年末,它被重命名为JDeveloper。这种最初的相似性一直持续到1999年发布的2.0版。从这些早期的版本中,可以看出这个工具是如何在Java环境中逐渐成熟的。虽然该产品的新版本仅表现出一些表面变化,但在幕后Oracle公司却在致力于完美地解决Java程序连接到关系数据库对象的问题。1.1.1过去:产品的历史与起源JDeveloper1.0和2.0版虽然都是很有用的Java开发产品,但如果要创建能与Oracle数据库交互的应用程序,它们提供的支持就太少了。公平地说,这也是由于当时的技术水平所限。辛勤的C++和Java程序员例行地担负起编写代码访问Oracle数据库的任务。然而,即便是对于掌握了一定技巧的程序员来说,这种编码工作也要花费大量的精力。因此,早期接受JDeveloper的人主要是这类Java开发人员,他们想寻求一种方法来创建与Oracle数据库交互的应用程序。而那些习惯于使用易于与数据库交互的产品、以及用FormsDeveloper等工具高效地创建应用程序的Oracle专业人员,并没有很快接受这一新产品。Oracle公司的项目战略并没有使情况变得简单。除了JDeveloper之外,Oracle公司还有一些产品可以让开发人员创建应用程序,并部署在Web上:OracleFormsDeveloper(有时又称为WebForm)继续走向成熟。在9i版中,Web已经成为发布Oracle表单的惟一途径。该工具基于applet技术,而由于防火墙和性能的问题,这项技术在很大程度上已经被越来越多的Internet应用程序开发团体所抛弃。PL/SQLWebToolkit(mod_plsql)起源于早期版本的OracleApplicationServer,OracleDesigner用它生成HTML客户端代码。PL/SQLToolkit允许在数据库中编写可向浏览器输出HTML的PL/SQL。PL/SQLServerPages(PSP)允许在HTML内嵌入PL/SQL。PSP以一种类似于JSP的方式充分利用了服务器页面的概念。OraclePortal最初被设计用来作为专门访问数据库的简单工具,在市场上称为WebDB。慢慢地,Portal演变成一种有用的Web站点开发工具。1.为什么采用JDeveloper面对所有这些选择,为什么Oracle公司最终决定选择JDeveloper作为主要开发平台呢?这一决定表明了Oracle公司的长期发展规划。Oracle9iJDeveloper构建于J2EE之上。因此,JDeveloper与Oracle历史上的任何其他产品相比具有更强的基础。Oracle公司以前的所有产品都不得不在现有技术、向后兼容性及Oracle内部政策之间折衷。JDeveloper基于一种相对较新的技术,其他供应商为此技术提供大量支持,并有经过验证的标准做后盾。可编辑可编辑精品精品可编辑精品在JDeveloper从1.0版发展到9i版的过程中,Oracle公司在产品智能和体系结构基础方面投入的精力已经远远超过UI组件。甚至对于现在的9i版本来说,产品中的某些部分依然处于雏形阶段,主要的焦点都集中于创建一个能长期发展的牢固基础。2.引入Java业务组件虽然这种长期的设计哲学从体系结构的观点来看是正确的,但是传统的Oracle开发社区成员却会因此感到沮丧,他们经常会因为在JDeveloper中开发应用程序过于低效而感到无耐。直到JDeveloper3.0引入BC4J,Oracle构建Java应用程序访问Oracle数据库的方向才变得清晰。BC4J有助于自动实现大多数Java代码与关系数据库表交互时所必需的复杂工作。BC4J是支持Java与数据库交互的架构。BC4J向导能自动生成Java应用程序与数据库安全交互所需的代码,解决了以前开发中遇到的安全性、锁定及性能问题。BC4J生成的代码严重依赖于Oracle提供的一个Java库。因此,由BC4J向导生成的实际代码量是很小的。为了使开发人员能够创建包含用户界面的Java应用程序,Oracle提供了直接与BC4J生成的元素相联系的可选Swing组件的扩展,BC4J已经从概念上被证实是牢固可靠的,能够处理复杂的应用程序,而基于Sun公司的InfoBus(信息总线)体系结构构建的DataAware组件已经被证明是有问题的。业界抛弃了InfoBus体系结构之后,Oracle公司也抛弃了所有InfoBus技术,以利于JDeveloper9i支持Sun公司的模型-视图-控件器(Model-View-Controller,简称MVC)体系结构(在JDeveloper中实现为客户数据模型)。本章稍后将更加详细地介绍BC4J。同时,本书第Ⅱ部分将深入讨论BC4J的使用和结构。1.1.2现在:JDeveloper的现状目前,JDeveloper中包含了非常稳定的Java业务组件,并且已经解决了9i版存在的许多v.3.2性能问题。MVC体系结构允许开发人员更有信心地创建访问Oracle数据库的Java应用程序或JSP。Oracle9iJDeveloper提供了一种稳固的Java开发环境。在Web上搜索有关JDeveloper的文章就能发现,Java社团对JDeveloper有很多积极的评价。由于有了BC4J层,在编写与Oracle数据库交互的Java代码方面,JDeveloper就独占鳌头了。1.创建JSP页JSP文件生成发送到客户端的HTML页。JSP文件被编译成servlet,这是一个纯Java程序。尽管大多数业务逻辑都可以用Java编写,但UI部分通常还是用HTML创建的。JDeveloper作为一种创建JSP页的Web应用程序开发工具,对于传统的已经习惯了FormsDeveloper那种一体化产品开发环境的Oracle开发人员来说,并不是一个完整的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。在本书1译者注:此处指本书的英文原版。编写之际,JDeveloper对于HTML页可视化设计的支持与Microsoft公司的Frontpage等工具相比,依然十分有限。对代码高亮显示、代码自动补全、结构化显示及调试等的支持非常完整,这也就是对JDeveloper中运行和调试JSP代码所提供的支持。可编辑可编辑精品精品可编辑精品当前使用FormsDeveloper和PL/SQL的开发人员不能简单地用JDeveloper和Java替代原来的方法来创建部署在Web上的复杂客户/服务器应用程序。构建具有完整功能的允许用户安全高效地与数据库交互的Web应用程序是一项极为复杂的任务。这些内容将在第7章中详细介绍。2.创建Java应用程序部署在客户/服务器或者Intranet环境中的Java应用程序的开发情况,与部署JSP页的情况有很大的差别,因为JDeveloper对Java应用程序的开发提供完整的支持,包括可视化编辑及在表单风格的界面里设置属性等。与使用FormsDeveloper等产品相比,使用JDeveloper可以创建同等甚至更复杂或高级的应用程序。然而,用JDeveloper创建应用程序的速度无法像用FormsDeveloper一样快。JDeveloper向导还不够成熟,作为一种RAD开发工具,JDeveloper还不足以与FormsDeveloper有效地竞争。虽然FormsDeveloper是一种真正的4GL,其中对象的属性都存储在一个内部资料档案库中,而JDeveloper实际上是一个代码生成器与组织器。尽管您可以像在4GL环境中那样与JDeveloper向导和IDE交互,但是实际上是在创建Java代码。应用程序开发过程经常会超出JDeveloper向导的能力,必须手动修改向导生成的属性,或是添加向导未生成的代码。1.1.3将来:远景展望从9i版中可以看出,Oracle公司对JDeveloper寄与了很大的期望,表明这个版本比以前版本的范围要广泛得多。对统一建模语言(UnifiedModelingLanguage,UML)图表的有限使用、功能完备的软件配置管理(SCM)资料档案库,以及生成数据定义语言(DataDefinitionLanguage,DDL)的能力都表明了Oracle公司对这个产品的长期发展思路。最终目标为所有Oracle系统形成一个单一的集成开发环境。数据库和应用程序的设计、创建及维护都可以用一个产品来处理。也许JDeveloper最终会将其他产品的功能包括进来,如OracleDesigner、OracleFormsDeveloper及一些第三方产品(如Quest软件公司(QuestSoftware)的TOAD或SQLNavigator)。这些目标的最终实现还需要几年的时间。当Oracle公司将这种期望变成现实时,Oracle专业人员将拥有梦寐以求的集成设计开发环境。短期前景与长期前景JDeveloper的短期和长期发展前景会如何?在短期内,Oracle有理由对该产品的核心体系结构感到满意。目前,他们正致力于改进产品的应用程序开发效率。未来JDeveloper的发展,最终可能实现改良过的向导,以帮助将目前开发应用程序所需执行的任务实现自动化,也有助于缩小JDeveloper和FormsDeveloper之间在开发企业内部应用程序上的差距。第二个短期改进会集中在把JDeveloper作为一种建模和设计工具上。当前的类建模器反映了Oracle在使用UML设计数据库方面的兴趣。到2003年底,JDeveloper作为一种数据建模工具,将会与Designer形成有效竞争。为了支持软件开发周期中更多的内容,UML的其他部分也会合并到JDeveloper中。用例(用于描述业务需求的UML 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 )也将包括进来,以便支持分析过程。可编辑可编辑精品精品可编辑精品如前所述,长期目标显然是向一种“一站式”开发环境转变。为满足建立Oracle系统时遇到的不断变化的设计和开发任务,新的特性正在系统地、从容不迫地加入到JDeveloper中。1.2Java业务组件与其他Java开发工具相比,JDeveloper的主要优势在于它的Java(BC4J)业务组件架构及相关的代码生成器。BC4J是JDeveloper产品的核心,正是它使建立Java或基于Web的应用程序的Oracle开发人员对JDeveloper情有独钟。BC4J的根基是一种编程协议或标准,它们描述了如何构建与关系数据库交互的类。JDeveloper用BC4J作为处理数据库DML操作(查询、插入、更新及删除)的主要方式。在BC4J及类似产品出现之前,将基于Java的应用程序连接到数据库是一项异常困难的任务。为了使Java前端与数据库协调工作,必须编写复杂的JDBC(JavaDatabaseConnectivity)和/或在Java中嵌入SQL代码(SQLJ)。除此之外,还必须维护自己的数据缓存,批处理自己的更新,并跟踪表的锁定与提交。这种与数据库之间的复杂接口被证明是创建基于Web应用程序的最大障碍。那些尝试过开发应用程序的组织,如果没有使用JDeveloper这样的工具,经常会超出预算,并且开发出来的应用程序也难于维护。JDeveloper中的BC4J组件提供了到数据库的功能接口,并且可以使用内置的代码生成器或向导来构造这些组件。本章仅仅从总体上介绍一下BC4J组件。本书的第Ⅱ部分会深入讨论BC4J,该部分及其他几章中的动手练习展示了BC4J组件应该如何与Swing组件、JSP应用程序及其他JDeveloper生成的代码结合使用。1.2.1Java与XMLBC4J组件是Java与XML相结合的产物。XML与Java都是开放源代码的(非专有的)语言。由于这两种语言都与操作系统和平台无关,所以它们可以通过网络进行很好的交互,也可以跨Web进行操作。这两种语言都具有互为补充的独特优势。Java是一种模块化、可移植的语言,鉴于其内在的安全性和支持Internet的能力,它是一种业务应用程序之间进行通信的理想机制。然而,Java缺乏在不同平台和应用程序之间交换数据的有效方法,这一点正是可扩展标记语言(ExtensibleMarkupLanguage,XML)的长处。XML是一种与HTML类似的标签或标记语言;不过XML的标记功能更加强大,因为可以对它的基本标记进行扩展,以满足不断发展的需要。HTML用标记来描述希望的显示方式;而XML创建标记的目的是用来描述文本或数据的结构和内容。应该注意到,XML和Java一样,是区分大小写的语言。XML用于定义数据,而Java用于对数据进行操作。您将会发现,BC4J组件包含了与之相关联的XML和Java文件。XML文件存放了定义该业务组件的元数据,而Java文件存放了实现业务组件的方法。Java文件中包括了get()和set()方法,可以在运行时动态生成插入、更新和删除语句。而且,XML和Java文件中不但可以包含数据库表引用,还可以包含更多信息。它们也可以定义和实现验证规则。可编辑可编辑精品精品可编辑精品1.2.2BC4J结构BC4J是JDeveloper中一种结构很好的、经过仔细设计的组件。由于BC4J向导仅提供了修改底层Java类和XML文档的简单机制,所以只有高级JDeveloper用户才知道底层结构的细节。从开发人员的角度看,您只需使用BC4J逻辑对象概念考虑问题。只有在需要编写超出向导处理能力的复杂验证或编码功能时,才会操作Java类。BC4J组件可以从概念上将应用程序分为两个主要部分,如图1-1所示。用户界面和客户端逻辑数据库接口和业务逻辑图1-1使用这种面向对象的架构可以帮助您创建可重用的业务组件,在数据库和用户界面(UserInterface,UI)之间实现有效的通信。BC4J向导读取Oracle系统视图,获取代表数据库结构的元数据。使用这个元数据,向导可以生成XML和Java代码,从而提供一个可以定制的架构,您可以向该架构添加数据验证器以及其他业务逻辑。BC4J组件提供了很多好处。首先,使用这些组件可以更容易实现简单性和组织性。在应用程序中包含一个BC4J项目,意味着您可以根据BC4J组件的部署位置,来优化代码的整体性能和可重用性。其次,可以将数据验证这类共享代码移到BC4J层,这样就改善了代码的可维护性。再次,BC4J类可以部署在数据库服务器、应用程序服务器或本地客户端。对于那些对验证需求强烈的应用程序而言,这种可移植性将会使它们获的重大的性能改进。BC4J使Java应用程序能够容易地与关系数据库通信。通过与BC4J向导交互,您可以生成XML文件和Java类。应用程序开发人员随后可以编写Java代码,与BC4J生成的处理与数据通信的类进行交互。生成的这些类能够正常工作,这是因为Oracle提供的Java类库中包含了所有复杂的数据库交互例程。在BC4J出现之前,编写Java应用程序来与关系数据库通信是一项异常复杂的任务,超出了大多数开发人员的技能水平。少数勇敢的先锋曾尝试自己完成这项任务,现在,该任务变得如此简单,他们会十分高兴的。1.2.3BC4J组件BC4J组件分为3个主要部分:数据定义和验证组件、数据操作和过滤组件以及存储位置和容器。可编辑可编辑精品精品可编辑精品对于熟悉数据建模的读者来说,图1-2有助于您理解与每个BC4J组件关联的关系和基数(cardinality)。如果对UML建模不熟悉,可以简单地将这些图看作表示BC4J层中总体关系的框图(附录C会介绍这种UML图中使用的符号)。这个信息有助于可视化这些组件如何彼此相关,以及它们如何被组织为组。图1-21.数据定义和验证组件下面介绍数据定义和验证用到的组件:实体对象(EntityObject)实体对象基于数据库表、视图、图或同义词,并且包括数据库存储需求。实体对象可以从已有的数据库对象生成,也可以手工定义,并以此创建新的数据库表。实体对象包含属性(列)定义。属性(Attribute)属性有两类:实体属性和视图属性。实体属性是实体对象的一部分,通常对应于表的列,可能包含验证规则和业务逻辑。有些属性不能查询,如BLOB类型,应该在实体对象向导(EntityObjectWizard)中取消选中Queriable复选框。视图属性不过是实体属性的一种。可以为计算列(calculatedcolumns)等项创建额外的视图属性。关联(Association)关联定义了一对实体对象之间的关系。典型的关联表示数据库中的外键约束,但是在任意一对实体对象属性组件之间都可以定义关联。还可以在关联的每一端指定多个属性,只要双方都有同样数目的属性即可。关联是双向的。域(Domain)域是用户自定义类型,表示一个属性可以具有的值的类型。例如,您可以创建一个域,以保证输入的社会保险号确实是9位数字。当您为该组件编写验证逻辑时,必须将逻辑放入一个名为validate()的方法中,这个方法会被该域的Java文件的构造函数调用。每次用这个域实例化一个新对象时,构造函数就会调用validate()方法,以确保新增加的属性满足您定义的准则。特性(Property)在BC4J组件的概念中,特性是一个字符串类型的名/值对。特性用于存储字符串文本。这些文本串可以在运行时显示信息,例如,定义某个用户的访问等级,指定使用哪一种类型的UI控件,以及设置域的格式掩码。您可以为域、实体对象、视图对象、实体属性、视图属性及应用程序模块定义特性。BC4J特性存储在相关联的组件的XML文件中。可编辑可编辑精品精品可编辑精品2.数据操作或过滤组件视图对象和视图链接通过对实体对象定义的数据进行过滤,提供适当的数据来支持UI。视图对象(ViewObject)。视图对象用SQL查询对实体对象所定义的数据进行指定和过滤。客户端应用程序通过视图对象的get()和set()方法可以实现导航、更新、插入和删除数据的操作。视图链接(ViewLink)。视图链接用于表示视图对象之间的关系。这些关系仅仅在一个方向上实现。因此,在一个主从关系(主对象是源,从对象是目标)中,只有源对象定义了get/set的访问方法。对于主表中当前选中的行,视图链接为详细表提供过滤后的行。视图链接将视图对象链接起来的方式与关联链接实体对象的方式相同。不过,在视图链接和关联之间没有程序性的联系。关联可以用于生成视图链接,视图链接也可以独立于关联创建。3.存储位置和容器BC4J层中用来放置元素的位置/容器有两种:包(package)。Java类是通过包中的目录来分组的。在开发期间,这些包等价于存储源代码的硬盘上的子目录或文件夹。应用程序模块(applicationmodule)。应用程序模块定义了BC4J视图对象和视图链接,客户端应用程序将与这些组件进行交互。在同一个BC4J层中可能有多个应用程序模块。也可以在一个应用程序模块中嵌入其他应用程序模块。您也许会想在一个特定的应用程序屏幕或任务中用多个应用程序模块实现业务逻辑,为每一部分逻辑提供它自己的模块。典型的情况是,一个应用程序模块中可能包含3~4个视图对象和链接,甚至可能更多。一个大的应用程序可能包含20个或更多的应用程序模块,其中每个模块都包含与给定任务对应的适当视图对象和视图链接。1.2.4BC4J逻辑体系结构从逻辑上讲,用BC4J创建的对象可分为两类:数据库接口对象与应用程序端对象。在数据库端,BC4J包括了实体对象和关联。应用程序端对象则包括视图对象、视图链接及应用程序模块。1.实体对象及关联实体对象及关联多多少少都和表及外键约束相对应。不过,并不是必须像构造表那样来构造实体对象。如果是初次使用BC4J,可以创建只是表的映像的默认实体对象。默认关联将根据数据库中的外键约束来生成,以便您最终就可以在BC4J层得到数据库的精确映像。不过,实体对象并不一定非要构造得像底层数据库表。这两者可以在以下方面有所区别:可编辑可编辑精品精品可编辑精品您可以定义实体对象,但并不一定表示表中的全部字段。如果开发人员永远不会使用CREATED_DATE、CREATED_BY、MODIFIED_DATA及MODIFIED_BY等字段,就没有理由在应用程序中理会这些字段。而且,如果数据库中存在非常宽(字段很多)的表,那么在BC4J层中包含所有这些字段将会使实体对象变得很难操作。有些字段可以在实体对象中存在,但不在数据库中存在。例如,在交易清单明细中用TOTAL字段表示数量和价格的乘积;或者显示与表相关联的函数,例如,为了显示的方便,在EMP表中将名和姓连接在一起作为显示名称。这使开发人员在想显示特定的雇员记录时只要访问属性即可,不用每一名开发人员都去决定显示记录时该用哪一个字段。您可以定义更新不同数据库字段的实体属性。这可以简单到将一个现有的字段重命名,这可以使数据库更清晰或更混乱,也可以用来简化开发环境。例如,“生日”和“年龄”等BC4J实体属性可以结合使用,以填充物理数据库中的“出生日期”字段。您可以在实体对象中执行额外的验证操作。为了实现这一点,可以将业务逻辑从关系数据库复制到BC4J层中,以支持CHECK约束或基于触发器的验证。甚至可以在BC4J层中添加额外的验证,但使用的时候要多加小心。如果任何验证规则仅存在于实体对象中,而不存在于数据库中,那么只要应用程序绕过了BC4J层,就可以绕过其中包含的任何验证。定义的实体对象的行为可以与具有INSTEADOF触发器的视图类似。可以绕过标准的INSERT、UPDATE以及DELETE逻辑,转而执行所期望的代码。不过,对于这类BC4J视图对象,也得同样小心:直接访问表的应用程序将会绕过数据库视图中的触发器代码。实体对象不必一定与某个表关联。实体对象可以是完全由人工构造,从开发人员角度看,实体对象就像一个表,但是与之交互的可以是替代数据源、普通文件或者与应用程序完全处于同一位置的Java代码。正如实体对象通常是根据关系数据库中的表生成那样,关联通常根据外键约束生成。然而,BC4J中的关联可以与数据库中的参照完整性约束不同。您可以将关联的基数改为与在数据库中的不同,不过请记住,即便是BC4J层接纳了数据,BC4J规则也永远不能削弱底层数据库的规则;只能增强这些规则。您也可以创建在数据库中不存在底层外键约束的BC4J关联。2.抽象层实体对象与关联就是开发人员对物理数据库的看法。如前所述,这种理解可能和实际的物理数据库不同。因此,实体对象是开发人员和数据库之间的一个抽象层。抽象层还存在一些细微的局限性。实体对象永远也不能直接指向多个表或视图。这并不是说实体对象不能与数据库中的多个表或者视图进行交互。如前所述,这实际上可以用两种不同的方式实现:可以覆盖某个实体对象默认的INSERT、UPDATE和DELETE行为,让它完成更复杂的事情。可以使用包含INSTEADOF触发器的数据库视图。这种策略允许能查询任意数目表的复杂视图,并用INSTEADOF插入、更新和删除触发器,实现任何需要的行为。可编辑可编辑精品精品可编辑精品使用实体对象及关联,Oracle已经有效地再现了常有INSTEADOF触发器的数据库视图所提供的能力。您冒着风险把代码放到可能被绕过的地方,而没有把代码放在数据库中;如果把代码放在数据库中,那么在不同的平台和工具下无需重写代码就可以实现重用。而且,作为设计人员,如果选择BC4J作为放置业务逻辑的地方,就是在染指产品的体系结构。那么为什么还会有人不想把实体对象做成底层表或者视图的精确映像呢?这样做的原因如下:改善性能。您可以选择BC4J层作为放置验证规则的地方,这样可以改善性能。对于有些应用程序,在数据库层实现代码要求在网络上传输消息,而在业务逻辑层实现则可能极大地提高性能。支持超负荷的表。可以将多个实体对象指向同一张表。这使开发人员可以支持包含超负荷表的抽象数据模型。例如,如果用典型的单表方式实现雇员超类,它包含薪水工及小时工两个子类,会得到一个单一的雇员表,其中包含一个类型字段。按小时计酬的雇员和领薪水的雇员都保存在一张表里。在BC4J中,可以为领薪水的雇员和按小时计酬的雇员创建相互独立的实体对象,其中每种对象的属性都指向相应的字段。然而,数据库中的视图可以简单地完成同样的功能。实体对象层仍然是在数据库之上的另外一层抽象。但是,应用程序并不与这一层直接进行交互。在实体对象和关联之上还存在一个抽象层,称为视图对象和视图链接。3.视图对象与视图链接视图对象和视图链接可能分别对应于实体对象和关联。但视图对象能实现更多功能。当您运行BC4J向导并接受默认设置时,在视图对象与实体对象,以及视图链接与关联之间存在一对一的对应关系。然而,正如实体对象和关联不必与表和外键约束完全相同一样,视图对象和视图链接也不必完全对应于实体对象和约束。实际上,视图对象与实体对象之间连接的紧密程度甚至比实体对象与表之间的紧密程度还要低。视图对象的主要特征是:它们正是支持应用程序所需要的数据。视图对象是用于访问关系表的一个简单查询。视图对象与实体对象之间的关系可以是多对多的。视图链接是指视图对象之间的关系。还可以使用视图对象的结构直接与表或其他数据结构进行交互,而不是使用实体对象。只要代码的行为合理,视图对象并不必一定与外部数据容器交互。实体对象所的所有灵活性都可以同样适用于视图对象。您可以显示属性、计算属性等,还可以在视图对象中放置验证逻辑;然而,验证逻辑通常应该放在数据库和/或实体对象中,因为那些位置更加集中。您也会考虑在视图对象中加入验证逻辑,以便强制实现特定应用程序的验证规则。4.应用程序模块视图对象和视图链接都用于名为应用程序模块的集合中。为了支持主从式(master-detail)2译者注:有些地方称为主细表关系,本书中统一称为主从表关系。的应用程序,您必须在创建应用程序模块之前设置主从视图链接。应用程序模块还包含了访问数据时需要用到的数据库连接定义。可编辑可编辑精品精品可编辑精品1.2.5使用BC4J当您创建特定应用程序的BC4J时,就是在建立一组Java类,其中包装了DML命令和存储数据结构定义的XML文档的引用。这些Java类扩展了基本的BC4J类库,向数据库发出JDBC调用,接管所有的插入、更新、删除和加锁功能请求,以使应用程序运行。这使您能够将与数据库访问有关的逻辑完全封装起来。它为开发人员提供了一种开发应用程序的简单方式,像OracleFormsDeveloper那样在表之上搭建模块。然而,BC4J的功能远远不止于此。复杂的验证通常是在数据库中实现的,比如在表或者视图上创建INSTEADOF触发器。INSTEADOF触发器视图是一种Oracle视图,它使用用户提供的触发器代替默认的插入、更新和删除行为。在BC4J类中也可以实现复杂的数据验证。除了这个额外的选项之外,还是很难制定出准则,告诉人们什么情况下把数据验证逻辑放在数据库中,什么情况下又该把验证逻辑放在BC4J组件中。在一个非纯Java的环境中,将验证逻辑放在BC4J组件中可能会很危险。一些应用程序会通过BC4J访问验证,而另一些在其他产品中编写的应用程序可能无法通过BC4J访问验证逻辑。如果您正在工作的环境是完全基于Java的,那么用JDeveloper创建和操作BC4J组件就会十分简单,您完全可以选择用BC4J实现服务器端的验证,因为减少开发时间就意味着降低成本。然而,只有保证所有涉及数据更改的DML操作都使用BC4J组件,才能说这种操作是合适的。BC4J类还能够缓存数据,供多个用户共享,由于这样做不用再访问数据库,因此会提高性能。1.2.6使用BC4J的方法使用Oracle9iJDeveloper和J2EE,就可以使用多种方法建立应用程序。现在,系统业务规则可以在以下的任何地方驻留:核心数据库过程和触发器带INSTEADOF触发器的数据库视图BC4J实体对象及关联BC4J视图对象及视图链接应用程序逻辑如何在应用程序中使用BC4J可以有多种思路。业务规则不应该放在应用程序逻辑或视图对象中。之所以在此处给出这两项,是因为业务逻辑的确可以在这些地方驻留。有人声称所有的业务逻辑都应该放在数据库中,应用程序根据需要使用其中的一个子集。又有人说实际上所有的业务逻辑都应该存储在BC4J层,这样数据库就只是作为一个永久存储类中数据副本的地方。每一种策略的拥护者都以极大的韧性坚持着自己的开发风格。本节将讨论这两种方法的优缺点。要记住,这些方法都依赖于JDeveloper对它们的支持能力。由于JDeveloper的功能在不断扩展和进化,因此这些优缺点也可能发生转变,现在几乎无法实现的方法在将来发布的版本中也许会变得更加可行。可编辑可编辑精品精品可编辑精品1.以数据库为中心的方法以数据库为中心的方法假设您一开始就具有一个功能完整的Oracle数据库。当进行应用程序的逻辑设计时,很明显,如果将数据库视图和用户界面元素对应起来实现会更加简单。创建这些视图时应该使用INSTEADOF触发器,这样就可以支持插入、更新和删除功能。视图对象中显示的所有字段都是数据库视图中的列。对于每一个程序来说,都要创建一个小BC4J项目,其中包含实体对象和关联,它们与创建程序必需的表、视图、外键约束之间存在一对一关系。接下来,要为每一个实体对象和关联创建默认的视图对象和视图链接。然后将这些组装成一个应用程序模块,用来支持前端程序。因为所有的业务逻辑都在数据库内部验证,所以只有需要增强性能时才会把验证逻辑加进实体对象中。很少会发生向实体对象或视图对象中添加额外属性的情况,这是由于这些属性已经包含在数据库中的基础视图里面了。每个程序都有自己的BC4J项目。BC4J项目不会被其他程序共享。应用程序模块相对较小,其作用范围与OracleFormsDeveloper文件差不多,可能稍有区别。以数据库为中心方法的优点用以数据库为中心的方法构建应用程序具有如下优点:这种方法对于现有的Oracle开发人员来说是感觉最舒服的。它基本上使用相同的逻辑为Oracle数据库创建前端程序。这种系统不会紧密依赖于单一的产品(BC4J)。大部分非UI代码都位于数据库中。例如,由于所有的业务规则都放在数据库中,所以不访问BC4J层的程序也会使用数据库中的代码。BC4J上几乎所有的工作都可以通过JDeveloper向导来完成。需要手工编程的工作几乎没有。应用程序模块的BC4J项目只需花几个小时甚至更少时间就可以完成,因为您只需为每一个数据库视图给出一个默认的实体对象定义即可。以数据库为中心方法的缺点下面是用以数据库为中心的方法构建应用程序的一些缺点:这种方法忽视了BC4J提供的所有功能和灵活性。有了实体对象和视图对象,在该开发策略中未使用的数据库顶端就有了两个新的抽象层,而这种方法没有利用这两层。这种方法不支持BC4J的重用。BC4J体系结构的一个关键要素就是建立与重用BC4J项目的能力。没有充分利用BC4J缓冲的优势。这也是BC4J的主要优势之一,因为它可以将数据库的活动卸载到其他地方,以节省数据库服务器的CPU周期,完成主要目标:管理数据。这样减少了网络上的消息数目,如果所请求的数据已经提供过了,那么对数据库活动的需求也会减少。没有利用BC4J对于Web层和业务层服务器的支持。BC4J支持J2EE的概念:认为将一部分应用程序代码分离到另外一台服务器上是有好处的。如果要求数据库处理应用程序的代码,那么为了处理复杂的业务逻辑,数据库完成其主要目标的效率必然会打折扣。应用程序严重依赖于OracleDBMS中带INSTEADOF触发器的视图。除非其他数据库也提供与带INSTEADOF触发器的视图类似的结构,否则就无法用这种方法创建跨数据库的应用程序。可编辑可编辑精品精品可编辑精品需要有才干的PL/SQL开发人员。如果您公司的主要开发环境是Java,那么这种方法简直毫无意义。2.业务逻辑层方法业务逻辑层方法一开始也假设您有一个功能完备的Oracle数据库。这种方法与前一种方法的主要区别在于,业务逻辑包含在位于数据库之外的Java类文件中。在极端情况下,这种方法意味着只需创建一个BC4J包(其中包含实体对象与关联)来支持整个企业的数据模型。对数据库中的每一张表,都创建一个实体对象。然后,我们就可以根据程序需要的结构,创建单独的项目,其中包含视图对象、视图链接和应用程序模块。接着,为每一个程序构建一个BC4J应用程序模块。这样就将业务规则添加到实体对象中,为了增强健壮性,也可以在数据库中重复定义业务规则。在一个大规模的企业级数据模型中,可能要将根据数据库创建的实体对象和关联划分成更小的子集,以使在设计时处理起来更容易。例如,一个有300张表的系统对应着300个实体对象,那么可以将其划分成大约10个应用程序模块,大概每30张表为一个应用程序模块。如果一组表之间有很多关系,这些表就应该放在同一个包内,然后用关联表示这些关系。跨包的关系应该用同一包内的关联表示为视图对象、视图链接及使用它们的应用程序模块。然后这个实体项目就可以共享了。如前所述,视图对象不仅仅是实体对象的默认映像,它通常会从多个实体对象中同步地搜集信息。实际上,视图对象根本不必基于实体对象,而是可以直接将数据库的数据缓存在自身中。更多相关信息请参看第13章。一个实体对象和关联可以被很多(5~20个)不同的包共享,这些包里还包含其他的关联、视图对象、视图链接及应用程序模块。简单的程序通常是一个程序只有一个应用程序模块,但一个程序也可以包含多个应用程序模块,两个能完成类似任务的程序使用同一个应用程序模块也很正常。采用这种方法后,验证逻辑可以存在于BC4J层中,也可存在于数据库中。业务逻辑层方法的优点采用这种方法具有如下的优点:BC4J缓存、项目重用、以及相对于数据库的独立性是该方法的用武之地。如果正确使用这种方法,可以达到最大的开发效率。这是因为持久化层和业务逻辑层的模块化程度增强了。您可以借用BC4J的能力从数据库服务器上卸载活动。这一优势也正是前一种方法的弱项。业务逻辑层方法的缺点下面是这种方法的一些缺点:从概念上来讲,这种方法比较难于实现,因为系统的业务规则可能存在于不同的地方。例如,这些规则可能存在于表、实体对象或视图对象中。必须为使用不同的代码位置开发出一套标准和准则,并强制执行。采用这种策略的组织应该仔细地将这些规则形式化。规则适用于数据库、实体对象及视图对象。它们必需回答“对象是如何组织的?对象之间如何交互?”等问题。如果没有仔细进行规划,那么BC4J提供的灵活性可能会导致系统中充满难以跟踪的bug。这是因为许多地方都可能出现逻辑错误。设计良好的错误信息有助于减少这一问题。可编辑可编辑精品精品可编辑精品1.2.7用BC4J创建应用程序您可以将用户界面连接到BC4J对象上,从而迅速建立完整的应用程序。过去,即便是完成最简单的事务,客户端和服务器之间也要进行多次通信。然而,在如今的Web和广域网中,这种在系统中存在大量传输的风格已经行不通了。BC4J组件解决这种问题的办法是,为传统的客户端/服务器逻辑提供不同的实现地点,结果是使业务逻辑和数据验证代码中的数据路径变得更短。使用BC4J就好像在临近客户端应用程序的地方出现了一个虚拟数据库(包括表、列、同义词和元数据)。您可以将BC4J简单地想象成一个黑盒数据库。它可以和一个或更多客户端进行交互,同步数据,管理缓冲区,并实现数据模型的基本功能。研究一下BC4J组件的可扩展性,就会意识到它们除了充当虚拟资料档案库的角色之外,还可以提供更多的功能。BC4J通过包含复杂业务逻辑这种元素,提供了一种可扩展的架构,使您能够远远超越传统的关系数据库结构。例如,无需采用BEFOREINSERT触发器就可以实现逻辑“或”的约束关系。只要增加一点儿代码,再充分利用部署选项,您就可以优化系统的整体性能。实际上,每个应用程序都需要对基本的BC4J组件进行一些修改。因此,理解BC4J组件是如何设计的及如何使用BC4J的接口非常重要。1.3在JDeveloper中创建应用程序代码JDeveloper是一个应用程序开发工具,可以帮助您迈出Java世界中的第一步。它既可以像一张白纸,所有复杂的文章都由您自己来书写;也可以给那些喜欢用4GL的拖放技术开发应用程序的人用做代码生成器。JDeveloper还可以自动生成基本的数据库接口代码,允许您定制出满足需要的结果。理解Java和JDeveloper,就如同同时学习英语和一个计算机字处理程序。在您投入精力做这种事情之前,应该对其他的计算机语言和应用程序开发模式有一定的经验。最好是在阅读本章的同时,实际创建一下本书动手练习里面介绍的那些项(item)和结构(structure)。这样,您在尝试编写真正代码时就可以迅速了解开发环境。传统环境和JDeveloper环境的主要区别是:在有些开发环境中,用户界面和它与数据库之间的交互是不可分离的。在JDeveloper中,您可以在称为项目(project)的逻辑容器中创建文件。每个程序通常由两种类型的JDeveloper项目组成:Java业务组件使用Java和XML建立及编写,提供与数据库交互的组件。用户界面组件与逻辑主要由Java及与Java相关的语言建立和编写。JDeveloper为协助您产生多层体系结构的数据库应用程序进行了优化。在JDeveloper背后,生成多层应用程序的功能集中在BC4J上。多层体系结构提倡从逻辑上划分出下列元素:客户层客户层支持终端用户对数据访问的需求。对于复杂的GUI,可以在Internet上通过浏览器的脚本处理能力运行应用程序代码,也可以在客户端的桌面上安装应用程序代码,并从浏览器之外运行它。可编辑可编辑精品精品可编辑精品应用程序层应用程序层一般要强制实现业务逻辑,并对数据访问进行调整。应用程序服务器上包含的业务逻辑可以被多种客户端及应用程序重用,这样就可能实现跨越多层体系结构的物理和逻辑资源共享。应用程序层还可以包含专门的报表和分析工具,以便处理复杂的业务智能需求。另外,应用程序层(包含J2EE体系结构中的Web层和业务层)还能够提供在浏览器中显示的HTML用户界面代码。数据库层数据库层是存储及查询数据的地方。这一层中也可以包含一些链接,指向其他外部数据源和应用程序,这些应用程序也可能是组成整个体系结构的成员。下面几小节介绍了JDeveloper用于支持应用程序的代码构造和组织方式。1.3.1工作空间工作空间(workspace)是JDeveloper中最高级别的容器。除了连接之外的全部代码都必须包含在某个工作空间中。工作空间在大小和范围上大概与FormsDeveloper中的一个.fmb文件相对应。每个工作空间都由一个扩展名为.jws的文件实现。这是一个XML文件,其中包含了组成这个工作空间的项目文件。工作空间文件包含了一些指针,指向组成它的项目文件。1.3.2项目项目(project)是JDeveloper中下一个级别的容器,包含代码文件。您可以将项目看作是应用程序的主要部分。典型的情况下,应用程序被划分为两个项目:一个用于BC4J组件,一个用于UI组件。一个项目可以位于相同或不同的工作空间之内。项目代表一起部署的若干代码文件。它是在一个后缀名为.jpr的文件中实现的。该文件是一个XML文件,其中包含组成项目的代码文件的文件名。1.3.3JDeveloper目录结构用JDeveloper建立的应用程序可以划分到多个目录中。通常工作空间存储在一个目录下,该工作空间内的项目则存储在工作空间目录下面的子目录中。在每一个项目的目录中,JDeveloper会为Java源代码和编译过的代码额外生成两个目录。保存源代码的文件夹名为src,编译后的代码保存在classes文件夹中。每个这类目录中的子目录都与某个指定的包相对应,如图1-3所示。图1-3在BC4J项目的包目录中,还有一个额外的common文件夹,保存了所生成的BC4J配置文件。可编辑可编辑精品精品可编辑精品图1-4显示的是JSP项目的目录,它位于JDEV_HOME\jdev\mywork\LocDeptWS目录下,其目录结构不同是因为这个目录结构是与J2EE标准相对应的。除了classes和src子目录之外,源代码存储在public_html子目录下。WEB-INF文件夹中保存XML文件,它的lib子目录保存可执行的jar文件。第21章将深入介绍这种目录结构。图1-41.3.4JDeveloper中的文件管理一旦创建了工作空间和项目之,您也许就会改变对文件名的想法。您可以在导航器(Navigator)中选中一个工作空间或项目文件,然后选择File|Rename命令对其重命名。这样做并不会改变工作空间或项目文件所在目录的名称。要改变目录的名称,应该选中工作空间或项目,单击导航器工具栏中的Removefrom按钮,然后用操作系统的工具改变这个目录的名称,再把工作空间添加回IDE。也可以用相同的方法对代码文件重命名,不过要小心那些引用。如果其他文件使用或引用了您正在重命名的文件,那么那些文件在重命名之后就无法正常工作了。您可以选中文件,然后选择Tools|Refactor命令,这样可以在所有依赖的文件中传播重命名的操作结果。当您重命名一个包含子类的Java类时,这一点非常有用,因为所有的子类中都包含了一个extend语句,其中的名称就是您重命名的类名。Refactor操作将改变那些引用。1.3.5高级向导和低级向导JDeveloper包含多种不同的向导。有些向导建立的是应用程序的实际部分,另一些向导则建立单个的组件,如类、实体对象、甚至是一个UI组件域。在本书的某些章节中提到的向导范围更大一些,可以建立多个组件,构成一个项目中重要的组成部分(比如,包含很多对象的BC4J项目),这样的向导称为高级向导。那些仅仅建立一个实体对象等组件的向导,在本书中称为低级向导。在学习JDeveloper基本体系结构的过程中,使用高级向导可以帮助您快速地建立可以运行的应用程序。然而,对于真正的应用程序产品,高级向导往往不能建立您真正需要的应用程序。您要么需要用低级向导及对话框设置更确切的选项和功能,要么对高级向导生成的代码进行修改。可编辑可编辑精品精品可编辑精品1.3.6开发步骤在JDeveloper中创建应用程序代码,一般要经历如下步骤:(1)创建工作空间。(2)如果这个应用程序需要连接数据库,则创建一个BC4J项目。(3)定义并测试BC4J项目。(4)创建应用程序用户界面项目。(5)为表单及其他用户界面对象添加代码。这些代码使用了BC4J项目中的对象。(6)用BC4J项目测试用户界面代码。(7)部署BC4J项目和用户界面项目。贯穿本书的练习提供了详细的步骤,给您带来了创建不同风格应用程序代码的体验。1.4动手练习:用JDeveloper向导创建应用程序JDeveloper是一种3GL环境,您可以使用它生成或编写代码。因此,JDeveloper的工作空间和项目中可能包含任意分组组织的项。这个练习展示了如何使用向导创建一个BC4J项目和两个用户界面项目:一个是客户/服务器风格的Java应用程序项目,另一个是可以在Internet上发布的JSP项目。本书的第Ⅱ部分会介绍有关BC4J的详细信息,第Ⅲ部分将介绍有关Java应用程序的详细信息,第Ⅳ部分将对JSP页更深入地进行讲解。这个练习还介绍如何使用JDeveloper,并使您对其中主要组件有一个基本的理解。尽管本练习对JDeveloper主要的应用程序开发功能都有所介绍,第2章还是会详细地讲述本章中提到的一些功能和本章未曾涉及的一些功能。由于本章的中心任务是使您熟悉BC4J体系结构,所以在本练习里只会用到高级向导。通常,您会修改高级向导创建的代码,或者干脆就用低级向导创建代码。在第3章中,将用低级向导创建类似的BC4J对象和用户界面应用程序,这样您对于用JDeveloper生成实际的应用程序产品就会有感觉了。本练习创建的这两个应用程序可以放在包含任意个项目的任意个工作空间之中。这种将工作划分到项目和工作空间中的决定十分类似于将PL/SQL程序单元放置在一个或多个包中的思路。您必须确定每一个结构中都放些什么,以及如何放置。在本次练习中,我们将创建一个工作空间,用来保存所有的项目。练习中将用到3个独立的项目:第1个是BC4J组件,第2个是Java应用程序,第3个是JSPUI。每一个项目都代表了将作为一个单元来部署的若干文件。本练习由以下阶段组成:(1)创建工作空间和数据库连接准备新工作空间创建连接(2)创建BC4J项目创建项目可编辑可编辑精品精品可编辑精品测试其中的BC4J代码(3)创建Java应用程序创建项目创建客户端的数据模型创建JClient表单(4)创建JSP项目1.4.1创建工作空间和数据库连接打开JDeveloper的可执行文件(jdevw.exe)之后,将看到如图1-5所示的界面。图1-5程序的主窗口由多
本文档为【Oracle9iJDeveloper开发手册-构建J2EE应用程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
熊猫图文
公司专注课件、范文、教案设计制作等。用户至上,受到广大客户的一致好评,公司秉着用户至上的原则服务好每一位客户
格式:doc
大小:1MB
软件:Word
页数:34
分类:
上传时间:2021-11-03
浏览量:0