使用定製工作流程更新 RSS 資料來源

CloudSpace發表於2009-07-30

郭 亮 (guoliang@cn.ibm.com), 軟體工程師, IBM 中國軟體研發中心
趙 旭芹 (zhaoxq@cn.ibm.com), 軟體工程師, IBM 中國軟體研發中心
賈 翠琴 (jiacuiq@cn.ibm.com), 軟體工程師, IBM 中國軟體研發中心

定製工作流程操作是 WCM 6.1 中引入的新功能,用於對 WCM 的工作流進行擴充套件。使用定製工作流程操作使用者可以自定義程式碼,並作為工作流程的一部份得到執行,滿足使用者對工作流程的多種需要。本文將以一個更新 RSS 資料來源的定製工作流程操作為例,介紹 WCM 中定製工作流程操作的開發和部署以及如何在 WCM 中建立和使用。

WCM 及工作流程簡介

IBM Web Content Management 是包含在 WebSphere Portal Enable 和 Extend 版本中的 Web 內容管理元件,提供了在 WebSphere Portal 環境下建立、管理和釋出 Web 內容的方式。使用 Web Content Management(Web 內容管理,以下簡稱 WCM)可以使 Web 站點的設計、頁面設計,和內容提供以及內容評閱的工作完全分開,能夠讓具有不同技能的人員獨立工作,從而高效的建立和管理 Web 內容,為使用者提供了一個端到端的解決方案。

工作流程是 WCM 中重要的功能模組,應用工作流程可以有效地控制 Web 內容的生命週期。使 Web 內容,從建立到審批,到釋出,到存檔的過程成為一個可監控的流程,並使 Web 內容在這個流程中有規律的運動,而當 Web 內容需要更改時可以返回到相應的專家那裡得到修正。確保了 Web 內容的準確性和有效性。另外在 WCM 中,也可以設定對編寫模板、演示模板、站點、站點區域、元件、分類法、類別等 Web 元件應用工作流。

在 WCM 中,應用工作流程的 Web 元件和沒應用工作流程的 Web 元件在元件狀態和元件安全性上具有以下區別:

  1. 沒有應用工作流程的元件僅有一個已釋出的工作流程狀態;而應用工作流程的元件可具備草稿狀態、已釋出狀態和過期狀態等三種狀態。
    • 草稿狀態:元件處於設計編寫中,還沒有被髮布,網站使用者還不能在網站上對此元件進行訪問。在 WCM 的編寫介面中由一個黃色的圖示進行表示。
    • 已釋出狀態:元件已正式釋出了。網站使用者可以對其進行訪問。在 WCM 的編寫介面中由一個綠色的圖示進行表示。
    • 過期狀態:元件時效性已過,已不再網站中進行釋出。在 WCM 的編寫介面中由一個藍色的圖示進行表示。
  2. 沒有應用工作流程的 Web 元件的安全性和狀態都是由儲存時所手動設定的;而應用工作流程的元件的安全性可以在工作流程階段中進行設定,Web 元件的安全性將會隨著工作流程階段的轉換而按照設定好的模式,有計劃自動的改變。

由於有以上區別,應用工作流程可以使 Web 內容的釋出具有更可靠的管理,儘可能的保證了 Web 內容在釋出時的準確性。而且保證了網站對終端使用者的展示是網站管理者和編輯者所期望的 Web 內容。在 WCM 中,工作流程的概念是由工作流程、工作流程階段和不同的工作流程操作組成:

  • 工作流程操作,是用來定義當 Web 元件進入或退出某個工作流程階段時,對這個 Web 元件所進行的動作。
  • 工作流程階段,是用來描述工作流程中某個特定的邏輯階段,在進入或退出某個工作流程階段時可以執行一個到多個工作流程操作。可以由 Web 物件的審批人員決定當前的 Web 元件是否進入下一個工作流程階段或者重新開始工作流程。
  • 工作流程,一個完整的工作流程是由多個工作流程階段組成。應用工作流程的 Web 元件將對應一個工作流程。

工作流程、工作流程階段和工作流程操作之間的關係如圖 1 所示。


圖 1. 工作流程、工作流程階段和工作流程操作關係圖
圖 1. 工作流程、工作流程階段和工作流程操作關係圖




回頁首


使用者定製操作帶來的新改變

使用者定製操作是 WCM 6.1 版本中引入的新功能,使 WCM 的使用發生了巨大的變化。在 WCM 6.1 之前,使用者只能使用 WCM 中內建的釋出操作、過期操作、定時移動操作和電子郵件操作等幾種內建的工作流程操作。而在 WCM 6.1 後,使用者使用定製操作,可以開發特定於自己應用的程式碼,實現自身業務相關的操作,並嵌入到 WCM 的工作流程中,作為 WCM 工作流程的一部分得以自動執行。比如可以在釋出前更改內容中圖片的大小,對釋出的內容進行索引等。極大的減少了內容管理的額外操作,滿足了使用者的多樣化需求。


表 1. WCM 6.1 中的工作流程操作種類

操作名稱 操作介紹
釋出操作 將 Web 元件的狀態從草稿更改為已釋出。 Web 元件將顯示在呈現站點上。一旦 Web 元件進入包含釋出操作的工作流程階段,並且到了釋出日期和時間,將釋出該 Web 元件。
到期操作 將 Web 元件的狀態從已釋出更改為已到期。 Web 元件在站點上將不再可用。一旦 Web 元件進入包含到期操作的工作流程階段,並且到了所選的到期日期和時間,那麼 Web 元件將過期。
定時移動操作 在指定的日期執行轉換到下一階段的已安排的移動。可以在列表框中選擇在每個文件中輸入的四種日期型別中的一種,或者指定某個具體的日期。
電子郵件操作 在執行時傳送電子郵件。可以建立新的電子郵件操作並指定收件人。可以選擇向核准人、作者和所有者傳送電子郵件。還可以建立要向其傳送電子郵件的其他使用者或組的列表。電子郵件中包含要檢視的 Web 元件的連結。
版本操作 執行時將建立 Web 元件的一個版本。本操作為 WCM6.1 新引入的工作流程操作
定製操作 執行時將執行使用者先前部署到系統的使用者定製的程式碼。本文將詳細地介紹其概念,開發、部署和使用。本操作為 WCM6.1 新引入的工作流程操作

定製操作依靠 WebSphere Application Server(以下簡稱 WAS)中內建的 Eclipse Plug-in 框架,使用者開發的定製操作被部署後,將自動嵌入到 WCM 執行環境中,由 WCM 動態的感知並使用。在部署成功後,使用者可以以類似內建工作流程相似的方式使用使用者自己開發的定製操作。

本文將以 RSS 更新定製工作流程操作為例,詳細地介紹定製操作的基本概念,以及定製工作流程操作的開發、部署和使用。





回頁首


搭建使用者定製操作的開發環境

在 IBM Rational Application Developer 7.5 及以上版本中,已經內建了對 WCM 開發的支援,只需要建立普通的動態 Web 工程就可以進行 WCM 定製操作的開發。當我們使用 Eclipse 環境時需要手動配置開發環境。本章將以 Eclipse3.4 為例介紹主要配置的步驟。

  1. 建立動態 Web 工程
    1. 在 Eclipse 主選單中點選 File->New->Dynamic Web Project 。
    2. 在彈出的對話方塊中輸入工程的名字,RSS Custom Workflow Action 。
    3. 勾選 Add project to an EAR 。
    4. 保留其它預設選項,並單擊 Finish 按鈕。


    圖 2. 建立 RSS 更新定製工作流程操作工程
    圖 2. 建立 RSS 更新定製工作流程操作工程

    Eclipse 會為我們建立出 WCM 定製工作流程操作專案和相應的 EAR 專案。在工程瀏覽器中如圖 3 所示。



    圖 3. 初始工程樹檢視(檢視大圖
    圖 3. 初始工程樹檢視

  2. 設定工程的構建路徑
    1. 在檔案系統中建立一個新目錄,命名為 ILWWCM_v6.1_dir 。
    2. 從安裝好 Portal/WCM 6.1 的伺服器中將 ilwwcm-api.jar 檔案(位於 \wcm\prereq.wcm\wcm\shared\app)和 wp.base.jar 檔案(位於 \base\wp.base\shared\app),複製到步驟 a 所建立的目錄中。
    3. 在工程管理器中,右鍵單擊 RSS Custom Workflow Action,選擇 Properties 。
    4. 在彈出的對話方塊中選擇 Java Build Path,單擊 Libraries 頁。點選 Add External JARs 按鈕選擇步驟 b 複製的 ilwwcm-api.jar 和 wp.base.jar 檔案。點選 OK 按鈕,將 Jar 包新增到工程的構建路徑上。


    圖 4. 設定工程構建路徑
    圖 4. 設定工程構建路徑

  3. 配置 WCM Java 幫助文件的支援
    1. 從安裝好 Portal/WCM 6.1 的伺服器中將 WCM 的 Java 幫助文件(位於 \installedApps\\wcm.ear\ilwwcm.war\webinterface\ api-javadoc 目錄)拷貝到前面步驟所建立的 ILWWCM_v6.1_dir 目錄中。
    2. 在工程瀏覽器中,右鍵單擊 ilwwcm-api.jar,選擇 Properties 。
    3. 在彈出的對話方塊中選擇 Javadoc Location 。選擇 Javadoc URL,並選擇上面步驟中複製的 api-javadoc 目錄。單擊 OK 按鈕。


    圖 5. 新增 Java 幫助文件
    圖 5. 新增 Java 幫助文件

這樣我們在 Eclipse 中建立好了 WCM 開發環境,接下來將進入定製工作流程操作的開發過程了。





回頁首


開發 RSS 更新定製工作流程操作

在 WCM 6.1 中我們可以使用傳統的選單元件等方式進行 RSS 資料來源的生成。但是因為在其中新引入了使用者定製操作的功能,所以我們可以開發和使用 RSS 更新定製操作,在工作流程中自動完成 RSS 資料來源的生成和更新。

新增 RSS 更新定製工作流程操作工程檔案

WCM 定製操作開發的工程中,主要包括 Java 類和部署描述檔案兩種型別的檔案。

首先建立我們工程中的 Java 類:

com.ibm.wcm.customworkflowaction.RSSTool:用於 RSS 資料來源更新的工具類,提供建立 RSS 資料來源檔案,新增和刪除 RSS 資料項的方法。

com.ibm.wcm.customworkflowaction.AddRSSItemAction:將新發布的內容資訊寫入 RSS 資料來源的定製操作類。此類實現了 CustomWorkflowAction 介面,每一個 WCM 定製操作開發工程中至少需要包括一個實現此介面的 Java 類。


圖 6. 建立 AddRSSItemAction 類
圖 6. 建立 AddRSSItemAction 類

com.ibm.wcm.customworkflowaction.RemoveRSSItemAction:將已過期的內容資訊從 RSS 資料來源中刪除的使用者定製操作類。此類實現了 CustomWorkflowAction 介面。

com.ibm.wcm.customworkflowaction.RSSCustomWorkflowActionFactory:管理對 RSS 更新定製操作例項的建立。此類實現了 CustomWorkflowActionFactory 介面,每一個 WCM 定製操作開發工程中至少需要包括一個實現此介面的 Java 類。

接下來需要建立部署描述檔案。

WCM 定製操作的部署描述檔案除了普通 Web 應用程式所需要的 web.xml 之外,還有 plugin.xml 。由於 web.xml 在工程建立時由 Eclipse 在自動生成,所以我們只需要手動建立 plugin.xml 檔案。

將 plugin.xml 建立於 WebContent/WEB-INF 目錄下,這個檔案用於將 RSS 更新定製工作流程操作註冊到 WCM 的執行環境中。

建立好的工程如圖 7 所示


圖 7. 最終工程樹檢視
圖 7. 最終工程樹檢視

編寫 RSS 更新定製工作流程操作

編寫 WCM 定製操作的主要工作是通過例項化 CustomWorkflowAction 介面,來實現的在其中定義的兩個方法。


表 2. CustomWorkflowAction 介面說明

方法宣告 說明
CustomWorkflowActionResult execute(Document document) 定製工作流程操作的具體執行程式碼
java.util.Date getExecuteDate(Document document) 指定當前工作流程操作執行的時間

其中 CustomWorkflowActionResult 介面中包括一個 String 型別的動作完成資訊(將顯示於工作流程的狀態資訊中)和一個用來指示 WCM 引擎接下來動作的 Directive 型別的資料。


表 3. Directive 型別表

說明
Directive Directives.CONTINUE 指示 WCM 引擎正常執行工作流程
Directive Directives.CREATE_DRAFT 指定 WCM 引擎建立當前文件的草稿
Directive Directives.DECLINE 指示 WCM 引擎拒絕當前文件
Directive Directives.NEXT_WORKFLOW_STAGE 指示 WCM 引擎直接將當前文件移動到下一個工作流程階段
Directive Directives.RESTART_WORKFLOW 指示 WCM 引擎重新開始當前文件的工作流程
Directive Directives.ROLLBACK_DOCUMENT 指示 WCM 引擎回退當前文件的所有更改 .
Directive Directives.STOP 指示 WCM 引擎停止執行當前工作流程階段的後續操作

下面讓我們具體來編寫 AddRSSItemAction 這個定製操作類。

1 .實現 getExecuteDate 方法

getExecuteDate 方法的返回值用來指定當前這個動作執行的時間。工作流程執行到當前操作時,如果時間晚於或等於 getExecuteDate 方法所返回的時間,那麼這個定製操作就立即執行,如果早於 getExecuteDate 方法所返回的時間那麼當前的工作流程會被掛起,直到所設定的時間到來時,這個工作流程才會繼續執行。可以使這個方法中返回 DATE_EXECUTE_NOW 來使動作立即執行。在我們的例子中將使其返回 DATE_EXECUTE_NOW 。


清單 1. getExecuteDate 方法示例

				
 public Date getExecuteDate(Document arg0) { 
    returnDATE_EXECUTE_NOW; 
 }

2 .實現 execute 方法

execute(Document document) 實現了定製操作的主要工作。我們例項化這個方法來實現讀取當前內容的資訊,並向 RSS 資料來源檔案中新增專案的功能,這將在當前動作執行時執行。其 CustomWorkflowActionResult 型別的返回值中,包括一個 String 型別的動作完成資訊,將顯示於工作流程的狀態資訊中;和一個 Directive 型別的資訊,將用來指示 WCM 引擎接下來的動作。在我們的例子中是將返回 Directives.CONTINUE 使工作流程正常進行下去。


清單 2. execute 方法示例

				
 public CustomWorkflowActionResult execute(Document arg0) { 
    Directive directive = Directives.CONTINUE; 
    String message = "Item is not a content"; 

    if (arg0 instanceof Content) { 
        boolean result = RSSTool.getInstance().AddRSSItem((Content)arg0); 
        if(result){ 
            message = "Content successfully added to RSS repository "; 
        }else{ 
            message = "Content failed added to RSS repository "; 
        } 
    } 

    WebContentCustomWorkflowService webContentCustomWorkflowService = null; 
    try{ 
        InitialContext ctx = new InitialContext(); 

        webContentCustomWorkflowService = (WebContentCustomWorkflowService) 
 ctx.lookup("portal:service/wcm/WebContentCustomWorkflowService"); 
    }catch (Exception ne){ 
        ne.printStackTrace(); 
        return null; 
    } 

    CustomWorkflowActionResult result = webContentCustomWorkflowService 
 .createResult(directive, message); 
    return result; 
 }

相似的我們實現第二個定製操作類 RemoveRssItemAction 。具體的程式碼可以參見本文後面的附件。

編寫 RSS 更新定製工作流程操作工廠類

WCM 定製操作使用了工廠方法的設計模式,使用者通過工廠類將實現的定製操作註冊到 WCM 引擎中,同時工廠類也會在 WCM 引擎需要時提供,定製操作類的具體屬性和例項。

在編寫定製操作的 Web 應用程式時,需要例項化 CustomWorkflowActionFactory 介面來編寫工廠類。 CustomWorkflowActionFactory 的主要介面如下:


表 4. CustomWorkflowActionFactory 介面說明

方法宣告 說明
CustomWorkflowAction getAction(java.lang.String actionName,Documentdocument) 根據 actionName 返回定製流程操作的一個例項
java.lang.String getActionDescription(java.util.Locale displayLocale, java.lang.String actionName) 根據 actionName 返回對定製流程操作的介紹,將會顯示在建立 workflow action 的介面中
java.lang.String[] getActionNames() 返回當前工廠類所能建立的工作流程操作的 actionName 集合
java.lang.String getActionTitle(java.util.Locale displayLocale, java.lang.String actionName) 根據 actionName 返回定製流程操作的標題,將會顯示在建立定製流程操作的介面中
java.lang.String getName() 返回對定製流程操作工廠類的名稱
java.lang.String getTitle(java.util.Locale displayLocale) 返回定製流程操作工廠類的標題,將會顯示在建立定製流程操作的介面中

下面是如何返回相應定製操作類例項的 getAction 方法的程式碼,具體的工廠類程式碼可以參見本文後面的附件。


清單 3. getAction 方法示例

				
 public CustomWorkflowAction getAction(String actionName, Document document) { 
    if (actionName.equals("AddRSSItemAction")){ 
        return new AddRSSItemAction(); 
    } 
    else if (actionName.equals("RemoveRSSItemAction")){ 
        return new RemoveRSSItemAction(); 
 } 

    System.err.println("Specify an Invalid Action Name" + actionName); 
    return null; 
 }

編寫 RSS 更新 plugin.xml 檔案

plugin.xml 將會由 WAS 伺服器中的 Eclipse Plugin Framework 讀取,檔案提供的資訊用於將定製操作工廠類註冊到 WAS 伺服器的執行環境中。

其中主要的幾個 xml 元素包括

  1. plugin 節點:plugin.xml 檔案的根節點,提供了當前定製操作的基本資訊
  2. extension-point 節點:plugin 節點的子節點,用來提供擴充套件點的資訊。其中 id 屬性應該為 CustomWorkflowActionFactory
  3. extension 節點:plugin 節點的子節點,每一個定製操作工廠類都由一個 extension 節點來表示,其 point 屬性必須為 com.ibm.workplace.wcm.api.custom.CustomWorkflowActionFactory,以表示擴充套件的為 WCM 定製操作。 id 屬性用來為定製操作工廠類提供唯一標識,可以由使用者自己來設定。
  4. provider 節點:extension 節點的子節點,必須為提供的工廠類的完整類名

下面是本文使用的 plugin.xml 檔案


清單 4. plugin.xml 檔案示例

				
  
  
        
   
  
   
      
   	
 
 

最後還完成工具類 RSSTool 的編寫,由於不涉及定製操作的特有內容,本文不在此贅述,詳細程式碼可以參見附件。





回頁首


打包及部署 WCM 定製操作應用程式

WCM 允許將定製操作應用程式打包成 WAR 或 EAR 。由於打包成 EAR 擁有可以對其進行熱部署而不用重啟伺服器的優勢,所以我們使用 EAR 的方式進行打包和部署。採用 WAR 包的方式與此類似,但需要在部署完成後重新啟動應用伺服器來完成最終的部署。

使用 Eclipse 對定製工作流程操作打包

  1. 在工程管理器中選中前文中建立的 EAR 專案。
  2. 點選檔案 -> 匯出選單。
  3. 在匯出對話方塊中選擇 Jave EE->EAR file,單擊 Next 按鈕。


圖 8. 匯出 EAR 包檔案
圖 8. 匯出 EAR 包檔案

  1. 在目的檔案中輸入目標路徑,單擊 Finish 按鈕。

使用 WAS 管理控制檯部署定製操作應用程式

  1. 使用系統管理員登陸 WAS 管理控制檯。
  2. 在左側的樹型列表中選擇“應用程式”,“安裝新的應用程式”。
  3. 單擊“安裝”按鈕,在本地檔案系統路徑中填入上文所儲存的 EAR 檔案的完整路徑和檔名。
  4. 單擊“下一步”,進入安裝配置介面。
  5. 保持步驟 1: 選擇安裝選項的預設設定不變,單擊“下一步”。
  6. 在步驟 2: 將模組對映至伺服器中,勾選我們將要部署的模組“ RSS Custom Workflow Action ”,然後選擇 WebSphere_Portal,點選“應用”按鈕。使 RSS 更新定製流程操作對映到 Portal 伺服器中。


圖 9. 指定對映伺服器
圖 9. 指定對映伺服器

  1. 保持步驟 3: 為 Web 模組對映虛擬主機的預設設定不變,單擊“下一步”。
  2. 單擊完成按鈕,進行模組的安裝。
  3. 當出現安裝成功的提示後,選擇“儲存到主配置”。

啟動定製操作應用程式

  1. 在左側的樹型列表中選擇“應用程式”。
  2. 在企業應用程式的列表中,勾選我們剛剛安裝的 RSS Custom Workflow ActionEAR
  3. 單擊“啟動”按鈕。

RSS Custom Workflow Action 應用程式前出現綠色的三角圖示,表示已經正常啟動了。

現在我們在 WCM 的編寫介面中已經可以看到 RSS 更新定製操作了。





回頁首


在 WCM 中使用 RSS 更新定製工作流程操作

RSS 更新定製操作的使用策略是,當內容釋出時就將內容的資訊寫入 RSS 資料來源檔案,當內容到達過期階段時就將其資訊從 RSS 資料來源檔案中移除。

我們需要在內容庫中建立三個文字元件用來為我們的 RSS 更新定製操作提供必要的資訊。


表 5. 使用 RSS 更新定製工作流程操作需要的文字元件

文字元件名稱 描述
ContentRoot 用於生成內容 URL 的根地址
ChannelLink 本頻道的 URL 地址
RSSFileName RSS 資料來源檔案的完整路徑和檔名

同時需要我們建立具有如下三個工作流程階段的工作流程。


表 6. 使用 RSS 更新新定製工作流程操作所需的工作流程階段

工作流程階段 描述
草稿階段 內容處於編寫設計階段
釋出和新增 RSS 項階段 使新內容在 Web 站點中可見,並加入到 RSS 資料來源中
過期和移除 RSS 項階段 停止內容在 Web 站點中的可見狀態,並從 RSS 資料來源中移除

建立工作流程操作

  1. 在 WCM 編寫介面中,點選“新建”按鈕分別建立“釋出”和“過期”操作,並命名為 Publish 和 Expire 。
  2. 點選新建 -> 定製操作,並命名為 RSSAdd 。
  3. 點選選擇操作按鈕,彈出如圖 10 所示對話方塊。
  4. 選擇 Add RSS Item Action,並單擊確定按鈕。
  5. 點選儲存按鈕儲存 RSSAdd 操作。


圖 10. 選擇定製流程操作
圖 10. 選擇定製流程操作

類似的建立 Remove RSS Item Action 的工作流程操作,並命名為 RSSRemove 。

建立工作流程階段

  1. 點選“新建”按鈕建立草稿階段,為其命名為 DraftStage,授予 PublishApprover 組審批者的許可權並儲存。
  2. 點選“新建”按鈕建立 RSS 釋出階段為其命名為 RSSPublishStage 。將 Publish 和 RSSAdd 操作加入為進入工作流程執行的操作,授予 ExpireApprover 組審批者的許可權並儲存。
  3. 點選“新建”按鈕建立 RSS 過期階段為其命名為 RSSExpireStage 。將 Expire 和 RSSRemove 操作加入為進入工作流程執行的操作,授予 ExpireApprover 組審批者的許可權並儲存。

建立工作流程

  1. 在 WCM 編寫介面中,點選新建 -> 工作流程,併為其命名為 RSSWorkflow 。
  2. 點選選擇工作流程階段,將建立的 DraftStage,RSSPublishStage 和 RSSExpireStage 三個工作流程階段順次加入到 RSSWorkflow 中,並儲存。

這樣我們在使用 WCM 編寫 Web 內容的時候,使內容採用 RSSWorkflow 作為其工作流程。這樣當內容進入釋出狀態時,WCM 引擎就會自動地在 RSS 資料來源檔案中新增一個當前內容的條目;當內容離開發布狀態,進入過期狀態時,就會自動地從 RSS 資料來源檔案中將當前內容的條目移除。完成 RSS 資料來源的自動更新。生成的 RSS 資料來源檔案如下。


清單 5. 由 RSS 更新定製工作流程操作生成的 RSS 檔案示例

				
  
  
  
 my content site 
 http://www.mysite.com.cn 
  
  
 My first content 
 This is my first content 
 http://mysite.com/my+content+site/glsite/glsitearea/Myfirstcontent 
 4ec261004e3499768a6dff9a4cc3fba9 
  
  
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-610873/,如需轉載,請註明出處,否則將追究法律責任。

相關文章