適於 IBM Lotus Domino 開發人員的 IBM WebSphere portlet 開發

本文將以構建自己的 portlet 爲例,從設計技術和開發步驟兩個方面在 IBM Lotus Domino 和 IBM WebSphere Portal 之間進行比較。本文還將介紹如何使用 IBM Rational Application Developer for WebSphere Software 以獲得更大的自由和靈活性。

IBM WebSphere Portal 附帶了大量有用的 portlet,用於外部連接、集成和 Internet/intranet 工具。但是有時這些附帶的 portlet 並不能提供您所需要的功能,此時就必須構建自己的 portlet。通過對 IBM Lotus Domino 和 IBM WebSphere Portal 的設計技術進行比較,本文將幫助有經驗的 Lotus Domino 開發人員着手開發 portlet,用於 WebSphere Portal 或任何其他的 Java Specification Request (JSR) 168 兼容的 Java 2 Platform, Enterprise Edition (J2EE) 門戶。

本文的目標讀者是精通 Lotus Domino 且希望使用 IBM Rational Application Developer for WebSphere Software 創建 portlet 的經驗豐富的 IBM Lotus Domino 開發人員。因爲由於涉及關係數據庫的 Java 項目較爲複雜,所以建議您在開始開發客戶機之前閱讀一下關於數據庫、JavaServer Faces (JSF) 和 portlet 的一些資料。我們期望您擁有使用 Lotus Domino 技術的經驗和知識並熟悉 Java 語言。還期望您瞭解 Rational Application Developer 中的用戶界面。假設您在 Rational Application Developer 中創建了一個 JSR 168 JSF-enabled portlet 項目並且已轉換到 Web 透視圖。您的屏幕顯示應類似於圖 1 所示。


圖 1. 新創建的 JSR 168 JSF-enabled portlet
新創建的 JSR 168 JSF-enabled portlet

 

比較 IBM Lotus Domino 和 IBM WebSphere 軟件中的性能

在 Rational Application Developer 中進行面向 WebSphere Portal 的開發不如在 Lotus Domino 環境中快。例如,在生產中,您無法更正一些拼寫小錯誤、更改顏色或其他任何在 Lotus Domino 中本可以實現的快速修復。並且一些操作確實很費時間。例如,Domino 視圖列中廣泛使用的 “Display values as icons” 功能是一種快捷的方法,可在用戶使用應用程序時爲其提供良好體驗,但是在 portlet 中開發一個類似的功能則很費時間。

另一方面,IBM WebSphere Portal 支持 JSF,後者具有一些很好的特性。例如,JSF 的數據表組件允許您直接從數據源或任意 Java 對象列表創建類似於 Lotus Domino 的嵌入式視圖的程序。在 Lotus Domino 中開發應用程序來連接到第三方數據源並從中檢索數據很費時間,因爲它涉及了代理、表單和視圖。另外,雖然 Lotus Domino 嵌入式視圖難於將內容和顯示分開,但 JSF 組件的本質卻使其很難將顯示和內容混淆,從而得到一個好得多的架構。

在 Java 環境的代理中執行排序和過濾代價高昂,而 Lotus Domino 開發人員常常更願意創建另一個視圖或文件夾,因此服務器可在後臺對數據進行排序。但是,這可能導致沉重的服務器負載以及在索引器任務不能持續的時候導致不可預知的突發事件。另一方面,使用 Java Database Connectivity (JDBC) 可很快地連接到 WebSphere Portal 中的關係數據庫,並且 SQL 的本質讓您可編寫帶有不同排序和過濾的 SQL 查詢,沒有任何可見的耗費。更不用說完全內置的 Web 服務支持使 WebSphere Portal 可以很好地適應 Service-Oriented Architecture (SOA) 應用程序。





回頁首


從文檔到關係數據庫的轉換

當有經驗的 Lotus Domino 開發人員開始使用另一個平臺時,他們最大的挑戰是理解關係數據庫與 Lotus Notes 數據庫相比有什麼異同。儘管本文的目的不是要詳細地解釋關係數據庫如何運作,但做一個簡短的概述還是適宜的。

理解關係數據庫結構

一個結構良好的關係數據庫擁有很多表,您可在關係中使用這些表來查找所需的數據。例如,我們來觀察一個帳號經理註冊表(參見表 1 和表 2)。CONTACTS 表保存了所有的個人信息,而 COMPANIES 表包含關於公司的信息。這兩個表被關聯(連接)了起來,因爲 CONTACTS 表中的 COMPANY 列指向了 COMPANIES 表中的 IDX 列。


表 1. CONTACTS 表
IDX FIRSTNAME LASTNAME COMPANY
0 Adam Adamson 2
1 Joe Smith 1
2 William Jones 2
3 Anders Anderson 1


表 2. COMPANIES 表
IDX COMPANYNAME PHONE NUMBER
0 Acme Inc (555)123 456 7
1 Dagerot AB (345) 875 578
2 Citrus ltd (677) 6876 6876

可通過使用以下 SQL 查詢檢索一列包含 first name、last name 和 company name 的數據:

select firstname, lastname, company from contacts, companies
where contacts.company = companies.idx

在 Lotus Domino 應用程序中,更新兩個表中的任意一個時,通常是通過將公司數據複製到用戶文檔中來達到實現這一目的,以便公司數據可列出在用戶數據所在的同一視圖中。或者,如果視圖清單不重要,則在用戶文檔打開時執行一組 @DbLookup 命令,使一個視圖不可能同時列出公司的詳細信息和用戶的詳細信息。

爲使此示例更加複雜,我們假設每個經理或用戶可負責不止一個帳號。在這種情況下,可使用另一個表(Link Table)(參見表 3、4 和 5)。表 5 所示的 COMPANYMANAGER 表指定了經理和公司之間的關係。


表 3. MANAGER 表
IDX FIRSTNAMELASTNAME
0 AdamAdamson
1 JoeSmith
2 WilliamJones
3 AndersAnderson


表 4. COMPANY 表
IDX COMPANYNAMEPHONENUMBER
0 Acme Inc(555) 123 456 7
1 Dagerot AB(345) 875 578
2 Citrus ltd(677) 6876 6876


表 5. COMPANYMANAGER 表
MANAGER COMPANY
0 0
0 1
1 2
2 2

假設您想要查明 Adam Adamson 運行的是哪一個帳號。可使用如清單 1 所示的 SQL 查詢。


清單 1. 用於識別帳號的 SQL 查詢
select c.companyname, m.firstname, m.lastname
from manager m
inner join companymanager cm on m.idx = cm.manager
inner join company c on c.idx = cm.company
where m.idx = 0

在 Lotus Domino 應用程序中查明此信息更加困難,因爲其中不包含關係。您可能必須(依據預定的基礎或由一個更改觸發)使數據在經理文檔和公司文檔之間移動,而這遲早可能導致數據的不一致。





回頁首


比較 Lotus Domino 和 WebSphere 應用程序中的設計元素

乍看之下,Domino Web 應用程序和 WebSphere 應用程序似乎很相似,因爲它們都交付 HTML;但是,如果選擇不與 JSF 結合使用,則相似之處就不存在了。另一方面,如果決定在應用程序中使用 JSF,則會發現在如何創建、配置和填充設計元素方面有一些相似之處。特別地,我們來考察一下 IBM WebSphere Combo Box 元素,該元素與 Lotus Domino 的 Dialog 列表類似。

駕馭動態數據

在 Lotus Domino 中,下拉字段被稱作 Dialog 列表,而在 WebSphere 中,它被稱作 Combo Box。在兩個平臺上,都可向列表中硬編碼值。圖 2 展示了 Lotus Domino 中 Dialog 列表的硬編碼值和動態值的屬性設置。


圖 2. 在 Lotus Domino 中顯示硬編碼值和動態值
在 Lotus Domino 中顯示硬編碼值和動態值

 

當使用 JSR 168 portlet 時,JSF 提供了一個類似的解決方案,被稱作 Combo Box。圖 3 展示瞭如何配置 Combo Box 使值成爲動態值。


圖 3. 在 Rational Application Developer 中配置 Combo Box
在 Rational Application Developer 中配置 Combo Box

 

JSF 組件位於客戶機右側的 Palette 下面。Combo Box 組件位於 Faces Components 類別下面,如圖4 所示。


圖 4. 找到 Palette 面板上的 Combo Box
找到 Palette 面板上的 Combo Box

 

當涉及爲 JSF 組件提供動態數據時,可使用大量不同的解決方案。可將組件直接連接到 Java Naming and Directory Interface (JNDI) 數據源,或者也可以從一個已管理的 bean 向它提供數據。bean 是一個 Java 類,用於幫助 JavaServer Pages (JSP) 文件與後端進行通信。清單 2 是一個簡單 bean 的示例,用於保存一列值:


清單 2. 一個 bean 示例
package pagecode;
import java.util.ArrayList;
import java.util.List;
public class Items {

 private List items = new ArrayList();
 
 public Items() {
  this.getItems().add("My first value");
  this.getItems().add("My second value");
 }

 public List getItems() {
 
  return items;
 }

 public void setItems(List items) {
  this.items = items;
 }
}

上面的代碼指明瞭在初始化 bean 時添加 items。在現實世界中,該信息是從數據庫、Web 服務或類似位置加載的。

爲了讓 Combo Box 使用此 bean,需要對 bean 進行管理。在底部左側區域的 Page Data 面板中執行該操作;在 Scripting Variable 列表中,右擊 sessionScope 選項,然後選擇 new - JavaBean。

配置已管理的 bean 後,必須將其添加到正在使用的 JSP 文件中。將 bean 從 Page Data 面板拖動到編輯器中的 JSP 頁面。現在就可以半自動地將 bean 數據綁定到 Combo Box 上,方法是選擇 Combo Box 並右擊 Page Data 中的 items bean,如圖 5 所示。


圖 5. 將已管理的 bean 添加到 JSP 文件中
將已管理的 bean 添加到 JSP 文件中

 

如圖 5 所示,還可以直接從已管理的 bean 填充表。爲此,只需將已管理的 bean 拖動到 JSP 頁面,即可出現如圖 6 所示的嚮導。


圖 6. 使用嚮導添加數據到 JSP 頁面
使用嚮導添加數據到 JSP 頁面

 

如果 bean 屬於更復雜的類型 —— 比如,如果使用具有很多屬性的複雜類型類填充列表 —— 則此嚮導將讓您選擇希望顯示的列。這與在 Lotus Domino 中將視圖嵌入到表單中類似,但是它提供了更高的靈活性。





回頁首


預覽和測試運行

使用 IBM Lotus Domino Designer 的優點之一是:只使用一個安裝的客戶機即可完成幾乎所有的開發工作。許多應用程序在交付生產之前無需託管在登臺服務器上。Lotus Domino Designer 及其預覽功能將所有的測試和調試需求處理得很好。Rational Application Developer 在初次安裝時並不完整。必須在它上面安裝測試服務器。執行該操作時,整個門戶框架在本地運行,並且可在近似生產狀態的環境中測試應用程序。(請參閱參考資料部分中引用的一篇介紹如何安裝測試環境的文章。)

在 Lotus Domino Designer 中開發頁面或其他設計元素時,可在 Web 瀏覽器或 Notes 客戶機中打開指定的設計元素。

Rational Application Developer 爲您提供了更多的方法以查看 JSP 文件的外觀。您可在 WYSIWYG Design 模式下使用它,該模式產生與實際結果相近的效果,或者選擇在 Source 模式下使用它,該模式顯示所有的標記並向您提供 100% 的控制權。但是,最佳選擇是 Preview 模式,該模式構建在編輯器內,可顯示與生產中的 JSP 一樣的外觀。圖 7 展示了 Rational Application Developer 提供的三種設計模式的一個大致的、並稍微做了一點處理的概括。


圖 7. Rational Application Developer for WebSphere Software 的三種設計模式
Rational Application Developer for WebSphere Software 的三種設計模式





回頁首


運行邏輯

在 Lotus Domino Designer 中,在默認的瀏覽器中選擇 Preview 時,將啓動整個應用程序,您可在整個應用程序中隨意單擊。所有的代理(如任何 WebQueryOpen 和 WebQuerySave 代理)都將被執行。惟一沒有裝配好的是 access control list (ACL)。

在 Rational Application Developer 中要完成與 Lotus Domino Designer 中同樣完整的測試和調試功能,必須將整個 portlet 部署到計算機上安裝的測試服務器上。要完成此操作,請在 Project Explorer 面板中右擊項目並選擇 Run - Run on Server。

接着會彈出一個對話框,可在該對話框中選擇要將 portlet 部署到哪一個服務器上。在大多數情況下,總是選擇本地安裝的測試服務器。細節如圖 8 所示。


圖 8. 選擇服務器
選擇服務器

 

只需選擇正確的服務器實例並單擊 Finish 啓動 portlet 測試環境即可。





回頁首


調試

一個像 Rational Application Developer for WebSphere Software 這樣的成熟的、純 Java 開發的客戶機在調試方面表現優異。只需通過選擇 Window - Open Perspective - Other 並選擇 Debug 來打開 Debug 透視圖即可。Rational Application Developer 環境的外觀類似於圖 9 所示的內容。


圖 9. 導航到 Debug 透視圖
導航到 Debug 透視圖





回頁首


結束語

IBM Lotus Domino 仍然是一種快速的應用程序開發環境,但是 Rational Application Developer 則提供了更多的自由和靈活性,使您可以集中精力解決用戶和業務問題,而不必再去嘗試使用 Notes 數據庫來創建關係數據庫。我們希望本文能從 Lotus Domino 開發人員的角度出發,爲您在 portlet 開發和在 WebSphere Portal 中創建 portlet 方面提供一些指導。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章