Oracle Learning Library
在本教程中,您要为应用程序创建业务服务。 业务服务是应用程序的一部分,他负责实现应用程序中数据的持久化以及在中间层中实现业务规则。 对于此专题讲座中,您将针对中间层业务服务使用 ADF 业务组件。
所需时间
大约 45 分钟
本教程包括下列主题:
| 概述 | ||
| 方案 | ||
| 前提条件 | ||
| 创建实体对象 | ||
| 创建视图对象 | ||
| 创建视图链接 | ||
| 创建应用程序模块 | ||
| 总结 | ||
将光标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注意:此外,还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。
作为 Forms 或 Designer 应用程序开发人员,您应熟悉数据块的概念。 可以将数据块看作一个映射到基础数据库表的组件或对象,它用于在将应用程序中的数据提交回数据库之前持久保存该数据。 通过使用 ADF 业务组件( 实体对象、视图对象和应用程序模块)可以将类似功能用于开发 Java 应用程序。
在本教程中,您将创建一系列实体对象和视图对象,并将它们添加到一个应用程序模块。 本教程使用了不同的方法,从而您可以熟悉 JDeveloper 中提供的各个选项。
确定了应用程序的基础数据库表且明确了用户界面的基本流后,您需确定要实现的真正的业务服务。 并需要指定要操作的数据库表数据。
以下是是本专题讲座的后面部分要创建的四个页面的草图。 这四个页面分别是 browseCustomers、editCustomer、browseCustomerOrders 和 editOrder。 从这些草图中您可以看到,规划的应用程序要操作 CUSTOMERS、ORDERS 和 ORDER_ITEMS 表中的数据。 还可以看到,这些页面的差别很小,它们并不显示所有表列,且某些页面显示多个表中的数据。
开始本教程之前,您应该:
| 1. | 满足上一个的上机操作教程中说明的前提条件。
|
| 2. | 已经完成了前面的上机操作教程。 |
创建 ADF 业务组件的方法有多种。 可以从 New Gallery 中调用向导来一次创建所有实体对象、视图对象和应用程序模块,方法类似于第一个讲座中快速构建应用程序的方法。 还可以使用此向导逐个创建它们。
本教程采用的方法是使用业务组件图。 首先创建实体对象,即负责年持久保存和缓存数据、验证以及封装业务规则的数据访问对象。 实体对象可以比作是 Forms 中块的记录管理器。 创建实体对象类似于在 Forms 中选择一个数据块所基于的表。
要在业务组件图上创建实体对象,请执行以下步骤:
| 1. | 在你当前工作的 OrderEntry 应用程序上,右键单击 Model 项目并从右键菜单中选择 New。
|
| 2. | 在 New Gallery 中,展开 Categories 列表中的 Business Tier 并选择 Business Components,然后从 Items 列表中选择 Business Components Diagram。单击 OK。
|
| 3. | 在 Create Business Components Diagram 对话框中,输入图名称 CustomerAppBC_Diagram 并保留程序包名称的缺省值。单击 OK。
|
| 4. | 此业务组件图将在编辑器中打开,其右侧显示 Component Palette 选项板。 在 Component Palette 选项板的下拉列表中选择 Business Components。 选择 Entity Object 并将它拖动到该图中。 如果提示您选择数据库连接,请从下拉列表中选择 oeconn 并单击 OK。
|
| 5. | 在实体对象上,改写名称 Customers。 请确保使用确切名称,因为该名称匹配数据库表的名称。
|
| 6. | 改写实体对象名后按下 [Enter],JDeveloper 会发现您有一个同名的表。 于是将显示一个提示,询问您是否要根据表“CUSTOMERS”的列为此实体对象创建缺省属性 -- 单击 Yes。 注意: 如果未向您发出提示,则删除该实体(单击右键并从右键菜单中选择 Erase from Disk)并重新创建实体。 或者,您可以双击该实体以调用 edit 对话框,在此对话框中将模式对象设置为 CUSTOMERS 并添加 Customers 数据库表中的属性。
|
| 7. | 使用同一方法创建 Orders 实体对象。 注意: JDeveloper 根据数据库表之间的外键关系在该图的实体对象之间自动创建关联。
|
| 8. | 还有一种方法可以在图上创建实体对象。 可以将数据库表直接拖动到图上以创建实体对象。 该应用程序需要第三个实体,您将使用这一方法添加它。 在 CustomerAppBC_Diagram 图在编辑器中仍保持打开状态的情况下,打开 Connection Navigator。 展开 Database 节点、 oeconn 连接、 OE 模式以及 Tables 节点。 按 Control 键并单击以选择多个 ORDER_ITEMS 和 PRODUCT_INFORMATION 表,然后将它们拖动到该图中。 注意: 从数据库中拖出表时,您还可能创建一个或多个其他实体对象。 你可以删除这些对象,选中他们,然后按 [Delete] 键。
|
| 9. | 在 Create from Tables 对话框中,根据项目技术,只向您提供了一个选择。 单击 OK 创建一个实体对象。 该图上现在应有四个通过它们的关联(基于数据库上的表和外部键)连接的实体对象。 |
通常,实体对象的属性采用一对一的方式映射到数据库中的列,并且它们在应用程序中的一些视图对象中得到重复使用。 但在某些情况下,您需要限制实体对象中的属性。 在本示例中,我们将从应用程序未使用的实体对象中删除属性。
| 1. | 在该图中选择 Customers 实体对象,你需要将它拖动到图中的一个空位置,以便您将有更多的空间进行操作。
|
| 2. | 拖动该实体的下边界以增加它的高度,以便可以看到所有属性。
|
| 3. | 右键单击 CustGeoLocation 属性并从右键菜单中选择 Delete。 或者,可以双击该图中的实体对象以调用它的实体对象编辑器,然后删除该编辑器中的属性。 |
现在,您已经创建了实体对象,下面将创建视图对象。 基于实体对象的视图对象表示要查看和操作的数据。 在 JDeveloper 中创建视图对象类似于在 Forms 中使用 Layout 向导选择包含在 Forms 画布中的列。
在此部分中,您将创建两个视图对象: CustomersVO 和 CustomerOrdersVO。
即使在创建实体对象后,您仍可以使用向导生成缺省组件。 可以通过多种方法调用此向导。 例如,您可以:
| 右键单击该图上的实体对象,然后从右键菜单中选择 Generate| Default Data Model Components | |
| 选择一个实体对象,调用 New Gallery ( File |New),展开 Business Tier 并在 Categories 列表中选择 Business Components,然后在 Items 列表中选择 Default Data Model Components。 |
对这一应用程序,要创建定制组件,并为其指定名称和所期望的属性。 要在该图上创建定制视图对象,请执行以下步骤:
| 1. | 在业务组件图处于打开状态的情况下,确保在 Component Palette 顶部的下拉列表中选择 Business Components。 将 View Object 拖动到该图。
| ||||||
| 2. | 在该视图对象上,输入名称 CustomersVO。
| ||||||
| 3. | 选择 Customers 实体对象,并将它拖动到 CustomersVO 视图对象的顶部。
| ||||||
| 4. | 以相同方法创建其他视图对象并将它命名为 CustomerOrdersVO。 这里将不再将实体对象拖动到视图对象,而是使用另一种方法向此视图对象中添加实体对象:
| ||||||
| 5. | 仍旧在视图对象编辑器中选择 Attributes 节点。 在 Available 列表中,按 Control 键并单击在 Orders 节点下显示的所有属性(Promotion_ID 除外),然后单击 Add 单击 OK。
| ||||||
6.
| 在该图上创建其他视图对象,并将其命名为 OrderItemsVO。
| ||||||
| 7. | 选择 OrderItems 实体对象并将它拖动到该图上的 OrderItemsVO 视图对象,然后对 ProductInformation 实体对象重复该操作。
| ||||||
| 8. | 双击该图上的 OrderItemsVO 视图对象以打开视图对象编辑器。 在左侧的树中选择 Entity Objects 节点,然后在 Selected 列表中选择 ProductInformation1 节点。 确保未选中 Updateable,并选中 Reference。 之所以这样做是因为在 Order Items 视图中,将显示 Product Information 表中的信息,但你不会更新它。 这类似于在 Forms 中使用查询后触发器对他表中的信息检索到块中的一个非基表显示项。 单击 OK。
| ||||||
| 9. | 该视图对象及其属性显示在该图中。 还将在该视图对象中显示实体对象,但由于这些实体对象可能相互堆叠,因此可能需要调整视图对象的大小并移动它们以显示所有对象。 展开 OrderItemsVO 视图对象,以显示所有属性。 您只需要 ProductInformation 实体对象中的 ProductId1、ProductName 和 ProductDescription。 按 Shift 键并单击在这些实体对象下列出的所有其他 ProductInformation 属性以选中它们,然后按 [Delete] 键从视图对象中删除它们。 |
您已经创建了该应用程序所需的视图对象,但它们是相互间没有连接的孤立的表视图。 要保持实体对象间存在的主/从关系,必须创建视图链接。 这类似于在 Forms 中创建关联,但您可以在 JDeveloper 中以可视化方式在该图上执行该操作。
要创建视图链接,请执行以下步骤:
| 1. | 首先,要使该图更易于使用,请选择全部三个视图对象,右键单击其中的某个视图对象,然后从右键菜单中选择 View As | Compact。 然后,可以重新排列视图对象,以便它们更紧凑一些。
|
| 2. | 在 Component Palette 中,选择 View Link,然后单击 CustomersVO(主)作为源,并单击 CustomerOrdersVO(从)作为目标。 该图上将显示名为 ViewLink1 的视图链接。
|
| 3. | 单击 ViewLink1 名称并改写它。 将它重新命名为 CustomersAndOrdersVL。
|
| 4. | 采用类似方法,在 CustomerOrdersVO 和 OrderItemsVO 之间创建一个视图链接。 将此视图链接命名为 OrdersAndItemsVL。 |
ADF 业务组件应用程序模块是一个服务对象,用于协调特定任务的视图对象,其方法如同窗体封装单个用户任务的方法一样。 它只包含应用程序所需的业务服务,类似为一个 Forms 模块。
要创建包含视图对象和链接的一个应用程序模块,请执行以下步骤:
| 1. | 在业务组件图处于打开状态的情况下,确保在 Component Palette 顶部的下拉列表中选择 Business Components。 将 Application Module 拖动到该图中。
| ||||||||||||
| 2. | 在此应用程序模块上,输入名称 CustomerOrdersAM。
| ||||||||||||
| 3. | 选择 CustomersVO 视图对象并将它拖动到 CustomerOrdersAM 应用程序模块上。
| ||||||||||||
| 4. | 还有一种方法可以将视图对象添加到应用程序模块。 要使用此方法将余下的视图对象和视图链接添加到 CustomerOrdersAM 应用程序模块,请执行以下步骤:
单击 OK。 此应用程序模块显示在该图上,其中包含三个视图对象和关联的视图链接。 您可能需要调整此应用程序模块的大小,并重新排列其中包含的视图对象以便能够看到所有这些视图对象。 如果视图对象并未全部显示在该图的应用程序模块中,可以右键单击该应用程序模块,并从右键菜单中选择 View As | Standard,这样便会看到应用程序模块包含的所有视图对象。 单击 Save All |
在本教程中,您了解了如何在业务组件图上创建定制的业务组件。 基于数据库中的表创建了实体对象(名称与表相同)。 随后,创建了表示此应用程序使用的数据(特定列)的视图对象,然后创建了视图链接以保留视图对象之间的主/从关系。 最后,您创建了一个应用程序模块以包含和协调用于订单输入任务的视图对象和视图链接。