在本教程中,您要为应用程序创建业务服务。业务服务是应用程序的一部分,它负责持久化应用程序中的数据以及在中间层实现业务规则。此处有若干种不同的技术可供选用。在本教程中,您将针对中间层业务服务使用 Oracle ADF 业务组件,然后向该模型添加验证和业务规则。
所需时间
大约 50 分钟
本教程包括下列主题:
概述 | |
情景 | |
前提条件 | |
构建业务模型 | |
测试模型 | |
总结 |
将鼠标置于此图标上 可以加载和查看该组件选项板的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。
在开发 Java 应用程序时,您可以使用 ADF 业务组件映射到底层数据库表,或在将数据提交到数据库之前将其持久保存到应用程序中。ADF 业务组件包含实体对象、视图对象和应用程序模块。
您将创建一系列实体对象和视图对象,并将它们添加到一个应用程序模块。然后,实现验证和业务规则,并测试该模型以确保其可正常运行。
计划的应用程序将处理来自 CUSTOMERS 和 ORDERS 表的数据。然而,并非所有的数据都可显示在计划的应用程序中,某些页面将显示来自多个表的数据。您需要指定希望从数据库表显示的数据,还需要在模型中实现业务规则,以便所有用户界面都执行该规则。
开始本教程之前,您应该:
1. |
可以访问或已经安装了 Oracle JDeveloper (10.1.3.1.0)。可以从 Oracle 技术网下载它。 |
2. |
可以访问或已经安装了 Oracle 数据库 10g 随附的 Oracle 示例模式。 本教程使用 OE 模式。具体来说,页面使用了 EMPLOYEES 表。 可以在线获取有关在 JDeveloper 中安装 OE 模式并创建到其的连接的指导: http://www.oracle.com/technology/obe/obe1013jdev/common/OBEConnection.htm |
3. |
启动 JDeveloper。双击 JDeveloper 可执行文件 jdeveloper.exe ,该文件位于您解压缩它的根目录 ( <jdev_home> ) 中。
如果 Migrate User Settings 对话框打开,请单击 NO。 关闭 Tip of the Day 窗口。 |
4. |
现在应显示 JDeveloper IDE。
|
创建 ADF 业务组件的方法有多种。本教程将结合使用这些方法。为应用程序构建 ADF 业务组件涉及以下任务:
创建数据库连接 | ||
创建应用程序和项目 | ||
创建 ADF 业务组件 | ||
自定义业务组件 |
Java 数据库连接 (JDBC) 是 Java 应用程序用于连接关系数据库的一种标准应用程序编程接口 (API)。要创建本教程中使用的 OE 模式的 JDBC 连接,执行以下步骤:
1. |
单击 Connections Navigator 选项卡(如果没有显示 Connections Navigator),选择 View | Connection Navigator。
|
2. |
右键单击 Database 节点,从上下文菜单中选择 New Database Connection。单击 OK。
|
3. |
如果显示了 Create Database Connection 向导的 Welcome 页面,则单击 Next。 在此向导的 Type 页面上,输入连接名称 oeconn,然后单击 Next。
|
4. |
在此向导的 Authentication 页面上,输入 oe 作为 Username,输入 oe 作为 Password。选中 Deploy Password 复选框,然后按 Next。
|
5. |
在此向导的 Connection 页面上,输入 localhost 作为 Host Name,输入 XE 作为 SID。单击 Next。
|
6. |
单击 Test Connection。 如果数据库可用并且连接详细信息正确,则您将在 Status 窗口中看到 Success!。 如果发生错误,单击 Back 进行任何必要的修改,然后重新测试连接。 如果连接成功,单击 Finish。
|
7. |
该连接现在应出现在 Connection Navigator 中的 Database connection 节点下。
|
8. | 单击 Save All ,或选择 File | Save All 来保存您的工作。 |
在 JDeveloper 中,文件按应用程序和项目排列。应用程序是控制结构中最高的一级,由一个或多个项目组成。JDeveloper 项目是用于按逻辑分组相关文件的组织结构。您可以使用项目来组织源代码。
JDeveloper 通过模板只显示那些您感兴趣的特定工作方面所需的技术选项。如果您针对应用程序应用 Web Application [JSF, ADF BC] 模板,则 JDeveloper 将插入两个项目:Model 和 ViewController。
要创建本教程所需的应用程序和项目,执行下列步骤:
1. |
单击 Applications Navigator 选项卡。 在 Application Navigator 中,右键单击 Applications 节点,然后从上下文菜单中选择 New Application。
|
2. |
在 Create Application 对话框中,输入 OrderEntry 作为 Application Name。注意,当您输入应用程序名时,目录名将自动改变。 从 Application Template 下拉列表中选择 Web Application [JSF, ADF BC],然后单击 OK。
|
3. |
Applications Navigator 现在显示了 OrderEntry 应用程序和两个节点。在本教程中,您将在 Model 项目中构建业务组件。而在另一个教程中,您将使用 ViewController 项目构建用户界面。
|
现在,开始构建 ADF 业务组件。创建业务组件的方法有若干种,但在此练习中,请使用向导进行创建。
该向导将引导您按步骤创建:
要创建充当应用程序数据模型的业务组件,执行以下步骤:
1. |
在 OrderEntry 应用程序中,右键单击 Model 项目,然后从上下文菜单中选择 New。
|
2. |
在 New Gallery 中,展开 Categories 列表中的 Business Tier,并选择 ADF Business Components,然后从 Items 列表中选择 Business Components from Tables。 单击 OK。
|
3. |
在 Initialize Business Components Project 对话框中,从 Connection 下拉列表中选择 oeconn,然后单击 OK。
|
4. |
如果显示 Create Business Components from Tables 向导的 Welcome 页面,则单击 Next。 在向导的 Entity Objects 页面上,您可以指定其中将创建实体对象的程序包的名称。接受默认程序包,其名为 model。 您还可以指定实体对象所基于的数据库表。单击 Query 显示可用表的清单。
|
5. |
在 Available 列表中,通过 [Ctrl]+[单击] 选中以下两个表: CUSTOMERS 和 ORDERS。单击 Add 将其移入 Selected 列表中。
单击 Next。 |
6. |
在向导的 Updatable View Objects 页面上,您可以创建从实体对象查询数据的视图对象。 程序包对于分组工作的逻辑片段很有用处。要将视图对象放入自己单独的程序包中,请将 Package 更改为 model.queries 。 单击 Add All 将实体对象移入 Selected 列表,然后单击 Next。
|
7. |
在向导的 Read-Only View Objects 页面上,单击 Next,因为您希望只创建可更新的视图对象。
|
8. |
在向导的 Application Module 页面上,选中 Application Module 复选框。 要将应用程序模块放入自己的程序包中,请将 Package 更改为 model.services 。 为该应用程序模块指定名称 CustomerOrderBusinessService ,然后单击 Next。
|
9. |
在向导的 Diagram 页面上,您可以选择创建业务组件的直观表示。为此,选中 Business Components Diagram 复选框。 将 Package 设为 model ,将 Name 设为 CustomerAppBC_Diagram 。 取消选中 Domains 复选框,然后单击 Next。
|
10. |
在向导的 Finish 页面上,您可以查看对象列表,然后单击 Finish 进行对象创建。
|
11. |
创建完成后,业务组件图将在编辑器中打开。您可以缩放该图,或使用编辑器窗口顶部的工具更改组件的排列,可以来回滚动查看已创建的对象。
|
12. |
在 Applications Navigator 中,您还可以查看已创建的对象。展开 Model 对象和 Application Sources 节点。您应当看到三个程序包和一个业务组件图。 展开各个程序包以查看 model 程序包中创建的实体对象、 model.queries 程序包中创建的视图对象以及 model.services 程序包中创建的应用程序模块。
. |
13. | 单击 Save All ,或选择 File | Save All 来保存您的工作。 |
使用该向导创建的业务组件可能需要进行修改,具体取决于您打算在其中使用这些业务组件的应用程序。在这一部分的练习中,您将自定义默认的业务组件。
通常,实体对象的属性采用一对一的方式映射到数据库中的列,并且它们在应用程序中的一些视图对象中得到重复使用。但在某些情况下,您需要限制实体对象中的属性。在本例中,您将从实体对象中移除应用程序不再使用的属性,但首先必须将该属性从相关视图对象中移除。您还要移除视图对象中的属性,但保留实体对象中的该属性。
另一个要做的修改是删除数据模型中的一个 OrdersView 视图对象实例,该实例可访问独立于客户信息的订单信息。计划的应用程序仅访问与客户相关的订单,因此模型中不需要这个多余的 OrdersView 实例。
要对业务组件进行这些修改,执行以下步骤:
1. |
要移除实体对象中的属性,首先必须将该属性从相关视图对象中移除。 您可以通过各种方法编辑业务组件。本教程将使用 Applications Navigator 和业务组件图来编辑对象。图中的业务组件与 Applications Navigator 中的对象保持同步。 在 Applications Navigator 中,右键单击 CustomersView 视图对象,并从上下文菜单中选择 Edit CustomersView。
|
2. |
在 View Object Editor 中,选择左侧树中的 Attributes 节点 在右侧的 Selected 列表中,选择 CustGeoLocation 并单击 Remove 将其移入 Selected 列表。
单击 OK。 |
3. |
在该图中,右键单击 Customers 实体对象,然后从上下文菜单中选择 Properties。
|
4. |
在 Entity Object Editor 中,从左侧树中选择 Attributes,并从右侧 Entity Attributes 面板中选择 CustGeoLocation 属性。单击 Remove 删除该属性。
单击 OK。 注:或者,您可以直接从图中删除该属性。请确保只删除该属性而不是整个实体。
|
5. |
如前所述,视图对象就是查询,没有必要镜像实体对象中的所有属性。OrdersView 视图对象中的 Orders 实体对象无需 PromotionId 属性;但是,可将其保留在实体对象中,因为不同的应用程序可能会用到该属性。 在图中,双击 OrdersView 调用 View Object Editor,然后选择 Attributes 节点。选择 PromotionId 并单击 Remove 将该属性从 Selected 列表中移出。
单击 OK。 |
6. |
双击 CustomerOrdersBusinessService 应用程序模块以调用 Application Module Editor。注意数据模型中视图对象间的层次关系。
|
7. |
注意,在 Application Module Editor 中,CustomersView1 具有一个称为 OrdersView2 的详细视图对象。这种关联根据数据库中的外键默认创建。 该应用程序模块还包含另一个 OrdersView 实例,名为 OrdersView1。您可以使用该实例直接访问订单。然而,在计划的应用程序中,您打算只访问与客户相关的订单,因此无需该独立的 OrdersView 实例,可将其从数据模型中移除。 要从模型中将其删除,请选择 OrdersView1 并单击 Remove Instance 。
单击 OK 更新该应用程序模块,并离开 Application Module Editor。 |
8. |
在该图上,注意 OrdersView1 视图对象实例不再显示在该应用程序模块中。 要调整图中应用程序模块的大小,右键单击 CustomerOrderBusinessService 应用程序模块,然后从上下文菜单中选择 Optimize Shape Size | Height and Width。
|
9. |
单击 Save All ,或选择 File | Save All 来保存您的工作。 |
您当前使用的数据库模式通过数据库中的约束和 PL/SQL 对数据实施了一些业务规则。例如,客户的信贷限额必须小于或等于 5000。但在本教程中,您先在中间层通过业务组件以声明方式完成验证,然后再将数据提交给数据库。
要将规则添加到模型中,执行下列步骤:
添加简单的验证规则 | ||
定义格式掩码 | ||
指定默认值 | ||
修改视图对象属性 | ||
添加自定义验证 |
公司业务规则将 5000 定义为客户信贷的绝对上限。但就订单输入而言,客户信贷限额不得大于 4000。此业务规则将在订单输入应用程序中实现。
要在实体对象中实现验证,执行以下步骤:
1. |
在 Applications Navigator 中,展开 OrderEntry | Model 项目和 Application Sources | model 程序包。右键单击 Customers 实体对象,然后从上下文菜单中选择 Edit Customers。
? |
||||||||||||||
2. |
在 Entity Object Editor 的树控件中,选择 Validation。 从 Declared Validation Rules 列表中选择 CreditLimit。 单击 New,添加一组新的验证条件。
|
||||||||||||||
3. |
使用 Rules 下拉列表查看可供您使用的不同类型的规则。 在本示例中,您需要 Compare Validator,因此请从 Rules 下拉列表中选择它,并设置以下值:
单击 OK。
您已经添加了一个实体对象级的验证规则。这意味着所有访问它的视图对象和应用程序模块可以重复使用它。 如果您有时间:请尝试添加其他简单的验证规则,如:
提示:请将 List Validator 规则用于此类验证。提供的帮助给出了如何添加列表项的建议。 保持 Entity Object Editor 打开以用于下一部分的教程。 |
您需要确保数据以一致的格式显示,而不管访问它的方式如何。在本例中,信贷限额是一个货币额度,因此应使用正确的货币符号和小数分隔符显示。出生日期应以 MM/DD/YY 格式显示。
要向信贷限额和出生日期属性中加入格式掩码,执行以下步骤:
1. |
为 Customers 实体对象打开 Entity Object Editor 后,在树控件中展开 Attributes 节点。 从展开的节点中选择 CreditLimit,并选择 Control Hints 选项卡。
? |
2. |
从 Format Type 下拉列表中选择 Currency。 输入所选择的 Tooltip Text。
|
3. |
从左侧的树中选择 DateOfBirth,然后单击 Control Hints 选项卡。 从 Format Type 下拉列表中选择 Simple Date。 Format 下拉列表中的预定义格式掩码不符合您的需要,因此请在 Format 字段中输入您自己的格式掩码: MM/dd/yy 并单击 Apply 接受这些更改。
注:格式掩码区分大小写,并且必须 完全按上面所示原样输入。 |
4. |
当右侧的 Control Hints 选项卡激活时,单击左侧树中的属性并更新属性 CustFirstName 的标签文本以显示标签 Name ,并更新 CustLastName 以显示标签 Surname 。 单击 Apply 接受这些更改。
注: 此格式化方法是在实体对象级别添加的。这意味着所有访问它的视图对象和应用程序模块可以重复使用它。 保持 Entity Object Editor 打开以用于下一部分的教程。 |
某些字段应自动填充默认值。在本例中,新客户的 CreditLimit 默认设置为 100。操作员可以改写该值,但在此应用程序中应该提供默认值(类似于 Forms 中的初始值)。
要向实体对象中添加默认值 ,执行以下步骤:
1. |
从展开的 Attributes 节点中选择 CreditLimit,然后选择 Entity Attribute 选项卡。 将 Default 设置为 100,然后单击 OK 更新实体对象并关闭此编辑器。
? |
2. |
单击 Save All
保存您的工作。
|
以上更改是在实体对象级别进行的,还可以在视图对象级别进行类似更改。
在应用程序中,有一些使用同一实体对象的视图对象。在多数情况下,在实体对象级别更新属性可能很有用。如果您将视图对象考虑为查询(例如,从一些表中选择列),那么在某些实例中,您可能希望在视图对象级而不是实体对象级更改一些属性。例如,您可能希望为值列表创建视图对象,或在视图对象上具有一个 order by 子句。在本练习中,我们所要做的就是在视图对象级上稍做调整,以对此进行说明。
要修改视图对象,执行以下步骤:
1. |
在该图或 Application Navigator 中,双击 CustomersView 以调用 View Object Editorto。CustomersView 位于 model.queries 程序包的 Model | Application Sources 中。 在树控件中展开 Attributes 节点并选择 CustLastname,然后选择 Control Hints 选项卡。
|
2. |
注意,Label Text 为空。这意味着使用了默认标签,或应用了在实体对象级别设置的 Label Text。 将 Label Text 更改为 VO Last Name,以说明 VO 会重写 EO 的属性设置。而使其他设置保持不变。
|
3. |
通过在查询中设置 ORDER BY 子句更改所查询的对象的顺序。 在树控件中选择 SQL Statement。 单击 Order By 右侧的 Edit。
|
4. |
利用该对话框,您可以创建复杂的表达式。在本教程中,将添加一列。由于该对话框会以紧凑外形显示,因此需要对其重新调整大小以查看更多的细节。 单击 New 向表达式添加新值。 在 Order By 对话框中,展开 Expression Palette 中的 Customers。
|
5. |
选择 CUST_LAST_NAME 并单击 Insert column 将其移入左侧的 Expression 域。
|
6. |
单击 Validate 将列添加到 Order By 列表,然后单击 OK。
注:该视图对象只是一个 SQL 查询,因此可以使用 Optimizer Hints 对其进行调整,也可以查看 Explain Plan。查看树控件中的 Tuning 部分。 |
7. |
单击 OK 完成视图对象的编辑。 当询问您是否测试 SQL 查询语法的正确性时,请单击 Yes,然后单击 OK 确认查询有效。
|
8. | 单击 Save All 保存您的工作。 |
迄今为止,您添加的验证主要是声明式的。JDeveloper 使您可以灵活地定义比声明方式复杂很多的验证。使用 ADF 业务组件时,可以修改实体对象或视图对象的 Java 代码来完成自定义验证。
要添加针对客户的电子邮件的定制验证,执行以下步骤:
1. |
在 Application Navigator 中,右键单击 Customers 实体对象,然后从右键菜单中选择 Go to Entity Object Class。
|
2. |
CustomersImpl.java(Customers 实体对象的 Java 实现)在编辑器中打开。 将以下方法添加到该文件的结尾,并紧靠右大括号 ( }) 前:
此代码只检查电子邮件地址中是否存在 @ 符。当然,在实际情况下,您可能要编写一个更为复杂的验证。 用于验证属性的方法必须定义为
public、接受一个与属性类型相同的参数并返回一个
boolean 值。该方法名必须以关键字
|
3. |
在 Application Navigator 中,双击 Customers 以调用 Entity Object Editor。 在 Entity Object Editor 中,选择左侧树中的 Validation。 在 Declared Validation Rules 下,选择 CustEmail 并单击 New。
|
4. |
在 Add Validation Rule 对话框的 Rules 下拉列表中,选择 MethodValidator。 选择 ValidateEmail(字符串值) 方法,然后键入一个正确的错误消息,如 Invalid email address。 单击 OK。
单击 OK 以更新 Customers 实体对象。 |
5. | 单击 Save All 保存您的工作。 |
Oracle JDeveloper 包含一个业务组件浏览器,用它可以测试业务组件,而不必构建任何客户端代码。
要使用业务组件浏览器来测试为业务模型构建的功能,执行以下步骤:
1. |
在 Applications Navigator 中,展开 model.services。右键单击 CustomerOrdersBusinessService,然后从上下文菜单中选择 Test。
|
2. |
在 Oracle 业务组件浏览器的 Connect 窗口的 Connection Name 下拉列表中选择 oeconn,然后单击 Connect。
|
3. |
在 Business Component Browser 中双击运行 CustomersView1 。 确保应用了 CreditLimit 格式掩码,将鼠标悬停在 CreditLimit 字段上以确保工具提示正常工作。CreditLimit 字段应与币种格式掩码一同显示。 您还应看见其上显示了任何经过更改的属性标签(如 CustFirstName),而不是默认标签,以及针对“Last Name”显示的是 VO 标签,而不是在 EO 级定义的那个。
|
4. |
将信贷限额更新为 6000 并验证是否显示错误消息。
单击 OK 并将值重新更改为一个小于 4000 的值,继续下一步。 |
5. |
单击 Next 滚动浏览记录,以查看按“Last Name”排序返回的客户。
|
6. |
单击 Create 添加一个新记录。您应看到信贷限额的默认值。
单击 Delete 以删除插入的记录。 |
7. |
删除电子邮件地址中的 @ 符,并验证是否显示错误消息。
单击 OK 并将 @ 符重新加入电子邮件地址的原处,继续下一步。 |
8. |
现在,双击 OrdersCustomerIdFkLink1 视图链接,调用通过视图链接而连接在一起的 CustomersView1 和 Orders View2 视图对象。 单击 在单独窗口中查看结果。 单击 Specify View Criteria 并输入 CustomerId 102 ,然后单击 Find 显示下订单的客户。如果单击以返回到另一个打开的视图对象 CustomersView1,则可以看到显示了同一客户,这是因为应用程序模块自动协调所有视图。 . 完成测试时,可以选择 Business Components Browser 窗口。 |
您学习了如何使用向导根据数据库中的表创建实体对象(名称与表相同)。随后,向导还创建了表示此应用程序使用的数据(特定列)的视图对象,然后创建了视图链接以保留视图对象之间的主/从关系。此外,向导还创建了一个应用程序模块,以包含和协调要用于订单项任务的视图对象和视图链接,并创建一个业务组件图以对组件进行直观表示。
之后,您对实体对象和视图对象的属性进行了编辑,以修改业务组件的默认行为,并测试了构建的模型。
在本教程中,您学习了如何执行下列任务:
创建并修改 ADF 业务组件:实体对象、视图对象和应用程序模块 | ||
创建并编辑业务组件图 | ||
添加声明式验证和自定义验证 | ||
设置默认值 | ||
设置格式掩码 | ||
更改默认标签 | ||
设置工具提示 | ||
更改显示记录的顺序 | ||
通过业务组件浏览器测试模型 |
相关资料:
热门下载 | ||
更多融合中间件下载 | ||