级别: 中级 Vinod Lamba (vinlamba@in.ibm.com), 专职软件工程师, IBM Jorge Rasillo (jarasill@us.ibm.com), 软件工程师, IBM
2005 年 12 月 05 日 本文介绍如何使用 IBM® WebSphere® Information Integrator 来集成和更新 IBM Lotus Notes® 数据库中的数据,以及如何使用 DB2 Control Center 来设置对来自 DB2® 联邦数据库的数据源的访问。本文介绍如何获取来自 Lotus Notes 数据库的数据并将其与各种其他数据源合并,以及使用数据库联邦的方法。
简介
在当今的业务信息环境中,管理异构而且在地理上分散的数据源可能是许多企业面临的最大挑战。WebSphere Information Integrator 是一种战略性信息集成框架,它提供的平台可以满足为业务智能和业务集成而集成各种不同数据的需求。
使用 WebSphere Information Integrator,可以维护当前数据存储中的信息并访问这些变化多端的数据,就像它们存在于一个单一数据存储中一样。想像一下这有多么令人兴奋:只需通过一个应用程序界面,就能够访问来自几乎任何数据存储的数据,包括关系数据库、Domino(Lotus Notes)数据库、XML、Microsoft® Excel 电子表格和平面文件。
本文的主要目的是一步步地带领您设置和配置一个 WebSphere Information Integrator 联邦数据库系统,使用 ODBC 包装器从 Lotus Notes 数据库获取数据,并与从 XML 文档获取的数据进行合并。本文还快速地概述 DB2 可用的各种 JDBC 驱动程序,并展示如何在基于 Java® 的应用程序中访问来自 Domino/Notes 数据库和 XML 的合并数据。
前提条件
如果还没有安装以下软件,那么要先安装它们的最新版本,它们的下载地址可以在 参考资料 中找到:
产品的 Web 站点提供了详细的产品说明、出版评论、可下载的补丁和增强,以及 IBM 合作伙伴提供的产品和解决方案集合。
Lotus Domino/Notes 数据库的 ODBC 包装器
WebSphere Information Integrator 提供了一个 ODBC 包装器,可以用来访问来自 Lotus Domino/Notes 数据库的数据。这个 ODBC 包装器需要 DB2 联邦服务器,这是在安装 WebSphere Information Integrator 时创建的。另外,DB2 联邦服务器必须能够打开并读取 Domino/Notes 数据库以便获取数据。
图 1. 使用 Lotus NotesSQL 的 ODBC(Open Database Connectivity)包装器
ODBC 包装器的特性和需求
表 1. ODBC 包装器的特性和需求
| 软件需求 | Lotus NotesSQL | | 硬件需求 | Moderate | | 支持的 DML 操作(数据操纵语言) | SELECT、INSERT、UPDATE、DELETE | | 支持的透明 DDL 操作(数据定义语言) | CREATE、ALTER 和 DROP TABLE | | 支持的其他 DDL 操作(数据定义语言) | CREATE、ALTER 和 DROP VIEW | | DBCS(duble-byte character set,双字节字符集)支持 | 支持 | | Domino/Notes 附件 | 不支持 | | Domino/Notes 图片 | 不支持 | | Domino/Notes 表元素 | 支持 | |
下推(允许将谓词和聚合函数下推到数据源进行处理) | 支持 | | 使用的容易程度 | 简单 |
使用 ODBC 包装器来设置对 Lotus Domino/Notes 数据库的访问
-
创建并填充 Lotus Notes 数据库
创建一个具有三个字段(ID、FirstName 和 LastName)的临时 Lotus Notes 数据库,并填入一些值。
-
使用 Lotus NotesSQL 配置 ODBC 数据源
要将 Lotus Notes 数据源作为 ODBC 数据源进行访问,需要将它设置为使用 NotesSQL 驱动程序。
- 点击 Start -> Control Panel -> Administrative Tools -> Data Sources (ODBC)。
- 选择 System DSN 选项卡并选择 Add。向导将询问要使用哪种驱动程序,选择 Lotus NotesSQL Driver (.nsf) 并点击 Finish。
图 2. 创建 ODBC 数据源:System DSN
- 点击 Finish 之后,向导将显示一个屏幕,在这里可以将 Lotus Domino 数据库配置为 ODBC 数据源。
- 输入数据源名称和对数据源的描述。从本地计算机选择 Notes 数据库。从 Domino Server 下拉列表中选择 Local。点击 Browse 并导航到存储 Notes 数据库的路径,点击 OK。
图 3. 创建 ODBC 数据源:Lotus Notes 设置
- 现在将把 Lotus ID 与 ODBC 数据源关联起来。点击 Options。选择用来创建 Notes 数据库的 User name,输入与它关联的密码并点击 OK。
图 4. 创建 ODBC 数据源:NotesSQL 选项
-
创建 ODBC 包装器
联邦系统使用包装器这种机制与数据源进行通信并从数据源获取数据。包装器模块例程允许服务器连接到数据源并从其中获取数据。CREATE WRAPPER 语句用于为每个数据源注册包装器。
- 打开 DB2 Control Center。
- 右击 Federated Databases Objects 文件夹并选择 Create Wrapper。
图 5. 为 Lotus Domino 数据源创建 ODBC 包装器,步骤 1
- 在 Create Wrapper 向导的 Wrapper 选项卡上,指定包装器信息。
- 在 Data source 域中选择 ODBC。
图 6. 为 Lotus Domino 数据源创建 ODBC 包装器,步骤 2
- 在 wrapper name 域中输入
DOMINO_WRAPPER。
图 7. 为 Lotus Domino 数据源创建 ODBC 包装器,步骤 3
- 点击 OK 创建包装器。
-
创建服务器定义
服务器定义将关于数据源服务器的信息注册到 DB2 联邦服务器。在创建服务器定义时,要向联邦数据库提供服务器信息,比如服务器类型、版本、与它关联的包装器、数据库、节点和服务器选项。
- 右击刚创建的包装器下面的 Server 文件夹并点击 Create。
图 8. 为 Lotus Domino 数据源创建服务器定义,步骤 1
- 在 Create Server Definition 向导中,点击 Discover 并选择与您的 Lotus Notes 数据库名 对应的复选框。在我们的例子中,数据库名是 LOTUSDOMINODB。一定要取消对所有其他复选框的选择(如果有别的复选框被选中的话)。
另一种办法是,点击 Add 并在 Server Definition & Settings 选项卡中提供所需的 Lotus 数据库名。
图 9. 为 Lotus Domino 数据源创建服务器定义,步骤 2
- 点击 OK 创建服务器定义。
-
创建用户映射
用户映射将一个或多个本地用户 ID 和密码映射到一个远程数据源用户 ID 和密码。
- 右击刚创建的服务器下面的 User Mappings 文件夹并点击 Create。
图 10. 为 Lotus Domino 数据源创建用户映射,步骤 1
- 从 Available local user IDs 列表中选择用户,并将它们转移到希望映射到数据源 ID 的 selected user IDs 列表。
图 11. 为 Lotus Domino 数据源创建用户映射,步骤 2
- 在 Settings 选项卡上,为 Remote user ID 和 Remote password 域输入值,即联邦数据库的用户 ID 和密码。
图 12. 为 Lotus Domino 数据源创建用户映射,步骤 3
- 点击 Ok 创建用户映射。
-
创建昵称
昵称就像是表或视图的别名。在创建昵称时,关于远程对象的信息存储在本地 DB2 系统表中。之后,DB2 表现得就像远程对象是本地 DB2 表一样。
- 右击刚创建的服务器定义下面的 Nicknames 文件夹并点击 Create。
图 13. 为 Lotus Domino 数据源创建昵称,步骤 1
- 点击 Discover,填写联邦数据库的 Lotus Notes ID 和密码并点击 OK。
图 14. 为 Lotus Domino 数据源创建昵称,步骤 2
- 点击 Ok 创建昵称。
- 所有设置完成了。现在已经可以从 WebSphere Information Integrator 访问 Lotus Notes 数据库了。右击刚才创建的昵称并选择 Query。
图 15. 使用 ODBC 包装器访问数据:创建查询
- 点击 Execute 图标。
图 16. 使用 ODBC 包装器访问数据:执行查询

 |

|
将来自 Lotus Domino/Notes 数据库和 XML 的数据合并
本节假设已经为 XML 数据源创建了 XML 包装器,这个数据源具有以下数据:
图 17. 来自 XML 包装器的查询结果
- 点击 Commands 选项卡并输入一个从这两个数据源选择数据的查询。
图 18. 合并数据的 SQL 语句
- 点击 Results 选项卡,可以看到来自这两个数据源的合并数据。
图 19. 来自 XML 和 Lotus Notes 包装器的合并数据
在 Java 应用程序中访问合并数据
本节主要关注在 Java 应用程序中如何使用 DB2 可用的各种 JDBC 驱动程序来访问合并数据。下面是本节的大纲,如果您已经熟悉 JDBC 技术,那么可以直接跳到最后一小节 “使用 JDBC 访问合并数据”:
什么是 JDBC?
Java 数据库连接(Java database connectivity,JDBC)是一种应用程序编程接口(API),Java 应用程序可以使用这种 API 来访问本地或远程关系数据库。但是 JDBC 3.0 API 超越了这个范围,还能够与其他类型的数据源进行交互,比如数据库外的文件,因此实际上可以访问任何类型的表格化数据。JDBC API 由一组类和接口组成,它们为使用 Java 代码编写数据库应用程序的开发人员提供了一个行业标准 API。
JDBC 驱动程序体系结构和 DB2 JDBC 技术
表 2. JDBC 驱动程序体系结构和 DB2 JDBC 技术
| 类型 | 说明 | DB2 JDBC 技术 |
|---|
| 类型 1 |
JDBC-ODBC 桥接: 这种驱动程序将 JDBC API 实现为到另一种数据访问 API 的映射,比如 Open Database Connectivity(ODBC)。这种类型的驱动程序一般依赖于一个本机库,这限制了它们的可移植性。 | IBM 没有提供这种驱动程序,而且不建议采用这种方式,因为它的性能一般比其他驱动程序类型差,但是 Sun 公司提供了这种驱动程序。 | | 类型 2 |
部分 Java 部分本机 | 应用程序/通用驱动程序: 这种驱动程序用 Java 编程语言和本机代码混合编写。这些驱动程序使用要连接的数据源的专用本机客户机库。由于有本机代码,它们的可移植性受到了限制。 |
DB2 UDB 提供了两种属于这一类的驱动程序:
- Legacy/CLI(Call Level Interface) JDBC Driver(应用程序驱动程序)
- db2java.zip
- COM.ibm.db2.jdbc.app.DB2Driver
- Universal JDBC Driver(通用驱动程序)
- db2jcc.jar
- com.ibm.db2.jcc.DB2Driver
支持的 JDBC 功能包括:
- 连接池
- 分布式事务
- Java 用户定义函数和存储过程
- JDBC 1.2 规范中描述的大多数方法,以及 JDBC 2.0 规范中描述的一些方法
如果要连接远程 DB2 服务器,应该安装 DB2 Application Development Client 或 DB2 Runtime Client(参见 参考资料)。注意,在以后的版本中 IBM 将不再改进 Legacy/CLI 类型 2 驱动程序。
| | 类型 3 |
纯 Java DBMS 独立协议 | Applet/网络驱动程序: 这种驱动程序使用纯 Java 客户机并使用独立于数据库的协议与服务器进行通信,然后这种协议会转换为一种 DBMS 特定的协议。然后服务器将客户机的请求转发给数据源。 |
IBM 仍然支持这种方式,但是以后不会改进了。应该使用类型 4 驱动程序来替代这种驱动程序,这样性能更好。
- db2java.zip
- COM.ibm.db2.jdbc.net.DB2Driver
在 DB2 CLI(Call Level Interface)之上构建。如果要连接远程 DB2 服务器,并不需要在客户计算机上安装 DB2 UDB 客户机。
| | 类型 4 |
纯 Java DBMS 依赖协议 | 通用 JDBC 驱动程序: 这种驱动程序是纯 Java 的并实现针对特定数据源的网络协议。客户机直接连接到数据源。 |
DB2 Universal JDBC 驱动程序是一个单一的驱动程序,但是同时包含 JDBC 类型 2(部分 Java 部分本机 | 应用程序/通用驱动程序)和 JDBC 类型 4(纯 Java DBMS 依赖协议 | 通用 JDBC 驱动程序)行为,以及 SQLJ 支持。它独立于驱动程序类型连接或目标平台。它是独立于体系结构的 JDBC 驱动程序,可以进行远程/分布式和本地 DB2 UDB 访问。
- db2jcc.jar
- com.ibm.db2.jcc.DB2Driver
支持的 JDBC 功能包括:
- 连接池
- 分布式事务管理
- 全局事务
- Java 用户定义函数和存储过程
- JDBC 1.2 和 JDBC 2.0 规范中描述的大多数方法,以及 JDBC 3.0 规范中描述的一些方法。
|
使用 JDBC 访问合并数据
让我们回到本文原本的目标上。本小节使用代码片段来演示如何连接到联邦数据库,以及如何使用各种 JDBC 驱动程序来访问前面从 IBM Lotus Domino/Notes 和 XML 数据源获得的合并数据。
要想针对不同的 JDBC 驱动程序使用代码片段来访问合并数据,需要遵循
表 3 中的步骤和考虑原则。在运行任何例子之前,一定要将 db2java.zip、db2jcc.jar、db2jcc_license_cisuz.jar、db2jcc_license_cu.jar 和 common.jar 添加到 CLASSPATH 环境变量中。
清单 1. 对于所有 JDBC 驱动程序类型通用的类
//----------------------------------------------
// Common class for all types of JDBC drivers
//----------------------------------------------
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCExample {
public static void main( String[] args ) {
// Check number of args
if (args.length < 4) {
System.out.println("USAGE: java JDBCExample " +
"<url> <user> <password> " +
"<driver>");
System.exit(-1);
}
String url = args[0];
String user = args[1];
String password = args[2];
String driver = args[3];
try {
// Make database connection
Class.forName(driver).newInstance();
Connection con =
DriverManager.getConnection(url, user, password);
System.out.println(
"\n::Successfully Connected::" + "\n\t" +
"URL:\t\t" + url + "\n\t" +
"JDBC Driver:\t" + driver
);
// Create a statement & execute
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(
"SELECT * FROM SYSTEM.PERSONALINFO, SYSTEM.ORDER_NN"
+ " WHERE SYSTEM.PERSONALINFO.ID = SYSTEM.ORDER_NN.ID"
);
System.out.println("\n::Query Output::");
while ( rs.next() ) {
String id = rs.getString("ID");
String firstName = rs.getString("FIRSTNAME");
String lastName = rs.getString("LASTNAME");
String phoneNumber = rs.getString("PHONE");
String address = rs.getString("ADDRESS");
System.out.println("\t" + id + "|" + firstName + "|"
+ lastName + "|" + phoneNumber + "|" + address);
}
stmt.close();
con.close();
}
catch (Exception e) {
System.out.println("ERROR:\n" + e.toString() );
e.printStackTrace();
}
}
}
|

 |

|
结束语
设计 WebSphere Information Integrator 的目的是简化对异构的且在地理上分散的数据源的管理。本文描述了如何对 WebSphere Information Integrator 进行配置,以便使用 ODBC 包装器访问 Lotus Domino/Notes 数据源,还描述了如何使用 WebSphere Information Integrator 的功能来合并 Lotus Domino/Notes 数据和 XML 数据源。最后(但不表示它不重要),描述了如何在 Java 应用程序中使用各种 JDBC 驱动程序来访问合并数据。
参考资料 学习
获得产品和技术
讨论
作者简介  | 
|  | Vinod Lamba 是 IBM System and Technology Group 的专职软件工程师。他的专长包括设计和开发对象数据库管理系统和 J2EE 中间件。他是经过认证的 Java 开发人员和 IBM Certified WebSphere Application Server Administrator。他目前在从事一个 IBM Rational ClearQuest 和 ClearCase 部署项目。 |
 | 
|  | Jorge Rasillo 是 IBM System and Technology Group 的软件工程师。他最近从 El Paso 的德克萨斯大学毕业,获得计算机科学硕士学位。他感兴趣的领域是软件工程,主要关注开发过程。他是 Society of Hispanic Professional Engineers 的成员。 |
对本文的评价
|