利用 Eclipse IDE 為 Lotus Notes/Domino 開發 Java 代理。下載並安裝 Eclipse,然後瞭解使用 Eclipse 建立項目、調試 Java、重構代理以及將代理匯入 Domino Designer 是何等輕鬆。
Java 和 Lotus Notes/Domino 是理想的開發組合。將它們組合在一起,可以使 Notes/Domino 開發人員充分利用其常用開發環境 Domino Designer 中目前可用的所有 Java 代碼和包。
Eclipse 大概是最好的整合式開發環境之一,它提供了非常豐富的特性,其中包括上下文相關操作、視圖、富偵錯工具(rich debugger)和重構。重構可以將 Java 代碼重新命名、移動、添加和提取到新的方法中,以減輕清除初始編碼嘗試的工作量,使其簡潔易讀,並使其成為您要向其他開發人員顯示的代碼。對許多開發工作來說,重構是 Eclipse 最好的一項功能。
有了調試 Lotus Notes/Domino 7 中的 Java 代理的能力,現在就可以協調 Lotus Notes/Domino 和 Eclipse,為 Notes/Domino 應用程式建立設計優良的可調試 Java 代理項目。
進行任何 Lotus Workplace 開發都需要確實瞭解 Eclipse 是如何工作的。Lotus Notes/Domino 7 提供了一個現在開始學習 Eclipse 的極好理由,既將它用於 Notes/Domino 的一些操作,增加將來也可以應用於 Lotus Workplace 項目的技能。
本文講述了如何安裝 Eclipse,如何為 Lotus Notes/Domino 建立項目,以及如何將這個項目匯入 Domino Java 代理中,然後調試該代理。本文還提供了調試這些代理的一些技巧和可能遇到的陷阱。
安裝 Eclipse WebSphere Studio Application Developer 是基於 Eclipse 的,所以如果安裝了 Eclipse,就可以隨同本文瞭解如何使用 WebSphere Studio Application Developer。如果沒有安裝 Eclipse 或 WebSphere Studio Application Developer,那麼您需要先獲得這兩個應用程式。Eclipse 可以從 Eclipse 基礎網站免費下載。WebSphere Studio Application Developer 的試用版也能找到。
下載 Eclipse 或 WebSphere Studio Application Developer。Eclipse 很容易安裝;Eclipse 的 Web 網站上有安裝說明。下載了用於 Windows 的 zip 檔案之後,需要運行 eclipse.exe 檔。WebSphere Studio Application Developer 比較複雜。請參考相應文檔,以獲得安裝說明。
注意:下面的步驟講述的是 Eclipse 3.0。如果您安裝了 Eclipse 的其他版本,可能會發現使用者介面以及步驟與本文中講述的有所不同。
Eclipse 和 Rational ClearCase 原始碼控制如果要整合 Eclipse 和 Rational ClearCase 原始碼控制系統,可以下載並安裝 IBM Rational ClearCase SCM adapters for Eclipse 2.11。否則,預設原始碼控制系統是 CVS。
在 Eclipse 中建立新的 Java 項目安裝了 Eclipse 和所有外掛程式後,現在就可以建立項目,並以此作為 Notes/Domino 工作的開始。必須在一個項目記憶體儲所有 Java 代碼。在工作區中可以有多重專案。在電腦中還可以有多個工作區,可以使用 eclipse.exe 的 –data 開關來指向不同的工作區。
要建立新的 Java 項目,需要開啟 Eclipse,選擇 File - New - Project。然後在 New Project 對話方塊中選擇 Java Project,最後單擊 Next。
圖 1. New Project 對話方塊
輸入項目名稱,然後單擊 Finish。建立了項目後,要更改項目屬性中的路徑,使其指向 Notes.jar 檔案。右擊 Package Explorer 附簽中的項目並選擇 Properties。在 Properties 對話方塊中,選擇 Java Build Path,然後選擇 Libraries 附簽。單擊 Add External JARs 按鈕,導航到 Notes.jar 檔案,以將其添加到類路徑中。
圖 2. Properties 對話方塊
添加了 JAR 檔案之後,可以使用項目中 Notes Java API 定義的類和介面。 Domino Designer on-line help 中有關於 Notes Java API 的文檔。
接著,需要下載 Sun 1.3.1 JRE。或者,如果電腦上安裝了 Domino 伺服器,可以使用該伺服器的 JVM。Notes 客戶機和 Domino 伺服器應該是匹配的,以確保構建項目所用的 JVM 與從伺服器任務或Proxy 伺服器任務調用時代理和程式將啟動並執行 JVM 相同。
Lotus Notes/Domino 的目前的版本使用的是 Java 1.3.1,所以必須安裝該軟體以使用正確的版本來構建項目。(Lotus Notes/Domino 7 使用 JDK 1.4。)雖然許多 Java 代理和程式都可以編譯,而且沒什麼問題,但可能會陷入另一些問題,比如使用一個 JDK 版本構建程式,卻在另一個版本上運行。
如果安裝了 Eclipse 3.0,因為它是基於 Java 1.4.2 的,所以需要刪除 JDK System Library 並建立一個新庫來指向 JDK 1.3.1 安裝。要進行這項操作,需要選中 Libraries 附簽的 Properties 對話方塊中的 JRE System Library,並單擊 Remove。
要添加新庫,可以單擊 Add Library 按鈕。在 Add Library 對話方塊中,選擇 JRE System Library,然後單擊 Next。選擇 Alternative JRE 選項(如果尚未選擇)。然後單擊 Installed JREs 按鈕。單擊 Add 並完成 Add JRE 對話方塊來添加 JDK 1.3.1。
圖 3. Add JRE 對話方塊
儲存對項目的更改。
建立第一個 Java 代理 Domino Designer 在開始時會自動為您填充第一個 Java 代理。不過,Eclipse 不會這樣,所以它需要建立新類,來實現正確的 AgentBase 介面,擷取 Domino 會話和 agentcontext 對象。可以使用 Domino Designer 中的代碼作為指導。
圖 4. Domino Designer Java 代理
將骨幹 Java 代碼從 Domino Designer 直接複製到 Eclipse 項目中的新類中。我們建議您建立新的包,並於其中儲存代理。這將有助於組織項目,並且這符合一般 Java 設計原則。要建立新的包,可以選擇 File - New - Package。
圖 5. New Java Package 對話方塊
我們建立名為 com.ibm.NotesJava.agents 的包,因為是在 IBM 工作,並且這是我們的 Notes Java 項目。我們將在這個包中儲存代理。可以看到的其他常見包是 com.sun.*、org.apache.* 和核心 Java 語言函數的 java.lang.*。至於如何組織包有一整套原則,但這不在本文討論範圍內,重要的是不要將代理和代碼放在預設包中,因為這個包雜亂且不專業。
現在已經有了新包,所以可以建立新的 Java 類。要在 Eclipse 中建立新的 Java 類,可以選擇 File – New – Class。Eclipse 的效率非常高,所以如果已經選擇了包,那麼 Eclipse 將填充包名稱。
可以在這裡添加名稱和超類了。對於 Notes 代理,超類必須始終是 lotus.domino.AgentBase。在 Domino Designer 中,該操作是自動進行的,但在 Eclipse 中,必須手工完成這項操作。
圖 6. New Java Class 對話方塊
在建立類之後,就可以輸入剩餘的代理代碼,從而使其看起來與 Domino Designer 樣本中的代理一樣。
圖 7. Eclipse 中的 JavaAgent
構建代理時,將在包目錄中建立 JavaAgent.class 檔案。現在已經有了類檔案,我們可以將其匯入 Domino Designer 中的代理中,並在 Eclipse 中管理代碼。
在 Domino Designer on-line help 中,請參閱“Import Java”主題,以擷取更多資訊。在將檔案匯入代理中之後,當調用該代理時,可以運行已經編寫的 Java 代碼。現在就可以使用 Eclipse 偵錯工具來調試該代碼了。
調試 Java 代碼 Eclipse 封裝了 Java 偵錯工具,使您能夠遍曆和更改變數,監視項並在 Java 代碼中添加斷點。第一步是在偵錯模式下載入 Lotus Domino 中 JVM。這樣可以強迫 JVM 停止,等到附加了偵錯工具後再繼續進行其操作。
Lotus Notes/Domino 6 或之後的版本中包含這項功能,要啟用該功能,可以添加 Notes.ini 變數 JavaEnableDebug=1,然後重新啟動伺服器。
下一階段是在伺服器上運行代理,並等待伺服器凍結代理的執行。在凍結代理的執行之後,JVM 將等待偵錯工具附加到 TCP/IP 連接埠 9788。
開啟 Eclipse 和項目。選擇 Run - Debug 來開啟 Debug 對話方塊,然後選擇 Remote Java Application,單擊 New 建立新的偵錯工作階段。最後,在 Connect 附簽中,指定伺服器的主機名稱,如果伺服器在所調試的電腦上,則指定本地主機的名稱。
圖 8. Debug 對話方塊
對於進階使用者,可以按如下所示改變連接埠號碼和調試設定:
JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000 Suspend=n |
沒有凍結伺服器來等待調試串連,所以可以錯過代理的啟動。該調試設定允許您將額外參數傳送給伺服器中的 JVM 偵錯工具。如果您有自己喜歡的設定,也可以在這裡使用。
最好是代理代碼中已經設定了斷點。當在偵錯模式下使用 Eclipse 將代碼附加到伺服器時,它應該會自動斷開,並允許您檢查變數,設定其他斷點,執行需要使用的其他所有調試任務。
其他 Eclipse 指標
現在 Eclipse 中已經有了項目,它提供了 Domino Designer 內大型 Java 項目所沒有的許多增強開發和組織任務。Domino Designer 適用於較小的 Java 任務,比如擷取或設定多個值或簡單的報表。不過,一旦開始將代碼分入不同的包、定義介面並將工作委託給其他人,專案管理會變得更複雜。
Eclipse 包含用於協同工作的內建工具,其中包括 CVS 原始碼控制整合。Rational ClearCase 原始碼控制外掛程式允許您附加到 ClearCase 中儲存的 Eclipse 項目中。它提供了自動或即時的代碼檢入和檢出、簡潔的修飾符,從而可以輕鬆地標識原始碼控制項中的對象及其狀態。
Eclipse 中另一項非常有用的功能是可以重構項目。例如,可以選擇代碼的一部分並將其移至它自己的方法中。如果您有一個非常長的方法,想將其分入較小的步驟中,那麼可以將這項操作自動化,Eclipse 能夠協助您實現該自動化。下列代碼片斷是一個重構樣本:
Initial functionpublic void NotesMain(){try{Session session = getSession();AgentContext agentContext = session.getAgentContext();Database db;// I am running this, use the server- or it can assume it is localif (session.getUserName().equals("CN=Ian Connor/OU=Westford/O=IBM")== true)db = session.getDatabase("support/iris","support/retain.nsf");elsedb = session.getDatabase("","support/retain.nsf");System.out.print(db.getFileName());} catch(Exception e){e.printStackTrace();}} |
可以選擇要移至其自己的函數的代碼部分,然後選擇 Refactor - Extract Method。這將確定需要傳送的參數和應該返回的資料。您所需要做的就是選擇方法名稱。然後可以預覽更改,查看要進行的操作。這將有助於您更好地組織代碼,使試圖瞭解代碼的其他人更容易維護代碼。正如所有開發人員都知道的,包含較短函數的、簡潔的、組織良好的代碼基數(code base)要比非常長的、似乎不會結束的 1000 行函數容易使用得多。
public void NotesMain(){try{Session session = getSession();AgentContext agentContext= session.getAgentContext();Database db;db = getRetainDatabase(session);System.out.print(db.getFileName());} catch(Exception e){e.printStackTrace();}}private Database getRetainDatabase(Session session) throws NotesException{Database db;// I am running this, use the server- or it can assume it is localif (session.getUserName().equals("CN=Ian Connor/OU=Westford/O=IBM")== true)db = session.getDatabase("support/iris","support/retain.nsf");elsedb = session.getDatabase("","support/retain.nsf");return db;} |
重構是所有開發工作的基礎部分。我們總是不願意立即共用代碼的第一個 cut。在使用新的 API 或新的工作方式時更是如此。先是花費大量時間編寫了一小部分代碼,以測試其如何工作,然後當可以運行該代碼時,將停下來適當組織代碼,使查看該代碼的人能夠看懂。
結束語
Eclipse 是 Notes 開發人員可以在其當前和將來項目中使用的非常有用的平台。它可以協助開發人員更好地組織項目,與小組中的其他人共用代碼,並更好地利用 Java 設計技術,如介面和代碼分隔。
隨著 Lotus Workplace 和 Lotus Notes/Domino 的整合度越來越高,Java 和 Eclipse 將發揮重要的作用。Notes 開發人員現在可以憑藉自己的合并和群件技能進行構建,同時還要準備應付未來的挑戰。
新的產品或工作方式必須具有一些重要功能和優點,才能確保人們願意採用該產品或方式。對於必須提交編寫得很好的、提供優質 Java 代碼的應用程式的 Notes 開發人員來說,Eclipse 提供了調試、重構和原始碼控制。
所有這些在任何重要的開發工作中都是重要的功能,它們將確保與得到的成果相比,您花費時間學習如何使用 Eclipse 進行 Notes 開發是非常值得的。