技术开发 频道

服务数据对象简介

  我们已经讲了很多的概念和理论,现在要进行一些实际操作了。好消息是您马上就能使用 SDO,而且是免费的。这一节将介绍一个 SDO 示例应用程序,它将在 SDO 的 IBM 参考实现上运行,这个参考实现是 Eclipse Modeling Framework (EMF) 的一部分。我们首先将说明如何安装 EMF 2.0.1(包括 SDO),然后将介绍如何设置本文提供的示例应用程序。

  安装 EMF 2.0.1

  如果已经安装了 EMF 2.0.1,或者知道怎么安装,那么请跳过这一节,直接阅读下一节。

  IBM SDO 1.0 实现和 EMF 2.0.1 一起打包。要使用 SDO,则需要安装 EMF 2.0.1 *。您可以按照 EMF 站点上的说明使用 Eclpise 更新管理器,也可以按照下面的步骤操作。

  *EMF 2.0.0 中也包含 SDO 1.0 的实现。

  在 EMF 主页中的“快速导航”部分可以找到下载链接页面,选择下载“v2.x: EMF 和 SDO”。安装 EMF 之前一定要阅读安装要求。安装 EMF 2.0.1 之前至少要安装了 Eclipse 3.0.1 和 Java Development Kit (JDK) 1.4。一定要选择 EMF 2.0.1 发行版本。打包类型建议选择“All”:emf-sdo-xsd-SDK-2.0.1.zip,这样,就可以在一个文件中找到源代码、运行文件和文档。如果愿意,还可以下载 SDO 的最小安装包“EMF & SDO RT”:emf-sdo-runtime-2.0.1.zip。

  在解压 Eclipse 的目录中解压 zip 文件(压缩包中的文件组织结构为 eclipse/plugins/...)。启动 Eclipse,然后选择 Help>About the Eclipse Platform,检查 EMF 是否安装成功。单击 Plug-in Details按钮,确保 org.eclipse.emf.* 插件在 2.0.1 层次上。有 6 个与 SDO 有关的插件:

  org.eclipse.emf.commonj.sdo

  org.eclipse.emf.ecore.sdo

  org.eclipse.emf.ecore.sdo.doc

  org.eclipse.emf.ecore.sdo.edit

  org.eclipse.emf.ecore.sdo.editor

  org.eclipse.emf.ecore.sdo.source

  运行时只需要两个插件: org.eclipse.emf.commonj.sdo 和 org.eclipse.emf.ecore.sdo ,如果选择仅安装运行时插件,那么您只能看到这两个插件。这样就完成了 EMF 的安装。

  安装示例 SDO 应用程序

  下一步是在工作区中添加本文所用的 SDO 示例应用程序,步骤如下:

  启动 Eclipse 并创建一个新的 Plug-In Project。

  将项目命名为 SDOSample,选择源文件夹 src和输出文件夹 bin,建立 Java 源代码。

  单击 Next。

  取消选择“Generate the Java class that controls the plug-in's life cycle(生成控制插件生命期的 Java 类)”选项并单击 Finish。

  然后,单击本文顶端或底端的 Code图标(或者参阅 下载部分)下载 j-sdoSample.zip,并将其解压缩到 SDOSample 目录中(在 Eclipse 窗口中选择 Import... >Zip file)。一定要保留文件夹结构并覆盖原来的文件,这样,就可以用 j-sdoSample.zip 中的文件代替 SDOSample 项目。

  注意:SDOSample 是作为 Eclipse 插件项目打包的,因此不需要自己设置库依赖关系。但是,在本例中,只包含 Java 代码,如果在 CLASSPATH 中包含 EMF 和 SDO 库(JAR 文件),也可将 SDOSample 作为独立的应用程序运行。

  环境设置应该与下面截屏图中的类似。

  图 2. Eclipse 环境

  现在开始使用这个示例 SDO 应用程序。

  一个简单的 SDO 应用程序

  本文后面将使用的示例应用程序从功能上说很有限,但它可以帮助您更好地理解 SDO。该应用程序包括两部分,分别放在两个包中:dms 和 client。

  SDO 1.0 没有规定标准 DMS API。因此我们为这个例子设计了自己的 DMS 接口,它包含两个方法,如清单 1 所示。

  清单 1. DMS 接口

1 /**
2 * A simple Data Mediator Service (DMS) that builds
3 * SDO Data Graphs of Employees and updates
4 * a backend data source according to a Data Graph.
5 */
6 public interface EmployeeDMS
7 {
8   /**
9    * @param employeeName the name of the employee.
10    * @return an SDO Data Graph with Data Objects for
11    * that employee's manager, that employee,
12    * and that employee's "employees".
13    */
14   DataGraph get(String employeeName);
15   /**
16    * updates backend data source according to dataGraph.
17    * @param dataGraph Data Graph used to update data source.
18    */
19   void update(DataGraph dataGraph);
20 }
21

  客户机将实例化 DMS,并调用 get() 方法访问特定的雇员:Big Boss、Wayne Blanchard 和 Terence Shorter。它以用户友好的方式在控制台中打印这些雇员的信息,然后更新 Terence Shorter 及其雇员的部门信息。最后调用 DMS 的 update() 方法,传递更新的 Terence Shorter 数据图。

  注意,为了便于示范,我们没有实现数据源组件,但在 DMS 中,有一些如何根据查询构建数据图的“硬编码”知识。图 3 显示了 DMS 正在使用的雇员层次结构。

  图 3. Big Boss 公司的雇员

  图中可以看出,DMS 背后的虚拟公司有 4 个雇员,层次结构如下:

  Big Boss 没有上司,Terence Shorter 是其下属。

  Terence Shorter 以 Big Boss 作为自己的上司,John Datrane 和 Miles Colvis 是其下属。

  John Datrane 的上司是 Terence Shorter,没有下属。

  Miles Colvis 的上司是 Terence Shorter,没有下属。

  运行示例应用程序

  右击 SDOClient.java,然后选择 Run>Java application运行上述示例应用程序,结果如下:

  清单 2. 应用程序的控制台输出

1 ********* EMPLOYEE INFORMATION *********
2 Name: John Datrane
3 Number: 4
4 Title: Mr.
5 Department: Procurement
6 Is manager?: no
7 DIRECT MANAGER:
8 Name: Terence Shorter
9 Number: 2
10 Title: Mr.
11 Department: Financing
12 Is manager?: yes
13 ****************************************
14 NO INFORMATION AVAILABLE ON EMPLOYEE Wayne Blanchard
15 ********* EMPLOYEE INFORMATION *********
16 Name: Terence Shorter
17 Number: 2
18 Title: Mr.
19 Department: Financing
20 Is manager?: yes
21 DIRECT MANAGER:
22 Name: The Big Boss
23 Number: 1
24 Title: Mr.
25 Department: Board
26 Is manager?: yes
27 DIRECT EMPLOYEES:
28 Name: Miles Colvis
29 Number: 3
30 Title: Mr.
31 Department: Accounting
32 Is manager?: no
33 Name: John Datrane
34 Number: 4
35 Title: Mr.
36 Department: Procurement
37 Is manager?: no
38 [Total: 2]
39 ****************************************
40 DMS updating Terence Shorter
41 (changed department from "Financing" to "The new department")
42 DMS updating Miles Colvis
43 (changed department from "Accounting" to "The new department")
44 DMS updating John Datrane
45 (changed department from "Procurement" to "The new department")
46

  现在我们来分析应用程序的各个组成部分是如何工作的。

0