系列文章:Oracle ADF 开发必读 — 第 10 部分


使用 Oracle Metadata Services 构建可定制应用程序 (III)

用实例介绍针对个性化和定制的 Oracle ADF 服务(续)— 在本部分中,将安装和配置一个信息库以持久存储定制结果。

作者:John Stegeman

2010 年 5 月发布

下载:

如今,应用程序用户希望他们经常使用的应用程序能够记住他们喜欢的工作方式,从而无需每次登录时都重新设置应用程序。例如,用户希望他们常用的搜索和屏幕布局日复一日地保持不变,以便他们更加轻松直观地使用应用程序。利用 Oracle Metadata Services (MDS) 提供的基础,Oracle Application Development Framework (ADF) 应用程序可以提供这样的持久个性化。本文介绍如何构建可在设计时定制的 Oracle ADF 应用程序,以及如何安装和配置 MDS 信息库以持久保存设计时和运行时定制结果。

通过本系列前面一些文章的学习,您已了解了如何允许最终用户在运行时对您的 Oracle ADF Faces 应用程序进行定制以及如何开发种子定制。至此,您已使用与 Oracle JDeveloper 11g 集成开发环境 (IDE) 集成在一起的 Oracle WebLogic Server(该服务器使用一个基于文件的模拟的 MDS 信息库)运行并测试了您的应用程序。这种配置对于测试来说是很好的,但是如何在生产环境中实现呢?本文将介绍如何创建和配置一个基于数据库的 MDS 信息库,如何将该 MDS 信息库注册到 Oracle WebLogic Server,以及如何部署和管理您的可定制 Oracle ADF 11g 应用程序。

撰写本文时使用的是 Oracle JDeveloper 11g 11.1.1.2 版。如果您使用所提供的示例应用程序,您将需要更改 Application Navigator 中 Application Resources 面板中定义的 HR 连接的连接信息。另请注意,要运行示例应用程序,您应遵循本文所述任何所需配置步骤。

部署原理

要部署一个可定制应用程序,无论该应用程序是支持最终用户定制、种子定制还是同时支持这两种定制,您都需要创建一个信息库来保存 MDS 信息并将该信息库注册到将要部署该应用程序的 Oracle WebLogic Server 中。当您准备好部署该应用程序时,Oracle JDeveloper 11g 会将该应用程序的元数据信息打包到一个特殊的称为元数据存档(即 MAR)的文件中,然后将这个 MAR 文件放入该应用程序的企业存档 (EAR) 文件中以便部署到服务器中。您还可以创建一个独立的 MAR 文件,然后对一个已部署的应用程序部署该文件;在一些情况下,例如,当您想更新应用程序的种子定制元数据但不想重新部署整个应用程序时,您可能就想这么做。

创建基于数据库的元数据服务信息库

MDS 信息库可以基于文件也可以基于数据库,但对于部署,我(和 Oracle)出于性能方面的考虑建议使用基于数据库的信息库。要创建基于数据库的信息库,可使用一个名为 Repository Creation Utility (RCU) 的实用程序,您可从 Oracle 技术网上的 Oracle Fusion Middleware 11g 下载页面获得该实用程序。可以使用 RCU 为 Oracle Fusion Middleware 11g 创建各种类型的信息库,但这里我们使用它只是为了创建 MDS 信息库。如果您已使用 RCU 创建了一个信息库(例如,如果您已安装了 Oracle SOA Suite 11g,则可能已创建了一个信息库),就不必再次运行 RCU 了,除非您想单独创建一个 MDS 信息库。首先,下载 RCU 并将其解压缩到您硬盘上的一个位置。完成后,您可找到一个名为“rcuHome”的目录。为了创建基于数据库的 MDS 信息库,显然您需要一个数据库;下面我将演示如何使用 RCU 在一个 Oracle 数据库(您也可以使用 Microsoft SQL Server)中创建 MDS 信息库。要创建 MDS 信息库,执行以下步骤:

  1. 运行 RCU,具体来说是运行解压缩得到的 rcuHome 目录的 BIN 子目录中的 rcu.bat (Microsoft Windows) 或 rcu (Linux)。
  2. 确认 welcome 页面,单击 Next

    stegeman-mds3-f1

    图 1 RCU — welcome 页面

  3. 确保选择 Create 选项,然后单击 Next

    stegeman-mds3-f2

    图 2 选择 Create

  4. 提供将要包含 MDS 信息库的 Oracle 数据库的相应信息,然后单击 Next

    stegeman-mds3-f3

    图 3 RCU — 数据库连接详细信息

  5. 该 RCU 将连接到您的数据库并确定该数据库满足信息库的要求;如果有任何要求得不到满足,请纠正问题后从第一步重新开始。在我的示例中,我第一次运行 RCU 时,我的数据库不具备建议的字符集;我以相应字符集创建一个新的数据库来容纳我的信息库,然后重新开始:

    stegeman-mds3-f4

    图 4 RCU — 成功的必备条件检查

  6. 为该部署提供一个前缀(我保留使用默认的 DEV)。展开 AS Common Schemas 节点,选择 Metadata Services。最后,单击 Next

    stegeman-mds3-f5

    图 5 RCU — 选择 MDS 信息库

  7. 必备条件检查完成后,单击 OK。在下面的页面中,提供并确认 MDS 模式的口令,然后单击 Next

    stegeman-mds3-f6

    图 6 RCU — 提供 MDS 模式口令

  8. 接受建议的默认表空间和临时表空间,或者用如下方法来修改它们:更改列表中的所选表空间或者单击 Manage Tablespaces 按钮以更改详细信息。在我的示例中,我将默认的临时表空间更改为 TEMP。完成后,单击 Next

    stegeman-mds3-f7

    图 7 RCU — 映射表空间

  9. 出现提示时,单击 OK 确认表空间的创建。再次出现提示时,单击 OK 关闭表空间创建对话框。最后,查看 summary 页面,然后单击 Create 创建该信息库:

    stegeman-mds3-f8

    图 8 RCU — Summary 页面

  10. 查看 Completion Summary 页面(如果需要,可查看日志)。单击 Close 关闭该 RCU:

    stegeman-mds3-f9

    图 9 RCU — Completion Summary

将您的信息库注册到 Oracle WebLogic 域中

为使 MDS 信息库可为您的 Oracle ADF 应用程序所使用,您需要将该信息库注册到部署该应用程序的 Oracle WebLogic Server 域中。注册 MDS 信息库有两种方法。第一种方法是使用 Oracle Enterprise Manager 11g Fusion Middleware Control 通过一个图形用户界面来注册它。如果您喜欢,或者如果您在自己的 Oracle WebLogic Server 域中未安装 Oracle Enterprise Manager 11g Fusion Middleware Control,则可以使用 WebLogic Scripting Tool (WLST) 命令行实用程序进行注册。本文将演示这两种方法,首先使用 Oracle Enterprise Manager (OEM) 11g Fusion Middleware Control:

  1. 确保您当前使用的域已使用 OEM 11g Fusion Middleware Control 进行了扩展。为了进行该扩展,您可以使用 Configuration Wizard 并确保在支持的产品列表中选中 Oracle Enterprise Manager(注意,配置 OEM 还将自动配置 Oracle Java Required Files [JRF],此为部署 Oracle ADF 11g 应用程序所必需的):

    stegeman-mds3-f10

    图 10 Configuration Wizard

  2. 使用一个 Web 浏览器导航到 OEM 控制台;其 URL 为 http://<您的服务器>:<您的端口>/em,默认端口为 7001。使用正确的用户名和口令登录到 Fusion Middleware Control(使用您创建该域时指定作为管理员的帐户就可以)。
  3. 展开左侧的 Weblogic Domain 文件夹,找到您要将信息库注册到的域。右键单击该域,从上下文菜单中选择 Metadata Repositories
  4. stegeman-mds3-f11
  5. 图 11 转到 Metadata Repositories 页面

  6. 单击 Database-Based Repositories 部分中的 Register 按钮开始注册过程。
  7. 填写 Database Connection Information 部分的内容,然后单击 Query 按钮。对于用户名和口令,您可以使用上一节中创建的 MDS 信息库的所有者,也可以使用一个拥有 SYSDBA 权限的用户。从列表中选择 Metadata Repository,为所选信息库提供一个描述性名称和模式口令,然后单击 OK

    stegeman-mds3-f12

    图 12 注册信息库

  8. Database-Based Metadata Repositories 列表中现在应显示新注册的信息库:

    stegeman-mds3-f13

    图 13 注册成功

如果您不想使用 OEM 注册 MDS 信息库,或者您未在 Oracle WebLogic Server 域中配置 OEM,则可使用 WLST 注册信息库。基本 Oracle WebLogic Server 安装所附带的 WLST 未配置进行 MDS 信息库管理所需的命令。Oracle 文档并未完全明确指出哪些 Oracle 产品安装具有合适的 WLST 配置。幸运的是,Oracle JDeveloper 11g<jdeveloper 主目录>/oracle_common/common/bin 目录中包括一个正确配置的 WLST。要使用 WLST 注册 MDS 信息库,执行以下步骤:

  1. 在一个安装了 Oracle JDeveloper 11g 的计算机上,打开一个命令提示符/shell 窗口,转到 <jdeveloper 主目录>/oracle_common/common/bin 目录下。
  2. 运行“wlst”(Microsoft Windows) 或“wlst.sh”(基于 UNIX/Linux 的平台)以启动 WLST。
  3. 执行 connect() 命令并提供所请求的信息以连接到 Oracle WebLogic Server:

    stegeman-mds3-f14

    图 14 使用 WLST 连接到 Oracle WebLogic Server

  4. 执行 registerMetadataDBRepository() 命令,依次传入以下七个所需参数:

    • 该 MDS 信息库注册的描述性名称
    • 数据库供应商(ORACLE 或 MSSQL)
    • 该 MDS 信息库所在的数据库服务器的主机名称
    • 该数据库使用的端口
    • 该数据库的服务名称
    • 拥有该 MDS 信息库的数据库用户名
    • 该数据库用户的口令

    stegeman-mds3-f15

    图 15 使用 WLST 注册 MDS 信息库

部署示例应用程序

如果您一直在跟踪学习本系列的文章,则可使用您已构建的示例应用程序,也可从这里下载该应用程序的一个副本。(参见“第 5 步”文件。)部署一个使用 MDS 的可定制 Oracle ADF 应用程序的过程与部署一个“标准的”Oracle ADF 应用程序的过程类似,但有一个主要不同之处:部署可定制的应用程序时,您必须提供有关使用哪个 MDS 信息库和信息库分区的额外信息。MDS 信息库分区是一个用于在信息库中保存元数据的逻辑分组的容器。许多元数据管理命令(如导入/导出元数据)针对 MDS 信息库分区进行操作。

Oracle WebLogic Server 控制台不公开 MDS 配置信息,因此不能用来部署可定制应用程序。您可以使用以下三种方法部署您的可定制应用程序:

  • 使用 Oracle Enterprise Manager 11g Fusion Middleware Control
  • 直接通过 Oracle JDeveloper 11g 进行部署
  • 使用 WLST 将 MDS 信息库配置记录到您应用程序的 EAR 文件中,然后使用 WLST 部署得到的 EAR 文件。

可能还有第四种方法,这就是用 MDS 信息库信息手动更新您应用程序的 adf-config.xml 配置文件。尽管我已成功测试了这一方法,但并不建议采用这一方法,因为我没能发现任何官方文档提供了合适的配置。您实际选择哪种方法取决于您对哪个过程感到最为满意。本文将简要说明所有这三种方法。由于本文特别关注的是 MDS,我将主要关注部署过程中涉及 MDS 的部分,并假定您已知道如何:

  • 在 Oracle WebLogic Server 上创建 JDBC 数据源、配置您的 Oracle ADF 应用程序模块以使用这些数据源
  • 在 Oracle JDeveloper 11g 中配置部署选项,以根据需要使您的应用程序包括/不包括 weblogic-jdbc.xml 文件(通过选中或取消选中 Auto Generate and Synchronize weblogic-jdbc.xml Descriptors During Deployment 来指定)
  • 将安全应用程序部署到 Oracle WebLogic Server(对于我的测试,我使用了 Djps.app.credential.overwrite.allowed=true 选项以允许我在 Oracle JDeveloper 11g 中配置的用户覆盖服务器上的安全配置)
  • 正确配置 Oracle WebLogic Server 以便您能够部署 Oracle ADF 应用程序
  • 使用您选择的方法执行基本部署任务;本文主要关注部署可定制应用程序时的不同之处

使用 Oracle JDeveloper 11g 进行部署

根据应用程序的 EAR 文件中存在 MAR 的指示,Oracle JDeveloper 11g 应用程序部署向导将自动提示您提供所需的 MDS 信息。要使用 Oracle JDeveloper 11g 将示例应用程序部署到一个正确配置的 Oracle WebLogic Server,执行以下步骤:

  1. IDE Connections 中创建一个到目标 Oracle WebLogic Server 的连接并进行测试(我的连接名为 local_wls):

    stegeman-mds3-f16

    图 16 到 Oracle WebLogic Server 的本地 IDE 连接

  2. 使用应用程序菜单的 Deploy 选项启动应用程序部署向导:

    stegeman-mds3-f17

    图 17 启动 Oracle JDeveloper 11g 部署向导

  3. 在该向导中选择 Deploy to Application Server,单击 Next

    stegeman-mds3-f18

    图 18 Deploy to Application Server 选项

  4. 选择希望的应用程序服务器和选项,单击 Finish

    stegeman-mds3-f19

    图 19 选择应用程序服务器和选项

  5. 该部署向导片刻之后将提示您提供 MDS 信息库信息。从列表中选择相应的信息库(从已在服务器上注册的信息库中选择)并提供一个分区名称(或选择一个现有分区)。对于本例,我使用 testing_partition 作为我的分区名称:

    stegeman-mds3-f20

    图 20 MDS 信息库配置

现在,您可继续测试您的应用程序了。

使用 Oracle Enterprise Manager 11g Fusion Middleware Control 进行部署

和 Oracle JDeveloper 11g 部署向导一样,OEM 11g Fusion Middleware Control 部署向导在您部署可定制应用程序时也将提示您提供 MDS 信息库信息。要使用 OEM 11g Fusion Middleware Control 部署应用程序,执行以下步骤:

  1. 使用 Oracle JDeveloper 11g 的部署向导为您的应用程序创建一个 EAR 文件(参照上一节的第 2 步和第 3 步,但在第 3 步中选择 Deploy to EAR):

    stegeman-mds3-f21

    图 21 部署到 EAR 文件

  2. 以您喜欢的方式(我喜欢的方式是:右键单击 WebLogic Domain,从 Application Deployment 上下文菜单中选择 Deploy)启动应用程序的部署:

    stegeman-mds3-f22

    图 22 通过 OEM 11g Fusion Middleware Control 启动部署

  3. 使用相应选项找到该 EAR 文件,然后单击 Next

    stegeman-mds3-f23

    图 23 选择 EAR 文件

  4. 选择相应目标,然后单击 Next。
  5. 查看并提供 Application Name 和 Context Root 的信息。在 Target Metadata Repository 部分中,单击 Edit 图标选择一个 MDS 元数据信息库并提供一个分区名称。最后,单击 Next

    stegeman-mds3-f24

    图 24 配置应用程序属性

  6. 查看(如果需要,还可以更改)部署设置,然后单击 Deploy。如果您打算使用此方法定期部署该应用程序,可能希望保存该部署方案以减少您下次要做的工作量:

    stegeman-mds3-f25

    图 25 部署设置

现在,您可继续测试您的应用程序了。

使用 WebLogic Scripting Tool 进行部署

使用 WLST 命令行工具部署可定制 Oracle ADF 应用程序的过程分为两步。首先,您必须使用 WLST 将 MDS 信息库配置信息添加到应用程序的 EAR 文件;然后,您可以使用 WLST 将该应用程序部署到 Oracle WebLogic Server。如本系列早前所述,任何 Oracle WebLogic Server 11g 安装都会提供 WLST,然而,并非每个 WLST 安装都支持针对 MDS 的命令。Oracle 产品文档提到过这点,但没有明确列出哪些产品安装提供的 WLST 可用于配置 MDS;对于本文,我将说明如何使用我确信有效的 WLST(即 Oracle JDeveloper 11g 安装随带提供的 WLST)进行该配置。要使用 WLST 部署示例应用程序,执行以下步骤:

  1. 为您的应用程序部署创建一个 EAR 文件(参见上一节中的第 1 步)。
  2. 在一个安装了 Oracle JDeveloper 11g 的计算机上,打开一个命令提示符/shell 窗口,转到 <jdeveloper 主目录>/oracle_common/common/bin 目录下。
  3. 运行“wlst”(Microsoft Windows) 或“wlst.sh”(基于 UNIX/Linux 的平台)以启动 WLST。
  4. 使用 getMDSArchiveConfig 命令将您所生成的 EAR 文件的 MDS 配置赋值给一个变量(在本示例中名为“archive”)。getMDSArchiveConfig 只有一个参数 fromLocation,它指向该 EAR 文件。在 Windows 和 UNIX/Linux 平台上,使用一个正斜杠(“/”)作为 fromLocation 变量中的路径分隔符:

    stegeman-mds3-f26

    图 26 getMDSArchiveConfig() wlst 命令

  5. 使用 setAppMetadataRepository 命令设置 MDS 信息(MDS 信息库名称、MDS 信息库分区名称、信息库类型以及该连接的 Java 命名和目录接口 (JNDI) 位置,如这里的示例所示:

    stegeman-mds3-f27

    图 27 setAppMetadataRepository() wlst 命令

  6. 使用 save 命令保存 MDS 信息:

    stegeman-mds3-f28

    图 28 save() wlst 命令

  7. 使用 connect 命令连接到要部署该应用程序的 Oracle WebLogic Server:

    stegeman-mds3-f29

    图 29 连接到 Oracle WebLogic Server

  8. 使用 deploy 命令部署该应用程序。至少需要 appNamepath 变量。如果愿意,您可以指定一个进度变量以便使用 printStatus() 跟踪部署进度:

    stegeman-mds3-f30

    图 30 部署应用程序并查看部署状态

测试已部署的应用程序

在使用其中一种技术部署该应用程序之后,现在您可对该应用程序进行测试了,使用合适的 URL 确保用户 john 和 josephine 均能够在运行时定制该应用程序并且种子定制显示正确。(分别参考第 8 和第 9 部分。)

管理 MDS 元数据信息库数据

一旦可定制应用程序开始在生产环境中运行,您可以使用 OEM 11g Fusion Middleware Control 或 WLST 管理 MDS 元数据信息库中存储的信息。这两个工具均能够:

  • 向信息库导入元数据、从信息库导出元数据。 这可用于如下操作:从一个环境向另一个环境(如从生产环境向测试环境)复制定制信息、从一个服务器迁移到另一个服务器、保存应用程序元数据的一个外部备份。
  • 使用标签来标记元数据的一个版本,将已标记的版本恢复为当前版本。 这可用于保存和恢复不同版本的元数据。您还可以从信息库中清除旧版本的元数据而不会影响当前版本。
  • 部署新的元数据存档。 这可用于为应用程序部署新的或更新的种子定制而不用重新部署整个应用程序。
  • 其他管理操作。

本文不会逐一演示上述操作,而是演示如何创建、列出和提升标签,可以使用这些方法来存和恢复应用程序元数据的特定时间点版本。您可以相同方式执行其他操作;有关 WLST 命令语法,可查看 WLST 命令参考(参见“资源”一节),或者 OEM 11g Fusion Middleware Control 应用程序以浏览这些命令。

首先我们使用 OEM 11g Fusion Middleware Control(简称为 OEM)列出示例应用程序的所有现有标签。由于尚未显式地创建任何标签,您可能会认为现在还没有标签;然而,各种部署工具可在每次部署之后自动创建标签。要使用 OEM 列出标签,执行以下步骤:

  1. 在 OEM 控制台中,右键单击 WebLogic Domain,从上下文菜单中选择 System MBean Browser

    stegeman-mds3-f31

    图 31 启动 MBean Browser

  2. 展开 oracle.mds.lcm 文件夹(位于 Application Defined MBeans 部分)。然后,继续展开 Server:<您的服务器名称>、Application:<您的应用程序名称,我使用了 MDS>MDSAppRuntime 文件夹,然后单击 MDSAppRuntime 管理 bean (MBean):

    stegeman-mds3-f32

    图 32 选择 MDSAppRuntime MBean

  3. 在右侧窗格中,单击 Operations 选项卡,查看 MDSAppRuntime MBean 的可用操作。单击 listMetadataLabels 操作,显示该操作的参数(listMetadataLabels 没有参数):

    stegeman-mds3-f33

    图 33 listMetadataLabels 操作

  4. 单击 Invoke 执行该操作。OEM 随即显示(在 Return Value 部分中)该应用程序元数据的标签列表。在我的示例中,由于我曾三次部署了该应用程序(为了演示所有三种方法),这里有三个标签。完成之后,单击 Return 返回到操作列表:

    stegeman-mds3-f34

    图 34 应用程序元数据标签列表

您可以使用 OEM 以相同的方式调用其他操作。现在,我们使用 OEM 创建应用程序元数据的一个名为 test 的版本。为此,可单击 createMetadataLabel 操作,指定名称 test 作为标签,然后单击 Invoke

stegeman-mds3-f35

图 35 创建 test 标签

如果愿意,您可以再次调用 listMetadataLabels 操作来确认创建了这个标签。

现在我们假定该应用程序已在生产环境中运行了数周的时间,我们的最终用户 john 和 josephine 已在运行时对该应用程序进行了个性化设置;然而,出于某种原因,他们都想将其个性化设置恢复到其在最后一次部署之后最初的状态。为此,可以提升相应的标签。下面我将演示提升早前的一个标签 postDeployLabel_MDS_2594457265 的过程。因为您已了解了如何使用 OEM 来管理 MDS,所以现在我们使用 WLST 来进行提升。要使用 WLST 提升标签,执行以下步骤:

  1. 在一个安装了 Oracle JDeveloper 11g 的计算机上,打开一个命令提示符/shell 窗口,转到 <jdeveloper 主目录>/oracle_common/common/bin 目录下。
  2. 运行“wlst”(Windows) 或“wlst.sh”(基于 UNIX/Linux 的平台)以启动 WLST。
  3. 使用本文前面所述 connect() 命令连接到 Oracle WebLogic Server。
  4. 使用 promoteMetadataLabel() wlst 命令,将应用程序名称、服务器名称、要提升的标签名称传递给该命令。

    stegeman-mds3-f36

    图 36 使用 WLST 提升标签

  5. 如果您现在测试该应用程序,您会注意到所有定制已恢复为它们在这个原始标签下的状态。有关 WLST 的其他可用命令的信息,可以查看 WLST 命令参考(参见“资源”一节)。

总结

现在,您应能够创建、部署和管理用户可定制的 Oracle ADF 11g 应用程序(允许用户按自己的喜好来对其进行定制的应用程序)和设计时可定制应用程序(可以在设计时针对不同用户群体而定制的应用程序)了。

返回目录

 

资源


John Stegeman (stegemanoracle.wordpress.com) 是一位 Oracle ACE 总监(Oracle 融合中间件),也是 Xchanging 这个全球性业务流程外包和 IT 服务公司的一位架构师。他从 1990 年开始就使用 Oracle 产品工作,从版本 3 开始就使用 Oracle JDeveloper 了。