在 System i server上使用LEI 集成非Domino/Notes数据

本文介绍了如何在 System i server 上安装和部署 LEI,介绍了 LEI 在 System i server 上和在其它平台上的不同,还详细介绍了 LEI 中客户使用最广泛的几个活动(Activity),并给出了一个完整的利用 LEI 将本地 DB2/400 和外部的 MS SQLServer 的数据集成到 Domino/Notes 系统中的实例。最后给出了一些常见的问题及解决办法。要求读者有一定的 Lotus Domino/Notes 知识。

LEI 简介

LEI(Lotus Enterprise Integrator)是 Lotus Domino 的扩展产品,从 Lotus Domino 6.5 开始,每出一个 Lotus Domino 版本,都会出一个对应的 LEI 版本,最新的 Lotus Domino 版本是 8.0,对应的 LEI 版本也是 8.0。本文将以 LEI 7.0.2 为例。在本文发表的时候,LEI 7.0.3 也已经发布了。不过本文描述的 LEI 的功能及使用方法同样也适合新版本的 LEI。

LEI 的主要功能

LEI 是一个功能强大的数据访问、同步、传输的工具,可以在业界流行的各种数据库产品中任意的传输特定的数据,或者将外部数据源的数据同步到 Lotus Notes 中供其操作,而操作的结果直接反应到外部数据源中。


LEI 和 Lotus Domino/Notes 的关系

LEI 产品对 Lotus Domino/Notes 产品是一个很重要的补充。我们知道,现在基于 Lotus Domino/Notes 的应用很多,Lotus Domino/Notes 也是业界应用最为广泛的电子协作平台,但是在很多时候,客户的生产环境中不只有 Lotus Domino/Notes 系统,还有很多基于其它数据库的应用系统,这时候如何将不同系统的数据集成起来就成了一个困扰客户的问题,Lotus Domino/Notes 本身提供了很多访问外部数据的方式,但是通常这些方式都需要根据具体的外部数据的情况编写相应的程序来完成,而利用 LEI 则可以不用编写任何代码将各种不同的外部数据直接集成到 Lotus Domino/Notes 应用中来,就像这些外部数据就是 Lotus Domino/Notes 本地的数据一样,并且可以用 Lotus Script. 等语言直接操作这些外部数据。这样 Domino 应用就通过 LEI 得到了访问、操作其它非 Domino 数据的能力,从而大大扩展了 Domino 应用的范围。

但是 LEI 并不是只能在外部数据和 Notes 数据之间进行传输,它可以直接在任意两种不同的数据源之间传输数据,比如将 Oracle 的数据传输到 MS SQL Server 中,因此,即使生产环境中没有 Domino 应用,也可以使用 LEI 来进行数据的传输和集成。


LEI 的架构

LEI 主要包括两部分,一是 LEI 服务器,另一个是 LEI 管理器,LEI 管理器是一个 Notes 数据库(decsadm.nsf),可以用它来建立连接文档(Connection Document)和活动文档(Activity Document),也可以用它来控制 LEI 服务器的启动和退出;而 LEI 服务器则通过轮询 LEI 管理器,启动相应的活动来完成定义好的任务。

LEI for i5/OS 的特殊性

LEI 现在支持以下平台:

AIX,Linux,Solaris,Windows,i5/OS

其中 LEI for i5/OS 和其它 4 种平台有一些显著的不同,下面分几个方面来介绍:

  1. LEI 在 i5/OS 上只能以 Domino 的一个 add-in 任务的方式运行,不像其它平台的 LEI 可以独立的运行,因此 LEI 在 i5/OS 上没有单独的控制台,只能通过 LEI 管理器 (decsadm.nsf) 或者 Domino 控制台来控制 LEI 的运行。
  2. 直接支持的数据源只有 DB2, Notes, SAP R/3, File System, Text, ODBC,而其它平台直接支持的数据源还有 Oracle,OLE DB,Sybase,其中 SAP 的连接器需要单独购买。这意味着要访问 Oracle 等不直接支持的数据源,只能通过 ODBC 的方式。LEI 使用的 ODBC driver 是 DataDirect 公司的 DataDirect ODBC drivers。注意 DataDirect ODBC drivers 是随 Domino 一起安装的,这意味着 DECS 和 LEI 使用的是同样的 DataDirect ODBC drivers。当前最新的 Domino 7.0.2 版本使用的 DataDirect ODBC drivers 版本是 5.0,而在 Domino 6.5.6,7.0.3 和 8.0 中使用的是 5.2 的版本,以后还将支持 64 位的 DataDirect ODBC drivers。实际上 DataDirect 公司并没有专门开发在 i5/OS 上的 ODBC driver,而 LEI 使用的 DataDirect ODBC drivers 实际上是 for AIX 的,在 i5/OS 上可以运行在 PASE(Portable Application Solutions Environment)环境下。关于 PASE 的更多信息,可以访问 System i 信息中心。
  3. 由于在 i5/OS 上,Domino 可以同时安装多个版本,因此每个版本都有一个对应的 DataDirect ODBC driver,这样在升级一个 Domino 服务器后,在原来的 ODBC.ini 中配置的数据源不会自动拷贝到升级后的 Domino 版本对应的 ODBC.ini 中,用户必须自己手动修改新的 ODBC.ini。
  4. LEI 产品中包括了一个测试数据源的工具 : DCTEST,在 i5/OS 上,它只支持 DB2 和 Notes。

LEI for i5/OS 的安装与配置

LEI for i5/OS 的安装和配置这里就不详细说明了,可以按照 LEI Installation Guide 中的步骤安装。需要注意的是如果 i5/OS 的版本是 V5R3 的话,需要先安装 PTF 组 SF99269。iSeries Tools For Developers(5799PTL) 也是必需的软件,它包含 VNC 服务器,VNC 服务器是 i5/OS 上的一种图形化界面服务器,LEI 的安装包需要运行在 VNC 服务器上。

LEI 中的连接和活动

连接 (Connection)

在 LEI 管理器 (decsadm.nsf) 中可以创建连接文档来定义 LEI 支持的外部数据源。打开 decsadm.nsf,点击 Add Connection 按钮,在列表中可以选择数据源的类型。注意在数据源列表中虽然有 Oracle 和 Sybase 等可选的数据源,但是 LEI for i5/OS 不直接支持这些数据源,要创建到这些数据源的连接文档,只能通过 ODBC,因此如果要连接 Oracle 数据源,应该在数据源列表中选择 ODBC。

具体如何配置请参看后面的示例。

活动 (Activity)

在 LEI 管理器 (decsadm.nsf) 中可以创建活动文档来定义如何传输或者同步两种数据源的数据。分为下面两大类:

  1. 批处理活动 (Batch activity)

    这里只介绍客户使用最广泛的直接传输活动 (Direct Transfer) 和复制活动 (Replication)

    • 直接传输活动 (Direct Transfer):将源数据源的数据拷贝到目的数据源。

      源数据源的数据可以用一个表达式来限定,外部数据源通常用一个 SQL 语句,Notes 数据源用一个选择公式 (Selection Formula)。

    • 复制活动 (Replication):同步源数据源和目的数据源的数据。

      有下面两种方式来实现:

      1. 通过主键复制 (Primary Key Replication),根据以下原则复制:
        1. 如果源数据源和目的数据源的一条记录的主键 ( 必需在源和目的表中唯一 ) 匹配,其它字段的值相同,则不执行任何操作。
        2. 如果源数据源和目的数据源的一条记录的主键 ( 必需在源和目的表中唯一 ) 匹配,其它字段的值不同,则目的数据源的那条记录将以源数据源的值被更新。
        3. 如果源数据源的一条记录根据主键在目的数据源中没有找到匹配的记录,这条记录将被插入到目的数据源中。
        4. 如果目的数据源的一条记录根据主键在源数据源中没有找到匹配的记录,这条记录将在目的数据源中被删除。
      2. 通过时间戳复制 (Timestamp Replication),上面介绍的方式只能将源数据源的数据复制到目的数据源,即只能单向复制,用时间戳的方式复制则可以双向复制。要启用时间戳复制,需要在活动文档中勾上 Enable Timestamp Replication ,并且在两个数据源中至少都要有一个时间戳字段 (timestamp field),复制活动文档本身会以上次复制的时间来维护两个内部的时间戳域,分别是 SrcTimeStamp 和 DestTimeStamp 。它根据以下原则复制:
        1. 如果源记录中的时间戳字段的时间值晚于 SrcTimeStamp 域中的时间值,并且对应的目的记录不存在,则这条记录将被插入到目的数据源中。
        2. 如果目的记录中的时间戳字段的时间值晚于 DestTimeStamp 域中的时间值,并且对应的源记录不存在,则这条记录将被插入到源数据源中。
        3. 如果源记录中的时间戳字段的时间值晚于 SrcTimeStamp 域中的时间值,并且存在对应的目的记录,则目的记录将被更新。
        4. 如果目的记录中的时间戳字段的时间值晚于 DestTimeStamp 域中的时间值,并且存在对应的源记录,则源记录将被更新。
        5. 源数据源和目的数据源的记录都不会被删除。
        6. 如果源记录和对应的目的记录的时间戳字段的时间值分别晚于 SrcTimeStamp 域和 DestTimeStamp 域中的时间值,则目的记录将被更新。

        注意在 DB2 中,时间戳字段必须是 TIMPSTAMP 类型,不能是 DATE 类型。

  2. 高级实时活动 (Advanced RealTime activity)

    高级实时活动包括 Virtual Fields,Virtual Documents 和 Virtual Agents 三种,下面分别介绍。

    • Virtual Fields 活动

      Virtual Fields 活动其实就是 DECS 中的活动,只是 LEI 中的 Virtual Fields 活动功能更强大。它通过关键字文档 (key documents) 来将对应的外部数据源的一条记录直接虚拟化为 Notes 中的一个文档,但是 Notes 文档只有 key fields 是真正保存在 Notes 数据库中的,其它映射为外部数据源的列的域中的值没有真正保存在 Notes 数据库中,它们存在于外部数据源中,这样,外部数据源就直接集成到了 Notes 数据库中了,可以象操作 Notes 数据库一样操作这些外部数据了。并且,当在 Notes 数据库中打开、新建、更新和删除一个文档时,会相应的显示、插入、更新和删除对应的外部数据源的记录。

    • Virtual Documents 活动

      Virtual Documents 活动和 Virtual Fields 活动类似,都是将外部数据直接虚拟化到 Notes 数据库中,但是它们还是有些显著的区别:

      1. Virtual Documents 活动不需要关键字文档 (key documents),而是用外部数据源中的一个表来保存 Notes 文档的唯一标志符。这样,在 Notes 数据库中显示和操作的数据全部都存在于外部数据源。这样也避免了同步问题,因为在 Virtual Fields 活动中存在关键字文档,这些关键字文档必须和外部数据源保持同步,否则会造成两边的记录不匹配。而 Virtual Documents 活动则不存在这种同步问题。
      2. Virtual Documents 活动支持视图操作。
      3. Virtual Documents 活动中相关的 Notes 表单中的所有域都要映射到外部数据源的一个列,如果某个域没有映射,保存文档的时候,这个域不会被保存在 Notes 数据库中,而 Virtual Fields 活动中,这个域会保存在 Notes 数据库中。
    • Virtual Agents 活动

      Virtual Agents 活动将外部数据库的存储过程虚拟化为 Notes 数据库中的一个代理,实现在 Notes 数据库中运行外部数据库中的存储过程的功能。如果这个存储过程需要参数,则需要先选择 Notes 数据库中的文档 ( 这些文档可以是 Virtual Documents 或者 Virtual Fields 活动生成的虚拟文档 ),然后运行这个虚拟代理,这样将以这些文档中的”域名 = 域值”的形式传给存储过程。

示例

下面我们通过一个完整的示例来展示如何利用 LEI 来集成外部数据。

查看或者建立 DB2 UDB for i5/OS 数据源

  1. 确保已经安装了 IBM iSeries Access for Windows
  2. 打开 IBM iSeries Access for Windows 软件中的“启动或配置会话”,连接到 LEI 运行的 System i 服务器。
  3. 用 WRKRDBDIRE 命令列出当前配置好的 DB2 UDB for i5/OS 数据源。
  4. 如果列表中已经有了 Remote Location 为 *LOCAL 的条目,则记下对应的 ENTRY 的名字,这个名字将在连接文档中输入。
  5. 如果没有,则用下面的命令建立一个:
    ADDRDBDIRE RDB(BEER) RMTLOCNAME(*LOCAL *IP)
    

    其中 BEER 是 RDB 的名字,*LOCAL 表示是当前 System i 服务器,也可以用域名或者 IP 地址来定义远程的 RDB,*IP 是表示使用 IP 协议。



    图 1. DB2 数据源
    图 1. DB2 数据源

在 DB2/400 上建立表

  1. 打开 IBM iSeries Access for Windows 软件中的 iSeries Navigator
  2. 连接到 LEI 运行的 System i 服务器,并按照下图建立一个简单的名为 test 的表,它只包含两个字段:USERIDUSERNAME

    图 2. 创建 DB2 表
    图 2. 创建 DB2 表



    图 3. 定义列属性
    图 3. 定义列属性

  3. 输入一些测试数据如下图:

    图 4. 输入测试数据
    图 4. 输入测试数据

建立外部数据源

这里假设外部数据源是 MS SQLServer 2000,请按照上面在 DB2/400 中建立的 test 表在 SQLServer 中建立同样的名为 test 的表。

在 ODBC.ini 中加入该外部数据源的定义

  1. 打开 IBM iSeries Access for Windows 软件中的“启动或配置会话”,连接到 LEI 运行的 System i 服务器。
  2. WRKLNK '/QIBM/USERDATA/LOTUS/DOMINO702/EITODBC/ODBC.INI',如果 Domino 的版本不是 7.0.2,请将上面的目录相应改动。
  3. 用选项 2 编辑 ODBC.ini
  4. 将下面这段加入 ODBC.ini,请根据实际情况修改 Address 和 Database 的值。其中 Address 是 SQLServer 所在的服务器的 IP 和 SQLServer 监听的端口,Database 是 SQLServer 中建立的数据库名。
    [ODBCToSQLServer2000]
    Driver=/QIBM/PRODDATA/LOTUS/DOMINO702/EITODBC/lib/LOmsss20.so
    Description=IBM Lotus OEM 5.0 SQL Server Wire Protocol
    Address=9.22.35.183,1433
    AnsiNPW=Yes
    Database=Chenbin
    LogonID=UID
    Password=PWD
    QuotedId=No
    			

创建 Notes 数据库

在 LEI 运行的 Domino 服务器上建立一个 Notes 数据库,名为 leitest.nsf,可以在附件中找到这个数据库。

创建连接到 DB2/400 的连接文档

  1. 在 Notes 客户端中打开 Domino 服务器上的 LEI 管理器 decsadm.nsf。
  2. 点击 Add Connection > DB2
  3. 按照下图输入 Name,Database,User Name,Password,设置 Data Journaling 为 Off,其中 Name 为连接的名字,可以任意命名,Database 就是前面用 ADDRDBDIRE 命令定义的 RDB 名字,User Name 和 Password 是登录 System i 服务器的用户名和密码,设置 Data Journaling 为 Off 是因为我们建立的 test 表没有设置 Journaling,这里必须匹配。

    图 5. 创建 DB2 连接文档
    图 5. 创建 DB2 连接文档

  4. 保存退出。

创建连接到外部数据源的连接文档

  1. 点击 Add Connection > ODBC
  2. 按照下图输入 Name,Data Source,UserName 和 Password。其中 Data Source 就是我们上面在 ODBC.ini 中添加的外部 ODBC 数据源的名称:ODBCToSQLServer2000,用户名和密码是登录外部 ODBC 数据源的用户名和密码,不是登录 System i 服务器的用户名和密码。

    图 6. 创建 ODBC 连接文档
    图 6. 创建 ODBC 连接文档

创建连接到 Notes 的连接文档

  1. 点击 Add Connection > Notes
  2. 按照下图输入 Name,Domino Server 和 Notes Database,其中 Name 为连接的名字,可以任意命名,Domino Server 可以用”域名 : 端口”或者”IP: 端口”的形式,Notes Database 则输入或者选择 leitest.nsf。

    图 7. 创建 Notes 连接文档
    图 7. 创建 Notes 连接文档

  3. 保存退出。

创建一个直接传输 (Direct Transfer) 活动文档

  1. 点击 Add Activity > Direct Transfer
  2. 按照下图输入或者选择相应的域值,其中 Source Connection 选择”Connection to DB2”,这是前面创建的连接到 DB2/400 的连接文档,表为”CHENBIN.TEST”,这是前面通过 iSeries Navigator 创建的表,Target Connection 为”Connection to Notes”,这是前面创建的连接到 Notes 的连接文档,表单为 test。由于 DB2/400 中的表 CHENBIN.TEST 和 leitest.nsf 中的表单 test 有对应的字段和域 ( 名字相同 ),所以 Mapping 选项直接选择 Automatic 和 by Name 即可,否则应该在 Mapping 对话框中手动对应。最后在 Select Statement 中输入”select * from chenbin.test”,表示要提取所有的 test 表中的数据。

    图 8. 创建直接传输活动文档
    图 8. 创建直接传输活动文档

  3. 保存退出。

创建一个复制 (Replication) 活动文档

  1. 点击 Add Activity > Replication
  2. 按照下图输入或者选择相应的域值,其中 Source Connection 选择”Connection to Notes”,表单为 test,Target Connection 为”Connection to ODBC”,表为” dbo.test”,这是 MS SQLServer 中已经建好的表。Mapping 选项还是选择 Automatic 和 by Name,Key(s) 输入 UserID。

    图 9. 创建复制活动文档
    图 9. 创建复制活动文档

  3. 保存退出。

创建一个 Virtual Fields 活动文档

  1. 点击 Add Activity > Virtual Fields(Realtime Notes)
  2. 按照下图输入或者选择相应的域值,其中 Domino Application 中的 Database 为 leitest,Form. 为 vfa,Lotus Connection 为”Connection to DB2”,表为” CHENBIN.TEST”, Events 选择所有的 4 种事件。

    图 10. 创建 Virtual Fields 活动文档
    图 10. 创建 Virtual Fields 活动文档



    图 11. 字段映射
    图 11. 字段映射

  3. 点击“Initialize Keys”按钮来生成关键字文档。这些文档可以在 leitest.nsf 中的 vfa 视图中看到。
  4. 保存退出。

创建一个 Virtual Documents 活动文档

  1. 点击 Add Activity > Virtual Documents
  2. 按照下图输入或者选择相应的域值,其中 Domino Application 中的 Database 为 leitest,Form. 为 vda,Lotus Connection 为”Connection to ODBC”,表为” dbo.test”,Key Table Option 选择 Use External Key Table,Key Table Name 可以随便取名,只要不和已经存在的表重名就可以了,这里我们输入”dbo.keytable”,Key Field(s) 选择 userid。

    图 12. 创建 Virtual Documents 活动文档
    图 12. 创建 Virtual Documents 活动文档

  3. 点击 Create External Key Table,这将会在配置的外部数据源中建立名为”keytable”的表。
  4. 保存退出。

运行

现在可以运行我们的活动了,在视图 Activities\By Type 下选中”Direct Transfer Activity”,然后点击 Start Activity,该活动将会运行,将我们在 DB2 的表 chenbin.test 中输入的数据全部传输到了 leitest.nsf 中了,可以通过打开 leitest.nsf,在视图 test 中查看


图 13. 运行结果
图 13. 运行结果

然后我们可以运行”Replication Activity”来将 leitest.nsf 中刚刚从 DB2 表中传来的数据复制到”Replication Activity”所定义的目的数据源中,即 ODBC – MS SQLServer 中的 test 表中去。运行结束后,可以在 SQLServer 中查看结果。

接下来可以同时启动”Virtual Fields Activity”和”Virtual Documents Activity”,然后可以分别在 leitest.nsf 中的 vfa 和 vda 两个视图中查看结果。

在 vfa 视图中我们会发现只能看到 UserID 这一列有值,UserName 是空的,这时打开视图中的一个文档,就会发现 UserName 域中出现了相应的值,这是因为打开文档这个事件被 LEI 捕捉到了,从而 LEI 将该文档 UserID 的值在外部数据源所对应的 UserName 值取得并显示在 Notes 文档中。

在 vda 视图中则 UserID 和 UserName 都正确的显示,打开文档,也可以看到正确的值,就像这些文档是存在于 Notes 数据库中一样。

我们可以任意的操作这些虚拟文档,包括在 leitest.nsf 中创建、更新、删除文档,操作结果将实时的反应到关系型数据库中。

常见问题及解决办法

  1. 通过 call qdominoxxx/dctest 来运行 dctest(contest 也一样 ) 的时候报错:
    Unable to locate Notes/Domino executable directory...
    LIBNOTES.SRVPGM could not be found in PATH

    这是因为没有将 LEI 对应的 Domino 库加入库列表造成的,可以先运行 setdomenv ,然后再运行 call qdominoxxx/dctest。

  2. 在浏览远程 Domino 服务器上的 Notes 数据库的时候报错,则可能是没有赋予相关 ID 的相应权限,可以在 Domino 服务器文档的安全页的”运行不受限的方法和操作”和”运行受限制的 LotusScript/Java 代理”列表中加入” Enterprise Connector Products/Lotus Notes Companion Products”和 Domino 服务器的 ID,然后重新启动 Domino 服务器。
  3. 在浏览 LEI 运行的 Domino 服务器上的 Notes 数据库的时候报错,说找不到数据库,则可能是因为 Domino 服务器没有到自身的连接文档的原因,可以在 Domino 控制台里输入“trace :”,然后重新启动 Domino 服务器。
  4. 在安装 LEI 出现 System i 的登录框的时候,如果输入了正确的 IP,用户名和密码,但是没能登录,而是再次出现登录框,第二次登录后仍然不能登录,而是直接退出,然后安装失败,查看 c:\log.txt,有” cannot get OS400 service”的错误,则可能是因为 System i 的 *FILE 服务器没有启动的原因,可以用 STRHOSTSVR *FILE 来启动它。也可能是因为上次的安装进程在 i5/OS 上还没有结束造成的,这种情况需要手工杀掉 i5/OS 上的相关进程 (JOB),可以用 WRKUSRJOB USER(QUSER) STATUS(*ACTIVE) 来查看是否有名为 PGM-XVNC 的进程,若有则杀掉,然后重新运行 LEI 安装程序。
  5. 当连接 ODBC 数据源的时候,如果在连接文档中浏览数据源的表的时候报错,说找不到数据源等问题,可以检查一下 /QIBM/USERDATA/LOTUS/DOMINOXXX/EITODBC/ODBC.INI 这个文件的行结束符是否是 *LF,如果不是,则可能造成种种问题,检查方法是编辑这个文件,然后按 F15(Shift+F3),看 Stream file EOL option 是否是 *LF,有时候在 Windows 平台下编辑了这个文件,然后再上传到 i5/OS 上会造成这个行结束符变成 *CRLF,这时一定要改过来。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14751907/viewspace-404365/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14751907/viewspace-404365/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值