一、開發組件
在介紹如何將PB組件部署到Jaguar CTS伺服器之前,首先介紹一下如何利用PowerBuilder 7開發一個組件。這一步非常重要,因為在這裡要設定許多選項,而這些選項又最終直接影響到PB組件的部署工作。
PB開發的Jaguar組件是具有一些特殊事件和屬性的特殊的PB非可視化對象NVO)。這個對象除了要編寫代碼和在PB中設定一些屬性之外,在Jaguar中還需要設定一些特殊的選項來控制組件的行為,而這些選項的設定即可通過手工設定也可通過PB的Jaguar組件嚮導來設定其中的一大部分。
採用Jaguar組件嚮導建立組件,需要回答一系列的問題和設定一些選項,對這些設定和選項的理解是非常重要的,因為它直接影響部署到Jaguar伺服器中組件的行為。
利用PowerBuilder建立Jaguar組件時一般都採用Juguar組件嚮導,該嚮導引導你完成一系列的設定來建立一個新的Jaguar組件。在嚮導引導過程中輸入的值最後將影響到組件的事件、屬性和部署選項。所以在該嚮導過程中,必須注意這些選項和屬性的值。下面我們就開始一步步利用組件嚮導來建立一個Jaguar組件,對涉及到的所有選項和屬性作詳細介紹。
選擇“File|New”菜單或者直接在工具條中選擇“New”。PowerBuilder 彈出一個由許多標籤組成的對話方塊。選擇“Start Wizards”標籤,再選擇“Jaguar Component”,然後點擊“OK”按鈕,Jaguar組件嚮導啟動。在第一次建立組件時需要上述步驟,一旦利用該嚮導建立了一個組件應用,以後只需要在“Object”標籤下建立另外的組件。
嚮導的第一個螢幕首先介紹了該嚮導的功能和如何通過用戶端應用來存取Jaugar對象。點擊"Next"按鈕,出現下一個對話方塊,這個對話方塊總結了嚮導需要的所有資訊和將要回答的問題,點擊"Next"按鈕,出現1所示對話方塊。該對話方塊提示使用者輸入應用的名稱和庫路徑。在這裡可以取一個能反映組件功能的應用程式名稱,也可以選用預設的名稱“genapp”,最後確認庫路徑,並點擊"Next"按鈕。下一個螢幕顯示庫路徑,如果需要的話,可以改變它,點擊"Next"按鈕,彈出2所示對話方塊。該對話方塊要求使用者輸入PowerBuilder的非可視化組件的名稱和描述資訊,系統預設為應用程式名稱前加"n_"首碼。點擊"Next"按鈕,彈出下一個對話方塊。該對話方塊要求使用者輸入Jaguar組件名,這個名稱預設為和PowerBuilder對象名相同但使用者也可以改變它。點擊"Next"按鈕,下一個螢幕要求使用者輸入串連Jaguar伺服器的一些資訊,3所示。當部署組件到Jaguar伺服器時,PowerBuilder需要這些資訊來取得和伺服器的串連。如果Jaguar元件伺服器運行在本地機器上,則在“Server name”處填入localhost,如果元件伺服器沒有運行在本地,則需要輸入伺服器的的名稱或其IP地址。連接埠號碼為在Jaguar伺服器建立時指定的監聽器連接埠號碼,確省為9000。登陸帳號預設為jagadmin,口令預設為空白Jaguar伺服器管理員可以更改預設的登陸帳號和口令),按一下滑鼠"Next"按鈕。
圖1 指定新的應用程式名稱和庫
圖2 指定新的應用程式名稱和庫
圖3 指定新的應用程式名稱和庫
下一個螢幕要求使用者為組件指定一個包名。什麼是包?一般來說,一個包就是一組功能相關的對象的集合。所有部署到Jaguar伺服器的組件都需要一個包名。在這裡可以手工輸入一個包名,也可以取Jaguar伺服器上已經存在的一個包名,點擊"Next"按鈕。
下一個螢幕要求使用者選擇組件的類型。這裡有三種類型供選擇:標準型一般組件)、共用型共用執行個體)和服務型在伺服器啟動時裝入,為Jaguar用戶端或組件執行後台服務)。一個共用組件的“sharing”屬性被設定為TRUE。服務元件不僅被標誌為共用,而且還有另外一些方法,如運行,啟動和停止等。選擇需要的組件類型,點擊“Next”按鈕。
下一個螢幕用來指定執行個體緩衝選項。在選擇“不支援not supported)”情況下,可以通過在組件的“CanBePooled”事件中添加代碼來改變組件執行個體為支援緩衝。也可以通過在Jaguar manager中改變組件的緩衝屬性。選擇所需要的緩衝屬性,點擊“Next”按鈕。
圖4 指定新的應用程式名稱和庫
下一個螢幕用來指定事務支援Transaction Support)和自動分界/自動清除Auto Demarcation/Deactivation)選項。這兩個屬性也可以通過Jaugar manager來直接設定。下面對幾種事務分別作一下解釋。
- “Not Supported不支援)”:指組件在事務範圍之外執行;
- “Supports Transaction支援)”:指如果有一個事務在執行,則該組件在這個事務中執行,否則組件將在事務之外執行。
- “Requires Transaction請求事務)”:指組件將一直在一個事務內部執行。如果用戶端向一個組件發出服務要求時,則一個新的事務開始。如果一個組件被另外一個已經運行在一個事務中組件請求,則該組件將使用另外一個組件的事務。
- “Requires New Transaction請求新事務)”:指一個組件初始化後,一個新的事務開始啟動。
如果選中“自動分界/清除”選項則指該組件在它的任何一個方法被調用後自動使之不活動;否則,組件直到收到一個 SetAbort 或者SetComplete調用才使之不活動。選擇完畢後,點擊“Next”按鈕,下一個螢幕用來指定介面選項,這些選項容許你修改組件介面的方式。在這裡強調一點,除非你對組件有特殊的需求或者對這些選項具有非常清楚的理解,一般建議不要改變這些選項,保持預設值。點擊“Next”按鈕。
下一個螢幕用來選擇遠端偵錯remote debugging)和現場編輯live editing)。遠端偵錯選項在開發期間是非常有用的,但是到了最終釋放代碼時,不要選中該選項,否則,使用者可以看到你的組件代碼。現場編輯指Powerbuilder每次在對組件畫板作過改變儲存後都自動部署組件到Jaguar。選擇需要的選項,點擊“Next”按鈕。
下面將進行PBD產生的一些選項選擇。如果選擇第一項,則PowerBuilder將從所有庫列表中的PBD建立一個單一合并的PBD,然後還需要為這個合并的PBD另外指定一些選項。如果在組件的資料視窗中有一些動態引用如用到了資料視窗),則應該選中第二個選項include unreferenced objects)。輸入一個合并後的PBD的名稱和使用的資源檔PBR的名字,這個資源檔能使組件具有和通常意義上的Powerbuilder應用一樣的功能。點擊“Next”按鈕。
最後,嚮導顯示出所有的選項並為這個組件產生一個“工作計劃to_do)列表”,點擊“Finish”按鈕,至此,該組件將被產生。
二、修改PB對象為組件
有時候需要將一個已經存在的PB對象升級為一個組件。這時就需要增加一些事件,還需要為部署該組件建立一個工程。
1. 添加事件
將一個傳統的PB對象升級為一個Jaguar組件,需要另外添加一些事件,包括 activate, deactivate 和可選的canBePooled事件。
- activate-該事件映射到“pbm_component_activate”。該事件代碼每次在組件被啟用時執行。這裡需要注意的是映射事件是“pbm_component_activate”而不是平常非常熟悉的pbm_activate。
- deactivate-該事件映射到“pbm_component_deactivate”。當組件不活動時啟用該事件。
- canBePooled-該事件映射到“pbm_component_canbepooled”。它用來程式控制組件的執行個體緩衝。返回1時,允許執行個體緩衝,返回0時,禁止執行個體緩衝。
2. 建立一個部署工程
一旦將一個傳統意義上的PowerBuilder對象升級為一個Jaguar組件,還需要另外建立一個部署工程,在下一節中對其進行詳細討論。
三、部署組件的過程和選項
在用戶端應用程式使用組件之前,必須將該組件部署到一個應用伺服器中。在Powerbuilder 7中,可以利用PB和Jaguar的整合特性,在PB中每次對組件進行修改儲存後,直接將其部署到Jaguar伺服器中。這種特性在PB中被稱為現場調試Live Editing),這在開發與測試環境中是非常有協助的,但不能將其應用到實際應用環境中。
1. PB組件的組成
- PowerBuilder PBDs
一個部署過的PowerBuilder組件具有許多的元素。第一個就是編譯過的PB代碼,存放在一個或者多個PBD中。在作業系統中必須要指定這些組件庫的路徑,這樣PowerBuilder的PBDs才能夠被Jaugar中的PowerBuilder已耗用時間庫引擎存取。
- IDL
除了PowerBuilder代碼以外,還需要一個介面描述,它在用戶端應用向伺服器中的組件請求服務時使用。這些介面資訊採用介面定義語言IDL)來描述。
- Resources
資源是組件Live App需要的位元影像或者資料視窗,這些資源儲存在PBR檔案中。