用实例介绍针对个性化和定制的 Oracle ADF 服务
作者:John Stegeman
2010 年 5 月发布
下载:
如今,应用程序用户希望他们经常使用的应用程序能够记住他们喜欢的工作方式,从而无需每次登录时都重新设置应用程序。例如,用户希望他们常用的搜索和屏幕布局日复一日地保持不变,以便他们更加轻松直观地使用应用程序。利用 Oracle Metadata Services 提供的基础,Oracle Application Development Framework (ADF) 应用程序可以提供这样的持久个性化。本文介绍如何配置您的 Oracle ADF 应用程序以允许最终用户进行定制。
桌面应用程序用户习惯于能够设置并保存他们的个人应用程序首选项。例如,Oracle JDeveloper 11 g 用户可以重排应用程序窗口并设置其他首选项,并且认为当他们退出 Oracle JDeveloper 11 g 并在第二天返回时,他们的首选布局和其他选项不会发生变化,和退出之前一样。通过以这种方式保存个人首选项,用户能够以所需的工作方式来定制应用程序,从而提高工作效率。如今,许多应用程序是通过 Web 浏览器提供的,将有越来越多的用户希望能够对基于 Web 的应用程序进行同样的定制。在新的应用程序中建立这样的可定制性可能需要花费大量开发时间;开发人员需要构建一个框架将个性化设置保存到一个数据存储中并在运行时对特定用户应用这些个性化设置。对于复杂的企业应用程序(如 Oracle E-Business Suite),为构建这样的框架而付出努力很可能是值得的;但对于较小的应用程序,这种努力常常是不值得的。
幸运的是,对于使用 Oracle ADF 的开发人员来说,Oracle 已为个性化和定制创建了服务并且已在 Oracle ADF 中集成了这些服务,这些服务称为 Oracle Metadata Services (MDS)。Oracle E-Business Suite 版本 11i 和 12 使用了 Oracle MDS 的前身以允许用户对自己的自助服务应用程序进行个性化设置,并允许应用程序管理员针对特定用户群定制应用程序的各个方面。在 Oracle JDeveloper 11 g 中,开发人员可以利用这些功能为 Oracle ADF Web 应用程序提供同样的功能。
本文撰写时使用的是 Oracle JDeveloper 11 g (11.1.1.2)。如果您使用所提供的示例应用程序,您将需要更改 Application Navigator 中 Application Resources 面板中定义的 HR 连接的连接信息。另请注意,要运行示例应用程序,您应遵循本文所述任何所需配置步骤。
Oracle MDS 将定制和个性化信息存储在一个信息库中。该信息库可以存储在数据库中,也可以存储在基于文件的存储中;由于可伸缩性和可靠性以及其他方面的原因,我强烈建议使用数据库存储 MDS 信息库(本系列的下一篇文章将介绍如何配置该信息库)。对于开发/测试/调试周期,与 Oracle JDeveloper 11 g 集成的 Oracle WebLogic Server 提供了一个本地 MDS 信息库,这样您就不需要为进行开发而单独建立一个信息库了。
这个 MDS 信息库可以存储各种类型的定制数据及其他元数据,包括:
本文将介绍如何配置 Oracle ADF 应用程序以允许最终用户在运行时进行定制,以及如何在开发环境下运行和测试可定制应用程序。本系列中的下一篇文章将介绍如何创建设计时定制,以及如何配置基于数据库的 MDS 信息库。
为了让一个 Oracle ADF Faces 应用程序允许最终用户在运行时定制应用程序,您须执行以下几个步骤:
图 1 如果未指定自定义类,日志中会出现警告
另外,您的应用程序还必须符合以下要求:
实际上,您首次创建 Oracle ADF 应用程序时,执行所有要求的步骤是最容易的,因为 Oracle JDeveloper 11 g 会替您配置一些设置项(如自动以 XML 格式创建您的 Oracle ADF Faces 页面)。
为了演示如何配置和测试最终用户定制,我将使用一个简单的应用程序。为了开发和运行该示例应用程序,您需要访问一个安装了 HR 示例模式的 Oracle 数据库。(您可以从这里下载 Oracle Database 快捷版 (XE),这是 Oracle Database 的一个免费版本。)首先,您将创建该应用程序并创建一些默认的 Oracle ADF 业务组件。然后,在您创建任何 Oracle ADF Faces 页面之前,您将配置该应用程序使其支持定制。最后,您将创建和测试一些可定制的页面。您可以执行下面总结的步骤来创建该应用程序,也可以下载示例应用程序。如果您愿意亲自创建该应用程序,请执行下面的步骤(我相信您已具备 Oracle JDeveloper 11 g 的一些基本经验,因此这里提供的是简要的步骤):
图 2 创建一个新的 Fusion Web Application
为该应用程序指定一个名称并接受所有默认设置,完成该应用程序的创建。
如果您愿意,可以通过右键单击该应用程序模块并选择 Run 来测试您创建的 Oracle ADF 业务组件。您应该能够双击 EmployeesView1 视图对象实例并滚动浏览数据库中的员工。
如本文前面所述,理想情况下,您应在开始创建任何 Oracle ADF Faces 页面之前配置应用程序以使其支持最终用户定制。要配置该应用程序,执行以下步骤:
图 3 在 ViewController 项目中启用用户定制
图 4 找到 adf-config.xml 文件
oracle.adf.share.config.UserCC
作为该自定义类的名称(这是 Oracle ADF 提供的默认自定义类;这里不使用该 UserCC 自定义类的功能,但为了让个性化生效,必须指定一个自定义类),然后单击 OK: 图 5 指定自定义类
图 6 将 panelBox 添加到可定制组件列表中。
当您将 column 和 panelBox 这两个组件添加到可定制标签列表之后,该编辑器应如下所示:
图 7 adf-config.xml 编辑器显示 column 和 panelBox 为可定制标签
如果您愿意,还可添加其他组件并指定这些组件的哪些特定属性将持久保存。有关默认情况下可持久保存的 Oracle ADF Faces 组件及其属性,可参阅此文档。
图 8 手动更改后的 adf-config.xml 文件的 adf-mds-config 节
对于示例应用程序的视图层,您可以随意创建任何 Oracle ADF Faces 页面。在我的示例中,我选择创建两个页面:一个页面上包含一个 af:query 组件,这样我可以对用户查询保存功能进行测试。另一个页面上包含一个 af:table 组件和一些 af:panelBox,这样我可以对重新排列表列顺序的功能和显示/不显示面板框的功能进行测试)。要记住的关键事情是(如前所述),要确保您的 JavaServer Faces (JSF) 页面以 XML 格式 (.jspx) 保存并且您希望允许用户进行定制的组件已设置了 ID 属性。如果您已执行了至此为止的上述配置步骤,这两件事情会自动完成。下面我们来执行创建查询页面的步骤:
图 9 创建一个新的 JSF 页面
图 10 指定 JSF 页面名称
图 11 创建 ADF 查询面板
您可以仿照这一过程创建另一个包含 af:table 和 af:panelBox 组件(以及任何其他您想测试的组件)的示例页面。我创建了一个页面并将一个面板组布局从组件模板拖放到这个页面上;然后,我在该面板组布局中添加了一些面板框并将一些输出文本组件放入到这些面板框中。最后,我从数据控件模板中将 EmployeesView1 视图对象实例作为一个 ADF 表拖放到我的页面上。我的页面最终如下所示:
图 12 第二个 Oracle ADF Faces 示例页面
最后,在您可以对最终用户定制结果的持久性进行测试之前,需要对您的应用程序启用安全性以便 MDS 能够识别进行定制的用户;至少,您的应用程序需要进行身份验证配置。 OTN 的 ADF 代码角区域有一些涉及 ADF 安全性设置的教程(参见“ADF 代码角互联网电视”)。然而,为了进行演示,我们将对示例应用程序进行非常简单的安全设置。幸运的是,Oracle JDeveloper 11 g 提供的安全向导使我们可以相当容易地进行这个简单设置。要在示例应用程序中进行安全配置,执行以下步骤:
图 13 启动 ADF Security 向导
图 14 只选择 ADF Authentication
图 15 安全基础架构已创建
图 16 打开 jazn-data.xml 编辑器
图 17 创建用户
现在,您可以使用 Oracle JDeveloper 11 g 中集成的 Oracle WebLogic Server 对最终用户定制结果的持久性以及保存的查询的持久性进行测试了。您不必建立和注册一个 MDS 信息库,因为集成的 Oracle WebLogic Server 使用一个本地 MDS 信息库进行测试。您可以配置这个模拟的信息库,使其在每次重新运行应用程序时保留或删除最终用户的定制信息(默认情况下将保留最终用户的定制信息)。为了配置此项设置,可以从 Application Navigator 的菜单中选择 Application Properties:
图 18 配置应用程序的属性
MDS 信息库的配置信息位于 Run 节点下面的 MDS 区域:
图 19 MDS 信息库的配置信息
我们首先来测试 SampleControls 页面(内含面板框和表)。根据至此我们已进行的配置,我们认为用户对面板框的 disclosed/undisclosed 状态或表中各列的顺序所进行的任何更改应能保存下来,即使在用户退出后再次返回到该应用程序时也是如此。为了对此进行测试,我们现在运行该示例页面:右键单击该页面并选择 Run。应用程序启动后,会提示您输入登录信息登录该程序。首先我们以 john 用户身份登录。由于您以前未以 john 用户身份运行过该程序,该页面显示默认的设置(所有面板框都显示出来,表中各列以默认顺序排列):
图 20 默认设置下的 SampleControls 页面
对该页面进行一些更改,如关闭第二个面板框、缩小 EmployeeId 列的宽度、将 LastName 列拖到表中第一列的位置:
图 21 进行一些用户定制之后的 SampleControls 页面
如果您自己的定制结果满意,则可通过关闭浏览器退出该应用程序(确保关闭您的浏览器的任何打开的实例,这样不会缓存凭证)。在 Oracle JDeveloper 11 g 的 Log 窗口中,单击 Target URL 再次运行该程序:
图 22 在 Log 窗口中找到 Target URL
这一次,以 josephine 用户身份登录该应用程序。您会看到在出现的页面中显示所有面板框,并且各列均为默认的大小、处于默认的位置,这是因为用户 John 所作的更改只是针对其个人的,只会对其个人生效。您可以重复此过程(关闭浏览器,再次运行该程序),以 John 用户身份登录,验证该用户以前所作更改保留了下来。
您可以按相同的过程对用户保存的查询的持久性进行测试,这次是运行 QueryTest.jspx 页面(右键单击该页面并选择 Run)。我们来创建和保存这样一个查询,该查询查找所有姓“Smith”的员工。为此,可在查询面板的 LastName 区域中键入 Smith
,然后单击 Search 按钮来验证这个搜索:
图 23 创建 Smith 搜索
接下来,我们保存该搜索:单击 Save 按钮并为该查询提供一个名称。
图 24 保存 Smith 搜索
现在可以验证该搜索已保存下来了:关闭浏览器窗口,以 john 或 josephine 用户身份再次登录程序,确认已对那个当事人保存了该搜索。当事人应可在 Saved Search 列表中看到保存的搜索:
图 25 查看保存的搜索
您已了解如何对 Oracle ADF Faces 应用程序启用和配置最终用户定制持久性、如何在集成的 Oracle WebLogic Server 中对这样的应用程序进行测试。本系列的下一篇文章将实施种子定制以针对不同的用户群设计不同的应用程序体验。
John Stegeman ( stegemanoracle.wordpress.com) 是一位 Oracle ACE 总监(Oracle 融合中间件),也是 Xchanging 这个全球性业务流程外包和 IT 服务公司的一位架构师。他从 1990 年开始就使用 Oracle 产品工作,从版本 3 开始就使用 Oracle JDeveloper 了。