欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入
2006 年 11 月发布
最近,我所工作的机构(威斯康星大学伊奥克莱尔分校)将一个用 cobol 编写且运行在 unisys 大型机上的老旧系统的一部分移植到了 java/j2ee 环境中。我们的 it 小组主要使用开放源代码工具(包括 eclipse、tomcat 和 spring)来编写应用程序。但是,许可方式上的更改使我们可以考虑 oracle 工具,因此我们使用 oracle jdeveloper 10g 和 oracle 应用程序开发框架 (adf) 编写了一个应用程序来测试开发模型。本文将对该应用程序进行描述,从而快速而详细地介绍如何使用 oracle adf 进行 ui 开发。(有关更进一步的技术信息,请参阅 oracle 技术网上的 oracle adf 教程和 oracle adf 开发人员指南、oracle ace steve muench 在 oracle 杂志上内容精彩的 adf 专栏以及 oracle jdeveloper 论坛中的评论。)
在本文中,我不会描述构建应用程序所需的每一个步骤,但希望这里的信息足以使您作出自己的决策。本文假设您十分了解 java,熟悉 eclipse 或 jdeveloper,并具有普通编程知识。(我没有在每个步骤后提醒您 save all,但该步骤不应省略。)
改变给定体系结构和开发模型总是很困难,因此我将首先提供一些背景知识,以说明 jdeveloper 和 adf 的价值所在,从而证明这种转变的有利性。我还会在一个单独的部分中提供一些“提示与技巧”。
背景 当前应用程序直接使用了 java (jdk 1.5)、spring(mvc、web flow、jdbc 模板)和 jsp 页面。数据也复制到了一个 oracle 数据库 10g 第 2 版数据库中。尽管我们了解如何使用 jboss hibernate 作为对象关系映射 (orm) 工具,但我们的数据访问既不复杂也不是动态的,而且 spring jdbc 模板已经充分满足了我们的需要。
由于我们在生产中使用的是 oracle 数据库 10g 第 2 版,因此在基于 windows 的试用版中使用 oracle 数据库 10g 快捷版 (xe)(oracle 数据库的免费入门级版本)顺理成章,我们希望能够在其中轻松地访问数据。在决定使用 oracle 的 toplink orm 工具后使用 oracle 数据库也很有意义,这样我们就可以轻松地将映射移植到其他数据源(如果决定使用测试用例作为生产应用程序的基础)。我们对 xe 所作的唯一更改就是在系统主页中更改系统全局区 (sga),以减少它使用的内存。
我们选择的 toplink 比预期的效果还要好,因为它抽象了许多使用 jdbc 甚至接口(如 spring 的 jdbc 模板)的繁复的详细信息。(dustin marx 在 otn 上的“在 jdbc 编程中添加一些 spring 代码”一文中提供了一个优秀示例,该示例使用 jdbc 模板,无需配置复杂的 spring 环境。)jboss hibernate 是一个出色的 orm 工具,但在端到端 adf 解决方案中集成 toplink 映射的能力也令人大开眼界并且非常高效。
根据 oracle 的建议,我们创建了一个 ejb 会话 bean 来封装对数据库的访问。这只有在应用程序和数据库之间有一个层(以便在其中根据需要使用业务逻辑)的情况下才有意义。迄今为止,我们的应用程序中没有任何需要状态的事物,而使用 session facade 设计模式时通常会需要状态。
使用 adf 的一个标准步骤是创建一组能够访问数据信息库的数据控件,我们将遵循该原则。在不需要业务逻辑的情况下(通常是查询,有时是更新和删除),通过 ui 控件直接访问信息十分高效。在较复杂的情况下,可以通过在会话 bean 方法中包含业务规则实现来应用业务规则。(adf 开发人员指南第 1.1 章很好地说明了 adf 和 jsf 如何协同工作以提供高效的开发环境。)
我们还使用标准的 jsf 导航创建了一组 jspx 文件。尽管我们熟悉 struts,但这里并不使用它。我们将使用 jspx 文件,因为这是 oracle 建议的做法。
jdeveloper 10.1.3 在整个项目中充当 ide。这可能很明显,但忘了提醒您它无法识别 jdeveloper 在构建 adf 应用程序的过程中所扮演的基本角色。jdeveloper 是一个 java 开发工具,但它还可以为您提供对 toplink、adf ui 及数据访问控件的功能、jsf 功能以及 xml 和 jsp 文件的端到端访问,还可以提供测试部署和数据库访问环境。
同时,当您在 jdeveloper 中编辑文件时,系统会自动在窗口中调整更改,您在使用 eclipse 和其他 ide 时通常看不到这些更改。这些更改提供了各种视图和编辑方法,因此学习使用 jdeveloper 的丰富功能是有一定难度的。您需要了解在哪里双击、何时使用 structure 和 data control 窗口、何时在属性编辑器中设置值,以及(偶尔)何时使用 source 窗口并编写 java 或 jsp 代码。
项目 我们的项目是一个简单的学生会银行帐户。所需的基本功能是输入和编辑支出与存款。该项目基本上是 adf 教程中描述的功能子集,因此熟悉 srdemo 的人可以识别出其中许多元素。srdemo 是一个完整的示例应用程序,您可以通过 jdeveloper 的 help 下拉菜单中的“检查更新”机制下载该应用程序。该程序包含完整的源代码,adf 开发人员指南使用它来说明如何使用 adf 进行开发。
第 0 阶段:构建应用程序的初始设置 第 1 步:使用 jsf、ejb 和 toplink 模板创建一个新的 web 应用程序。(另请参阅 oracle adf 教程 1-10。)选择模板并不重要,所有选项都可用,即使它们最初没有被选中。通过该模板,创建标准的 model 和 viewcontroller 项目,从而保留应用程序的前端和后端。您应该设置默认程序包名称,因为在创建 java 类时,该名称可在 jdeveloper 中用作默认名称。
第 2 步:设置数据库。尽管我们可以尝试使用 new gallery 的 database tier 中的 offline database objects,但我们先前已经创建了所需的 sql,以使用一组表(3 个)创建模式。我们登录到 xe web 界面,并使用脚本(您可以在 sql command 页面上的引用中找到该脚本)创建了用户和表。为这些表指定主键很重要,这样至少可以使 toplink 具有足够的信息来生成更复杂的映射: account 用于保存有关帐户的基本信息。 details 用于保存所有帐户的交易信息。 manager 是与帐户关联的个人列表。 为了填充表,我们编写了一个使用 dbunit 的 java 应用程序,并使用引用中的数据集创建了一个 campusaccounts.xml 文件。如果愿意,您可以克隆 xml 元素来扩展数据集。由于这是应用程序中的第一个 java 类,我们选择在 model 项目中创建一个 new/general/java 类,以便创建程序包。然后,将类的主体复制并粘贴到新创建的类中。如果类已经创建,我们将选择 file/import 选项将 java source 复制到 model 项目中。
public static void main(string[] argv) throws exception { class driverclass = class.forname(oracle.jdbc.oracledriver); connection jdbcconnection = drivermanager.getconnection(jdbc:oracle:thin:@localhost:1521:xe, campusaccounts, xxxxxx); idatabaseconnection connection = new databaseconnection(jdbcconnection); idataset dataset = new flatxmldataset(new file(c:\\campusaccounts.xml)); try { databaseoperation.clean_insert.execute(connection, dataset); } finally { connection.close(); } }
主要片段的主体演示了利用 dbunit 功能是多么简单。它显示了用于连接到 oracle database xe 数据库的 url,这也是标准 oracle jdbc 驱动程序的名称。
但是,您需要在项目中添加一个来自 dbunit 的 jar 文件和一个库,以编译代码。首先,您需要从 dbunit zip 文件中提取 jar 文件。从 model 项目的 properties 中,选择 libraries/add jar,然后将 dbunit jar 文件添加到项目中。通过从 model 属性中选择 libraries/add library,您可以添加 oracle jdbc 库,该库包含 oracle jdbc 驱动程序。一旦 jar 文件和库可用,就可以使用 jdeveloper 的 alt-enter 代码完成选项自动添加所需的导入。(确保导入了 java.sql.connection。)要运行该 java 应用程序,请在 applications 窗口中选择该文件和绿色箭头。一旦连接创建(下一步),就简单多了。
[1] [2] [3] [4] [5] [6] [7] [8]
