已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第部分 概 述第1章 JDeveloper概述JDeveloper 是一种用于 Java 编程的集成开发环境 (IDE)。它为设计、开发、调试和部署所有类型的 3GL Java 及组成 J2EE(Java 2 Platform,Enterprise Edition)战略的其他相关文件提供了相当丰富的特性。JDeveloper 包括很多向导和代码生成器,可以简化 Java 的内部机制,使您能够将精力集中在用 Java 解决业务问题上。它还提供了强大的代码组织与配置管理功能。 Oracle 9i版的 JDeveloper 与它的以前版本相比是一个巨大的飞跃。本章将从整体上介绍 JDeveloper,展示其中各种各样的特性和功能。本章讨论 JDeveloper 的一个主要特性Java 业务组件(Business Components for Java,BC4J),并概述如何用 JDeveloper 开发应用程序;还提供了一些简单的动手练习,以便您可以开始生成一些代码。有关 BC4J 的更详细信息将在本书的第 部分介绍。第 2 章讲述了JDeveloper IDE 本身由哪些组件构成。第 3 章讨论如何用 IDE 构建 BC4J 应用程序;对于 Java初学者来说,第 4 章简要介绍了一些重要概念,要想更有效地使用 JDeveloper,必须理解这些概念。第 5 章讨论了形成一致的命名约定的重要性,对于使用 JDeveloper 开发应用程序过程中需要用到的各种元素,都给出了如何为其命名的建议。用 JDeveloper 的调试特性进行调试的内容将在第 6 章讨论。第 7 章则概要描述了部署 Java 客户端(Java 应用程序和 applet)及 JSP(Java Server Pages, Java 服务器页面 )应用程序的方法。最后,第 8 章着眼于 9i 版中的一个新特性:类建模器(Class Modeler),说明了如何运用这个工具协助进行应用程序开发。本书经常会提到创建“应用程序”,下面的说明框将帮助您弄清楚作者在本书中是如何使用这个词的。什么是应用程序在 IT 业界,很多人都会用到 “应用程序”这个词。然而,在不同的环境中它可能代表完全不同的意思。一些人用“ 应用程序”表示整个计算机系统,其他人则用这个词表示整个计算机系统中的一部分,它在单个程序中物理地 实现。在本 书中,第 2 种定义将用来表示整个系统中的一个逻辑组成部分,通常是在单独的 JDeveloper 工作区内实现的。“应用程序”一词还有其他用法,如 Java 应用程序,这是与 Java 虚拟机(JVM) 一起部署在客户端的一类 Java 程序,这类程序不需要浏览器的介入。本书中的“Java 应用程序” 仅指这类特定的程序。应用程序模块(Application Module)是一种 BC4J 组件,客户端程序可以通过它访问一组视图对象和视图链接。第部分 概 述 2 1.1 JDeveloper 的过去、现在和未来JDeveloper 的起源可追溯到 1997 年,当时 Oracle 公司从 Borland International 获得了基于Java 的开发工具的许可,将这些开发工具与 Oracle 数据库、 Internet 及传统客户/ 服务器平台上的应用程序开发工具集成在一起。当时,Borland 公司的 JBuilder 是十分强大的 Java 开发工具。Oracle 购买了 JBuilder 的源代码,开始了其创建 Java 开发环境的历程。最初的 JDeveloper 1.0(称为 AppBuilder for Java)于 1998 年发布,它与其根基 JBuilder 非常相似。在 1998 年末,它被重命名为 JDeveloper。这种最初的相似性一直持续到 1999 年发布的 2.0 版。从这些早期的版本中,可以看出这个工具是如何在 Java 环境中逐渐成熟的。虽然该产品的新版本仅表现出一些表面变化,但在幕后 Oracle 公司却在致力于完美地解决 Java 程序连接到关系数据库对象的问题。1.1.1 过去:产品的历史与起源JDeveloper 1.0 和 2.0 版虽然都是很有用的 Java 开发产品,但如果要创建能与 Oracle 数据库交互的应用程序,它们提供的支持就太少了。公平地说,这也是由于当时的技术水平所限。辛勤的 C+和 Java 程序员例行地担负起编写代码访问 Oracle 数据库的任务。然而,即便是对于掌握了一定技巧的程序员来说,这种编码工作也要花费大量的精力。因此,早期接受 JDeveloper的人主要是这类 Java 开发人员,他们想寻求一种方法来创建与 Oracle 数据库交互的应用程序。而 那 些 习 惯 于 使 用 易 于 与 数 据 库 交 互 的 产 品 、 以 及 用 Forms Developer 等 工 具 高 效 地 创 建 应用程序的 Oracle 专业人员,并没有很快接受这一新产品。Oracle 公司的项目战略并没有使情况变得简单。除了 JDeveloper 之外,Oracle 公司还有一些产品可以让开发人员创建应用程序,并部署在 Web 上: Oracle Forms Developer(有时又称为 Web Form)继续走向成熟。在 9i 版中,Web 已经成为发布 Oracle 表单的惟一途径。该工具基于 applet 技术,而由于防火墙和性能的问题,这项技术在很大程度上已经被越来越多的 Internet 应用程序开发团体所抛弃。 PL/SQL Web Toolkit(mod_plsql)起源于早期版本的 Oracle Application Server,Oracle Designer 用它生成 HTML 客户端代码。PL/SQL Toolkit 允许在数据库中编写可向浏览器输出 HTML 的 PL/SQL。 PL/SQL Server Pages(PSP)允许在 HTML 内嵌入 PL/SQL。PSP 以一种类似于 JSP 的方式充分利用了服务器页面的概念。 Oracle Portal 最初被设计用来作为专门访问数据库的简单工具,在市场上称为WebDB。慢慢地, Portal 演变成一种有用的 Web 站点开发工具。1. 为什么采用 JDeveloper面对所有这些选择,为什么 Oracle 公司最终决定选择 JDeveloper 作为主要开发平台呢?这一决定表明了 Oracle 公司的长期发展规划。Oracle9i JDeveloper 构建于 J2EE 之上。因此,JDeveloper 与 Oracle 历史上的任何其他产品相比具有更强的基础。Oracle 公司以前的所有产品都不得不在现有技术、向后兼容性及 Oracle 内部政策之间折衷。JDeveloper 基于一种相对较新的技术,其他供应商为此技术提供大量支持,并有经过验证的标准做后盾。第 1 章 JDeveloper 概述 3 在 JDeveloper 从 1.0 版发展到 9i 版的过程中,Oracle 公司在产品智能和体系结构基础方面投入的精力已经远远超过 UI 组件。甚至对于现在的 9i 版本来说,产品中的某些部分依然处于雏形阶段,主要的焦点都集中于创建一个能长期发展的牢固基础。2. 引入 Java 业务组件虽然这种长期的设计哲学从体系结构的观点来看是正确的,但是传统的 Oracle 开发社区成员却会因此感到沮丧,他们经常会因为在 JDeveloper 中开发应用程序过于低效而感到无耐。直到 JDeveloper 3.0 引入 BC4J,Oracle 构建 Java 应用程序访问 Oracle 数据库的方向才变得清晰。BC4J 有助于自动实现大多数 Java 代码与关系数据库表交互时所必需的复杂工作。BC4J 是支持Java 与数据库交互的架构。BC4J 向导能自动生成 Java 应用程序与数据库安全交互所需的代码,解决了以前开发中遇到的安全性、锁定及性能问题。BC4J 生成的代码严重依赖于 Oracle 提供的一个 Java 库。因此,由 BC4J 向导生成的实际代码量是很小的。为了使开发人员能够创建包含用户界面的 Java 应用程序, Oracle 提供了直接与 BC4J 生成的元素相联系的可选 Swing 组件的扩展,BC4J 已经从概念上被证实是牢固可靠的,能够处理复杂的应用程序,而基于 Sun 公司的 InfoBus(信息总线)体系结构构建的 Data Aware 组件已经被证明是有问题的。业界抛弃了 InfoBus 体系结构之后,Oracle 公司也抛弃了所有 InfoBus 技术,以利于 JDeveloper 9i 支持 Sun 公司的模型-视图-控件器(Model-View-Controller,简称 MVC)体系结构(在 JDeveloper 中实现为客户数据模型)。本章稍后将更加详细地介绍 BC4J。同时,本书第部分将深入讨论 BC4J 的使用和结构。1.1.2 现在: JDeveloper 的现状目前,JDeveloper 中包含了非常稳定的 Java 业务组件,并且已经解决了 9i 版存在的许多v.3.2 性能问题。MVC 体系结构允许开发人员更有信心地创建访问 Oracle 数据库的 Java 应用程序或 JSP。Oracle 9i JDeveloper 提供了一种稳固的 Java 开发环境。在 Web 上搜索有关 JDeveloper 的文章就能发现,Java 社团对 JDeveloper 有很多积极的评价。由于有了 BC4J 层,在编写与 Oracle数据库交互的 Java 代码方面,JDeveloper 就独占鳌头了。1. 创建 JSP 页JSP 文件生成发送到客户端的 HTML 页。JSP 文件被编译成 servlet,这是一个纯 Java 程序。尽管大多数业务逻辑都可以用 Java 编写,但 UI 部分通常还是用 HTML 创建的。JDeveloper 作为一种创建 JSP 页的 Web 应用程序开发工具,对于传统的已经习惯了 Forms Developer 那种一体化产品开发环境的 Oracle 开发人员来说,并不是一个完整的解决方案。在本书 1编写之际,JDeveloper 对于 HTML 页可视化设计的支持与 Microsoft 公司的 Frontpage 等工具相比,依然十分有限。对代码高亮显示、代码自动补全、结构化显示及调试等的支持非常完整,这也就是对 JDeveloper 中运行和调试 JSP 代码所提供的支持。1 译者注:此处指本书的英文原版。第部分 概 述 4 当前使用 Forms Developer 和 PL/SQL 的开发人员不能简单地用 JDeveloper 和 Java 替代原来的方法来创建部署在 Web 上的复杂客户/服务器应用程序。构建具有完整功能的允许用户安全 高效 地 与 数 据 库 交 互 的 Web 应 用 程 序 是 一 项 极 为 复 杂 的 任 务 。 这 些 内 容 将 在 第 7 章 中 详 细 介 绍 。2. 创建 Java 应用程序部署在客户/服务器或者 Intranet 环境中的 Java 应用程序的开发情况,与部署 JSP 页的情况有很大的差别,因为 JDeveloper 对 Java 应用程序的开发提供完整的支持,包括可视化编辑及在表单风格的界面里设置属性等。与使用 Forms Developer 等产品相比,使用 JDeveloper 可以创建同等甚至更复杂或高级的应用程序。然而,用 JDeveloper 创建应用程序的速度无法像用 Forms Developer 一样快。JDeveloper 向导还不够成熟,作为一种 RAD 开发工具,JDeveloper 还不足以与 Forms Developer 有效地竞争。虽然 Forms Developer 是一种真正的 4GL,其中对象的属性都存储在一个内部资料档案库中,而 JDeveloper 实际上是一个代码生成器与组织器。尽管您可以像在 4GL 环境中那样与 JDeveloper 向导和 IDE 交互,但是实际上是在创建 Java代码。应用程序开发过程经常会超出 JDeveloper 向导的能力,必须手动修改向导生成的属性,或是添加向导未生成的代码。1.1.3 将来:远景展望从 9i 版中可以看出,Oracle 公司对 JDeveloper 寄与了很大的期望,表明这个版本比以前版本的范围要广泛得多。对统一建模语言(Unified Modeling Language,UML) 图表的有限使用、功能完备的软件配置管理(SCM)资料档案库,以及生成数据定义语言(Data Definition Language,DDL)的能力都表明了 Oracle 公司对这个产品的长期发展思路。最终目标为所有 Oracle 系统形成一个单一的集成开发环境。数据库和应用程序的设计、创建及维护都可以用一个产品来处理。也许 JDeveloper 最终会将其他产品的功能包括进来,如Oracle Designer、Oracle Forms Developer 及一些第三方产品 (如 Quest 软件公司(Quest Software)的 TOAD 或 SQL Navigator)。这些目标的最终实现还需要几年的时间。当 Oracle 公司将这种期望变成现实时,Oracle 专业人员将拥有梦寐以求的集成设计开发环境。短期前景与长期前景JDeveloper 的短期和长期发展前景会如何?在短期内,Oracle 有理由对该产品的核心体系结构感到满意。目前,他们正致力于改进产品的应用程序开发效率。未来 JDeveloper 的发展,最终可能实现改良过的向导,以帮助将目前开发应用程序所需执行的任务实现自动化,也有助于缩小 JDeveloper 和 Forms Developer 之间在开发企业内部应用程序上的差距。第二个短期改进会集中在把 JDeveloper 作为一种建模和设计工具上。当前的类建模器反映了 Oracle 在使用 UML 设计数据库方面的兴趣。到 2003 年底,JDeveloper 作为一种数据建模工具,将会与 Designer 形成有效竞争。为了支持软件开发周期中更多的内容,UML 的其他部分也会合并到 JDeveloper 中。用例 (用于描述业务需求的 UML 格式) 也将包括进来,以便支持分析过第 1 章 JDeveloper 概述 5 程。如前所述,长期目标显然是向一种“一站式”开发环境转变。为满足建立 Oracle 系统时遇到的不断变化的设计和开发任务,新的特性正在系统地、从容不迫地加入到 JDeveloper 中。1.2 Java 业务组件与其他 Java 开发工具相比,JDeveloper 的主要优势在于它的 Java(BC4J)业务组件架构及相关的代码生成器。BC4J 是 JDeveloper 产品的核心,正是它使建立 Java 或基于 Web 的应用程序的 Oracle 开发人员对 JDeveloper 情有独钟。BC4J 的根基是一种编程协议或标准,它们描述了如何构建与关系数据库交互的类。JDeveloper 用 BC4J 作为处理数据库 DML 操作(查询、插入、更新及删除)的主要方式。在BC4J 及类似产品出现之前,将基于 Java 的应用程序连接到数据库是一项异常困难的任务。为了使 Java 前端与数据库协调工作,必须编写复杂的 JDBC(Java Database Connectivity)和/或在 Java中嵌入 SQL 代码(SQLJ)。除此之外,还必须维护自己的数据缓存,批处理自己的更新,并跟踪表的锁定与提交。这种与数据库之间的复杂接口被证明是创建基于 Web 应用程序的最大障碍。那些尝试过开发应用程序的组织,如果没有使用 JDeveloper 这样的工具,经常会超出预算,并且开发出来的应用程序也难于维护。JDeveloper 中的 BC4J 组件提供了到数据库的功能接口,并且可以使用内置的代码生成器或向导来构造这些组件。本章仅仅从总体上介绍一下 BC4J 组件。本书的第部分会深入讨论 BC4J,该部分及其他几章中的动手练习展示了 BC4J 组件应该如何与 Swing 组件、 JSP 应用程序及其他 JDeveloper 生成的代码结合使用。1.2.1 Java 与 XMLBC4J 组件是 Java 与 XML 相结合的产物。 XML 与 Java 都是开放源代码的(非专有的) 语言。由于这两种语言都与操作系统和平台无关,所以它们可以通过网络进行很好的交互,也可以跨Web 进行操作。这两种语言都具有互为补充的独特优势。 Java 是一种模块化、可移植的语言,鉴于其内在的安全性和支持 Internet 的能力,它是一种业务应用程序之间进行通信的理想机制。然而,Java 缺乏在不同平台和应用程序之间交换数据的有效方法,这一点正是可扩展标记语言(Extensible Markup Language,XML)的长处。XML 是一种与 HTML 类似的标签或标记语言;不过 XML 的标记功能更加强大,因为可以对它的基本标记进行扩展,以满足不断发展的需要。HTML 用标记来描述希望的显示方式;而 XML 创建标记的目的是用来描述文本或数据的结构和内容。应该注意到,XML 和 Java 一样,是区分大小写的语言。XML 用于定义数据,而 Java 用于对数据进行操作。您将会发现,BC4J 组件包含了与之相关联的 XML 和 Java 文件。XML 文件存放了定义该业务组件的元数据,而 Java 文件存放了实现业务组件的方法。Java 文件中包括了 get ( )和 set ( )方法,可以在运行时动态生成插入、更新和删除语句。而且,XML 和 Java 文件中不但可以包含数据库表引用,还可以包含更多信息。它们也可以定义和实现验证规则。第部分 概 述 6 1.2.2 BC4J 结构BC4J 是 JDeveloper 中一种结构很好的、经过仔细设计的组件。由于 BC4J 向导仅提供了修改底层 Java 类和 XML 文档的简单机制,所以只有高级 JDeveloper 用户才知道底层结构的细节。从开发人员的角度看,您只需使用 BC4J 逻辑对象概念考虑问题。只有在需要编写超出向导处理能力的复杂验证或编码功能时,才会操作 Java 类。BC4J 组件可以从概念上将应用程序分为两个主要部分,如图 1-1 所示。 用户界面和客户端逻辑 数据库接口和业务逻辑 UI 客 户 端 BC4J对 象 数 据 库 图 1-1使用这种面向对象的架构可以帮助您创建可重用的业务组件,在数据库和用户界面(User Interface,UI)之间实现有效的通信。BC4J 向导读取 Oracle 系统视图,获取代表数据库结构的元数据。使用这个元数据,向导可以生成 XML 和 Java 代码,从而提供一个可以定制的架构,您可以向该架构添加数据验证器以及其他业务逻辑。BC4J 组件提供了很多好处。首先,使用这些组件可以更容易实现简单性和组织性。在应用程序中包含一个 BC4J 项目,意味着您可以根据 BC4J 组件的部署位置,来优化代码的整体性能和可重用性。其次,可以将数据验证这类共享代码移到 BC4J 层,这样就改善了代码的可维护性。再次,BC4J 类可以部署在数据库服务器、应用程序服务器或本地客户端。对于那些对验证需求强烈的应用程序而言,这种可移植性将会使它们获的重大的性能改进。BC4J 使 Java 应用程序能够容易地与关系数据库通信。通过与 BC4J 向导交互,您可以生成XML 文件和 Java 类。应用程序开发人员随后可以编写 Java 代码,与 BC4J 生成的处理与数据通信的类进行交互。生成的这些类能够正常工作,这是因为 Oracle 提供的 Java 类库中包含了所有复杂的数据库交互例程。在 BC4J 出现之前,编写 Java 应用程序来与关系数据库通信是一项异常复杂的任务,超出了大多数开发人员的技能水平。少数勇敢的先锋曾尝试自己完成这项任务,现在,该任务变得如此简单,他们会十分高兴的。1.2.3 BC4J 组件BC4J 组件分为 3 个主要部分:数据定义和验证组件、数据操作和过滤组件以及存储位置和容器。对于熟悉数据建模的读者来说,图 1-2 有助于您理解与每个 BC4J 组件关联的关系和基数第 1 章 JDeveloper 概述 7 (cardinality)。如果对 UML 建模不熟悉,可以简单地将这些图看作表示 BC4J 层中总体关系的框图(附录 C 会介绍这种 UML 图中使用的符号) 。这个信息有助于可视化这些组件如何彼此相关,以及它们如何被组织为组。 应 用 程 序 模 块 视 图 链 接 关 联 视 图 对 象 实 体 对 象 域 * * * * * 2 2 * * * * * * 图 1-21. 数据定义和验证组件下面介绍数据定义和验证用到的组件: 实体对象(Entity Object) 实体对象基于数据库表、视图、图或同义词,并且包括数据库存储需求。实体对象可以从已有的数据库对象生成,也可以手工定义,并以此创建新的数据库表。实体对象包含属性(列) 定义。 属性(Attribute) 属性有两类:实体属性和视图属性。实体属性是实体对象的一部分,通常对应于表的列,可能包含验证规则和业务逻辑。有些属性不能查询,如 BLOB 类型,应该在实体对象向导(Entity Object Wizard)中取消选中 Queriable 复选框。视图属性不过是实体属性的一种。可以为计算列(calculated columns)等项创建额外的视图属性。 关联(Association) 关联定义了一对实体对象之间的关系。典型的关联表示数据库中的外键约束,但是在任意一对实体对象属性组件之间都可以定义关联。还可以在关联的每一端指定多个属性,只要双方都有同样数目的属性即可。关联是双向的。 域(Domain) 域是用户自定义类型,表示一个属性可以具有的值的类型。例如,您可以创建一个域,以保证输入的社会保险号确实是 9 位数字。当您为该组件编写验证逻辑时,必须将逻辑放入一个名为 validate( )的方法中,这个方法会被该域的 Java 文件的构造函数调用。每次用这个域实例化一个新对象时,构造函数就会调用 validate ( )方法,以确保新增加的属性满足您定义的准则。 特性(Property) 在 BC4J 组件的概念中,特性是一个字符串类型的名/值对。特性用于存储字符串文本。这些文本串可以在运行时显示信息,例如,定义某个用户的访问等级,指定使用哪一种类型的 UI 控件,以及设置域的格式掩码。您可以为域、实体对象、视图对象、实体属性、视图属性及应用程序模块定义特性。BC4J 特性存储在相关联的组件的 XML 文件中。第部分 概 述 8 2. 数据操作或过滤组件视图对象和视图链接通过对实体对象定义的数据进行过滤,提供适当的数据来支持 UI。 视图对象(View Object)。视图对象用 SQL 查询对实体对象所定义的数据进行指定和过滤。客户端应用程序通过视图对象的 get( )和 set( ) 方法可以实现导航、更新、插入和删除数据的操作。 视图链接(View Link)。视图链接用于表示视图对象之间的关系。这些关系仅仅在一个方向上实现。因此,在一个主从关系(主对象是源,从对象是目标 )中,只有源对象定义了get/set 的访问方法。对于主表中当前选中的行,视图链接为详细表提供过滤后的行。视图链接将视图对象链接起来的方式与关联链接实体对象的方式相同。不过,在视图链接和关联之间没有程序性的联系。关联可以用于生成视图链接,视图链接也可以独立于关联创建。3. 存储位置和容器BC4J 层中用来放置元素的位置/ 容器有两种: 包(package)。Java 类是通过包中的目录来分组的。在开发期间,这些包等价于存储源代码的硬盘上的子目录或文件夹。 应用程序模块(application module)。应用程序模块定义了 BC4J 视图对象和视图链接,客户端应用程序将与这些组件进行交互。在同一个 BC4J 层中可能有多个应用程序模块。也可以在一个应用程序模块中嵌入其他应用程序模块。您也许会想在一个特定的应用程序屏幕或任务中用多个应用程序模块实现业务逻辑,为每一部分逻辑提供它自己的模块。典型的情况是,一个应用程序模块中可能包含 34 个视图对象和链接,甚至可能更多。一个大的应用程序可能包含 20 个或更多的应用程序模块,其中每个模块都包含与给定任务对应的适当视图对象和视图链接。1.2.4 BC4J 逻辑体系结构从逻辑上讲,用 BC4J 创建的对象可分为两类:数据库接口对象与应用程序端对象。在数据库端,BC4J 包括了实体对象和关联。应用程序端对象则包括视图对象、视图链接及应用程序模块。1. 实体对象及关联实体对象及关联多多少少都和表及外键约束相对应。不过,并不是必须像构造表那样来构造实体对象。如果是初次使用 BC4J,可以创建只是表的映像的默认实体对象。默认关联将根据数据库中的外键约束来生成,以便您最终就可以在 BC4J 层得到数据库的精确映像。不过,实体对象并不一定非要构造得像底层数据库表。这两者可以在以下方面有所区别: 您可以定义实体对象,但并不一定表示表中的全部字段。如果开发人员永远不会使用CREATED_DATE、CREATED_BY、MODIFIED_DATA 及 MODIFIED_BY 等字段,就没有理由在应用程序中理会这些字段。而且,如果数据库中存在非常宽(字段很多) 的表,那么在 BC4J 层中包含所有这些字段将会使实体对象变得很难操作。第 1 章 JDeveloper 概述 9 有些字段可以在实体对象中存在,但不在数据库中存在。例如,在交易清单明细中用TOTAL 字段表示数量和价格的乘积;或者显示与表相关联的函数,例如,为了显示的方便,在 EMP 表中将名和姓连接在一起作为显示名称。这使开发人员在想显示特定的雇 员 记 录 时 只 要 访 问 属 性 即 可 , 不 用 每 一 名 开 发 人 员 都 去 决 定 显 示 记 录 时 该 用 哪 一 个 字段 。 您可以定义更新不同数据库字段的实体属性。这可以简单到将一个现有的字段重命名,这可以使数据库更清晰或更混乱,也可以用来简化开发环境。例如,“生日”和“年龄”等 BC4J 实体属性可以结合使用,以填充物理数据库中的“出生日期”字段。 您可以在实体对象中执行额外的验证操作。为了实现这一点,可以将业务逻辑从关系数据库复制到 BC4J 层中,以支持 CHECK 约束或基于触发器的验证。甚至可以在 BC4J 层中添加额外的验证,但使用的时候要多加小心。如果任何验证规则仅存在于实体对象中,而不存在于数据库中,那么只要应用程序绕过了 BC4J 层,就可以绕过其中包含的任何验证。 定义的实体对象的行为可以与具有 INSTEAD OF 触发器的视图类似。可以绕过标准的INSERT、UPDATE 以及 DELETE 逻辑,转而执行所期望的代码。不过,对于这类 BC4J视图对象,也得同样小心:直接访问表的应用程序将会绕过数据库视图中的触发器代码。 实体对象不必一定与某个表关联。实体对象可以是完全由人工构造,从开发人员角度看,实体对象就像一个表,但是与之交互的可以是替代数据源、普通文件或者与应用程序完全处于同一位置的 Java 代码。正如实体对象通常是根据关系数据库中的表生成那样,关联通常根据外键约束生成。然而,BC4J 中的关联可以与数据库中的参照完整性约束不同。您可以将关联的基数改为与在数据库中的不同,不过请记住,即便是 BC4J 层接纳了数据,BC4J 规则也永远不能削弱底层数据库的规则;只能增强这些规则。您也可以创建在数据库中不存在底层外键约束的 BC4J 关联。2. 抽象层实体对象与关联就是开发人员对物理数据库的看法。如前所述,这种理解可能和实际的物理数据库不同。因此,实体对象是开发人员和数据库之间的一个抽象层。抽象层还存在一些细微的局限性。实体对象永远也不能直接指向多个表或视图。这并不是说实体对象不能与数据库中的多个表或者视图进行交互。如前所述,这实际上可以用两种不同的方式实现: 可以覆盖某个实体对象默认的 INSERT、UPDATE 和 DELETE 行为,让它完成更复杂的事情。 可以使用包含 INSTEAD OF 触发器的数据库视图。这种策略允许能查询任意数目表的复杂视图,并用 INSTEAD OF 插入、更新和删除触发器,实现任何需要的行为。使用实体对象及关联,Oracle 已经有效地再现了常有 INSTEAD OF 触发器的数据库视图所提供的能力。您冒着风险把代码放到可能被绕过的地方,而没有把代码放在数据库中;如果把代码放在数据库中,那么在不同的平台和工具下无需重写代码就可以实现重用。而且,作为设第部分 概 述 10 计人员,如果选择 BC4J 作为放置业务逻辑的地方,就是在染指产品的体系结构。那么为什么还会有人不想把实体对象做成底层表或者视图的精确映像呢?这样做的原因如下: 改善性能。您可以选择 BC4J 层作为放置验证规则的地方,这样可以改善性能。对于有些应用程序,在数据库层实现代码要求在网络上传输消息,而在业务逻辑层实现则可能极大地提高性能。 支持超负荷的表。可以将多个实体对象指向同一张表。这使开发人员可以支持包含超负荷表的抽象数据模型。例如,如果用典型的单表方式实现雇员超类,它包含薪水工及小时工两个子类,会得到一个单一的雇员表,其中包含一个类型字段。按小时计酬的雇员和领薪水的雇员都保存在一张表里。在 BC4J 中,可以为领薪水的雇员和按小时计酬的雇员创建相互独立的实体对象,其中每种对象的属性都指向相应的字段。然而,数据库中的视图可以简单地完成同样的功能。实体对象层仍然是在数据库之上的另外一层抽象。但是,应用程序并不与这一层直接进行交互。在实体对象和关联之上还存在一个抽象层,称为视图对象和视图链接。3. 视图对象与视图链接视图对象和视图链接可能分别对应于实体对象和关联。但视图对象能实现更多功能。当您运行 BC4J 向导并接受默认设置时,在视图对象与实体对象,以及视图链接与关联之间存在一对一的对应关系。然而,正如实体对象和关联不必与表和外键约束完全相同一样,视图对象和视图链接也不必完全对应于实体对象和约束。实际上,视图对象与实体对象之间连接的紧密程度甚至比实体对象与表之间的紧密程度还要低。视图对象的主要特征是:它们正是支持应用程序所需要的数据。视图对象是用于访问关系表的一个简单查询。视图对象与实体对象之间的关系可以是多对多的。视图链接是指视图对象之间的关系。还可以使用视图对象的结构直接与表或其他数据结构进行交互,而不是使用实体对象。只要代码的行为合理,视图对象并不必一定与外部数据容器交互。实体对象所的所有灵活性都可以同样适用于视图对象。您可以显示属性、计算属性等,还可以在视图对象中放置验证逻辑;然而,验证逻辑通常应该放在数据库和/或实体对象中,因为那些位置更加集中。您也会考虑在视图对象中加入验证逻辑,以便强制实现特定应用程序的验证规则。4. 应用程序模块视图对象和视图链接都用于名为应用程序模块的集合中。为了支持主从式(master-detail) 2的应用程序,您必须在创建应用程序模块之前设置主从视图链接。应用程序模块还包含了访问数据时需要用到的数据库连接定义。1.2.5 使用 BC4J当您创建特定应用程序的 BC4J 时,就是在建立一组 Java 类,其中包装了 DML 命令和存储2 译者注:有些地方称为主细表关系,本书中统一称为主从表关系。第 1 章 JDeveloper 概述 11 数据结构定义的 XML 文档的引用。这些 Java 类扩展了基本的 BC4J 类库,向数据库发出 JDBC调用,接管所有的插入、更新、删除和加锁功能请求,以使应用程序运行。这使您能够将与数据库访问有关的逻辑完全封装起来。它为开发人员提供了一种开发应用程序的简单方式,像Oracle Forms Developer 那样在表之上搭建模块。然而,BC4J 的功能远远不止于此。复杂的验证通常是在数据库中实现的,比如在表或者视图上创建 INSTEAD OF 触发器。 INSTEAD OF 触发器视图是一种 Oracle 视图,它使用用户提供的触发器代替默认的插入、更新和删除行为。在 BC4J 类中也可以实现复杂的数据验证。除了这个额外的选项之外,还是很难制定出准则,告诉人们什么情况下把数据验证逻辑放在数据库中,什么情况下又该把验证逻辑放在 BC4J 组件中。在一个非纯 Java 的环境中,将验证逻辑放在 BC4J 组件中可能会很危险。一些应用程序会通过 BC4J 访问验证,而另一些在其他产品中编写的应用程序可能无法通过 BC4J 访问验证逻辑。如果您正在工作的环境是完全基于 Java 的,那么用 JDeveloper 创建和操作 BC4J 组件就会十分简单,您完全可以选择用 BC4J 实现服务器端的验证,因为减少开发时间就意味着降低成本。然而,只有保证所有涉及数据更改的 DML 操作都使用 BC4J 组件,才能说这种操作是合适的。BC4J 类 还 能 够 缓 存 数 据 , 供 多 个 用 户 共 享 , 由 于 这 样 做 不 用 再 访 问 数 据 库 , 因 此 会 提 高性 能 。1.2.6 使用 BC4J 的方法使用 Oracle 9i JDeveloper 和 J2EE,就可以使用多种方法建立应用程序。现在,系统业务规则可以在以下的任何地方驻留: 核心数据库过程和触发器 带 INSTEAD OF 触发器的数据库视图 BC4J 实体对象及关联 BC4J 视图对象及视图链接 应用程序逻辑如何在应用程序中使用 BC4J 可以有多种思路。业务规则不应该放在应用程序逻辑或视图对象中。之所以在此处给出这两项,是因为业务逻辑的确可以在这些地方驻留。有人声称所有的业务逻辑都应该放在数据库中,应用程序根据需要使用其中的一个子集。又有人说实际上所有的业务逻辑都应该存储在 BC4J 层,这样数据库就只是作为一个永久存储类中数据副本的地方。每一种策略的拥护者都以极大的韧性坚持着自己的开发风格。本节将讨论这两种方法的优缺点。要记住,这些方法都依赖于 JDeveloper 对它们的支持能力。由于 JDeveloper 的功能在不断扩展和进化,因此这些优缺点也可能发生转变,现在几乎无法实现的方法在将来发布的版本中也许会变得更加可行。1. 以数据库为中心的方法以数据库为中心的方法假设您一开始就具有一个功能完整的 Oracle 数据库。当进行应用程序的逻辑设计时,很明显,如果将数据库视图和用户界面元素对应起来实现会更加简单。创建这些视图时应该使用 INSTEAD OF 触发器,这样就可以支持插入、更新和删除功能。第部分 概 述 12 视图对象中显示的所有字段都是数据库视图中的列。对于每一个程序来说,都要创建一个小 BC4J 项目,其中包含实体对象和关联,它们与创建程序必需的表、视图、外键约束之间存在一对一关系。接下来,要为每一个实体对象和关联创建默认的视图对象和视图链接。然后将这些组装成一个应用程序模块,用来支持前端程序。因为所有的业务逻辑都在数据库内部验证,所以只有需要增强性能时才会把验证逻辑加进实体对象中。很少会发生向实体对象或视图对象中添加额外属性的情况,这是由于这些属性已经包含在数据库中的基础视图里面了。每个程序都有自己的 BC4J 项目。BC4J 项目不会被其他程序共享。应用程序模块相对较小,其作用范围与 Oracle Forms Developer 文件差不多,可能稍有区别。以数据库为中心方法的优点 用以数据库为中心的方法构建应用程序具有如下优点: 这种方法对于现有的 Oracle 开发人员来说是感觉最舒服的。它基本上使用相同的逻辑为Oracle 数据库创建前端程序。 这种系统不会紧密依赖于单一的产品(BC4J)。大部分非 UI 代码都位于数据库中。例如,由于所有的业务规则都放在数据库中,所以不访问 BC4J 层的程序也会使用数据库中的代码。 BC4J 上几乎所有的工作都可以通过 JDeveloper 向导来完成。需要手工编程的工作几乎没有。应用程序模块的 BC4J 项目只需花几个小时甚至更少时间就可以完成,因为您只需为每一个数据库视图给出一个默认的实体对象定义即可。以数据库为中心方法的缺点 下面是用以数据库为中心的方法构建应用程序的一些缺点: 这种方法忽视了 BC4J 提供的所有功能和灵活性。有了实体对象和视图对象,在该开发策略中未使用的数据库顶端就有了两个新的抽象层,而这种方法没有利用这两层。 这种方法不支持 BC4J 的重用。BC4J 体系结构的一个关键要素就是建立与重用 BC4J 项目的能力。 没有充分利用 BC4J 缓冲的优势。这也是 BC4J 的主要优势之一,因为它可以将数据库的活动卸载到其他地方,以节省数据库服务器的 CPU 周期,完成主要目标:管理数据。这样减少了网络上的消息数目,如果所请求的数据已经提供过了,那么对数据库活动的需求也会减少。 没有利用 BC4J 对于 Web 层和业务层服务器的支持。BC4J 支持 J2EE 的概念:认为将一部分应用程序代码分离到另外一台服务器上是有好处的。如果要求数据库处理应用程序的代码,那么为了处理复杂的业务逻辑,数据库完成其主要目标的效率必然会打折扣。 应用程序严重依赖于 Oracle DBMS 中带 INSTEAD OF 触发器的视图。除非其他数据库也提供与带 INSTEAD OF 触发器的视图类似的结构,否则就无法用这种方法创建跨数据库的应用程序。 需要有才干的 PL/SQL 开发人员。如果您公司的主要开发环境是 Java,那么这种方法简直毫无意义。2. 业务逻辑层方法业务逻辑层方法一开始也假设您有一个功能完备的 Oracle 数据库。这种方法与前一种方法的主要区别在于,业务逻辑包含在位于数据库之外的 Java 类文件中。在极端情况下,这种方法第 1 章 JDeveloper 概述 13 意味着只需创建一个 BC4J 包(其中包含实体对象与关联)来支持整个企业的数据模型。对数据库中的每一张表,都创建一个实体对象。然后,我们就可以根据程序需要的结构,创建单独的项目,其中包含视图对象、视图链接和应用程序模块。接着,为每一个程序构建一个 BC4J 应用程序模块。这样就将业务规则添加到实体对象中,为了增强健壮性,也可以在数据库中重复定义业务规则。在一个大规模的企业级数据模型中,可能要将根据数据库创建的实体对象和关联划分成更小的子集,以使在设计时处理起来更容易。例如,一个有 300 张表的系统对应着 300 个实体对象,那么可以将其划分成大约 10 个应用程序模块,大概每 30 张表为一个应用程序模块。如果一组表之间有很多关系,这些表就应该放在同一个包内,然后用关联表示这些关系。跨包的关系应该用同一包内的关联表示为视图对象、视图链接及使用它们的应用程序模块。然后这个实体项目就可以共享了。如前所述,视图对象不仅仅是实体对象的默认映像,它通常会从多个实体对象中同步地搜集信息。实际上,视图对象根本不必基于实体对象,而是可以直接将数据库的数据缓存在自身中。更多相关信息请参看第 13 章。一个实体对象和关联可以被很多(520 个) 不同的包共享,这些包里还包含其他的关联、视图对象、视图链接及应用程序模块。简单的程序通常是一个程序只有一个应用程序模块,但一个程序也可以包含多个应用程序模块,两个能完成类似任务的程序使用同一个应用程序模块也很正常。采用这种方法后,验证逻辑可以存在于 BC4J 层中,也可存在于数据库中。业务逻辑层方法的优点 采用这种方法具有如下的优点: BC4J 缓存、项目重用、以及相对于数据库的独立性是该方法的用武之地。 如果正确使用这种方法,可以达到最大的开发效率。这是因为持久化层和业务逻辑层的模块化程度增强了。 您 可 以 借 用 BC4J 的 能 力 从 数 据 库 服 务 器 上 卸 载 活 动 。 这 一 优 势 也 正 是 前 一 种 方 法 的 弱项 。业务逻辑层方法的缺点 下面是这种方法的一些缺点: 从概念上来讲,这种方法比较难于实现,因为系统的业务规则可能存在于不同的地方。例如,这些规则可能存在于表、实体对象或视图对象中。必须为使用不同的代码位置开发出一套标准和准则,并强制执行。 采用这种策略的组织应该仔细地将这些规则形式化。规则适用于数据库、实体对象及视图对象。它们必需回答“对象是如何组织的?对象之间如何交互?”等问题。 如果没有 仔 细 进 行 规 划 , 那 么 BC4J 提 供 的 灵 活 性 可 能 会 导 致 系 统 中 充 满 难 以 跟 踪 的bug。 这 是 因 为 许 多 地 方 都 可 能 出 现 逻 辑 错 误 。 设 计 良 好 的 错 误 信 息 有 助 于 减 少 这 一 问题 。1.2.7 用 BC4J 创建应用程序您可以将用户界面连接到 BC4J 对象上,从而迅速建立完整的应用程序。过去,即便是完成最简单的事务,客户端和服务器之间也要进行多次通信。然而,在如今的 Web 和广域网中,这第部分 概 述 14 种在系统中存在大量传输的风格已经行不通了。BC4J 组件解决这种问题的办法是,为传统的客户端/ 服务器逻辑提供不同的实现地点,结果是使业务逻辑和数据验证代码中的数据路径变得更短。使用 BC4J 就好像在临近客户端应用程序的地方出现了一个虚拟数据库( 包括表、列、同义词和元数据 )。您可以将 BC4J 简单地想象成一个黑盒数据库。它可以和一个或更多客户端进行交互,同步数据,管理缓冲区,并实现数据模型的基本功能。研究一下 BC4J 组件的可扩展性,就会意识到它们除了充当虚拟资料档案库的角色之外,还可以提供更多的功能。BC4J 通过包含复杂业务逻辑这种元素,提供了一种可扩展的架构,使您能够远远超越传统的关系数据库结构。例如,无需采用 BEFORE INSERT 触发器就可以实现逻辑“或”的约束关系。只要增加一点儿代码,再充分利用部署选项,您就可以优化系统的整体性能。实际上,每个应用程序都需要对基本的 BC4J 组件进行一些修改。因此,理解 BC4J 组件是如何设计的及如何使用 BC4J 的接口非常重要。1.3 在 JDeveloper 中创建应用程序代码JDeveloper 是一个应用程序开发工具,可以帮助您迈出 Java 世界中的第一步。它既可以像一张白纸,所有复杂的文章都由您自己来书写;也可以给那些喜欢用 4GL 的拖放技术开发应用程序的人用做代码生成器。JDeveloper 还可以自动生成基本的数据库接口代码,允许您定制出满足需要的结果。理解 Java 和 JDeveloper,就如同同时学习英语和一个计算机字处理程序。在您投入精力做这种事情之前,应该对其他
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广告公司剪辑师临时雇佣合同
- 临时行政主管招聘合同
- 智能家居通讯操作规范
- 2024年丙丁双方债权转让合同
- 营销外包效果评估方法
- 水质净化工程包工包料施工合同
- 停车场道闸管理规定
- 游戏开发杂工短期合同
- 媒体行业薪酬体系设计
- 新一代信息技术教案 第3章 探究云计算
- 消防安全概述
- 食品储存不当的危害合理储存避免食物中毒
- 湖北省鄂东南联考2023-2024学年高一上学期期中考试物理
- 自体骨髓干细胞治疗急性心肌梗死的临床研究的开题报告
- 家长会课件:小学二年级学生家长会课件
- 运动技能学习与控制课件第十一章运动技能的练习
- 《第2课:20世纪的艺术大师-马蒂斯》教学设计(湖北省县级优课)-五年级美术教案
- 技术核定单(示范文本)
- 3.8做改革创新生力军
- 挂篮检查验收记录表
- InfoQ:2023中国企业数字化人才发展白皮书
评论
0/150
提交评论