System i server上用LEI 整合非Domino/Notes資料

genusBIT發表於2009-05-25

作者:陳 斌 (chenbbin@cn.ibm.com), 軟體工程師 , IBM
王 虎, IBM 軟體工程師, IBM 中國軟體開發中心

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 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-604112/,如需轉載,請註明出處,否則將追究法律責任。

相關文章