本文共 10846 字,大约阅读时间需要 36 分钟。
(), 软件工程师, IBM 中国软件研发中心
(), 软件工程师, IBM 中国软件研发中心 (), 软件工程师, IBM 中国软件研发中心定制工作流程操作是 WCM 6.1 中引入的新功能,用于对 WCM 的工作流进行扩展。使用定制工作流程操作用户可以自定义代码,并作为工作流程的一部份得到执行,满足用户对工作流程的多种需要。本文将以一个更新 RSS 数据源的定制工作流程操作为例,介绍 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 组件在组件状态和组件安全性上具有以下区别:
由于有以上区别,应用工作流程可以使 Web 内容的发布具有更可靠的管理,尽可能的保证了 Web 内容在发布时的准确性。而且保证了网站对最终用户的展示是网站管理者和编辑者所期望的 Web 内容。在 WCM 中,工作流程的概念是由工作流程、工作流程阶段和不同的工作流程操作组成:
工作流程、工作流程阶段和工作流程操作之间的关系如图 1 所示。
|
用户定制操作是 WCM 6.1 版本中引入的新功能,使 WCM 的使用发生了巨大的变化。在 WCM 6.1 之前,用户只能使用 WCM 中内置的发布操作、过期操作、定时移动操作和电子邮件操作等几种内置的工作流程操作。而在 WCM 6.1 后,用户使用定制操作,可以开发特定于自己应用的代码,实现自身业务相关的操作,并嵌入到 WCM 的工作流程中,作为 WCM 工作流程的一部分得以自动执行。比如可以在发布前更改内容中图片的大小,对发布的内容进行索引等。极大的减少了内容管理的额外操作,满足了用户的多样化需求。
操作名称 | 操作介绍 |
发布操作 | 将 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 为例介绍主要配置的步骤。
Eclipse 会为我们创建出 WCM 定制工作流程操作项目和相应的 EAR 项目。在工程浏览器中如图 3 所示。
这样我们在 Eclipse 中创建好了 WCM 开发环境,接下来将进入定制工作流程操作的开发过程了。
|
在 WCM 6.1 中我们可以使用传统的菜单组件等方式进行 RSS 数据源的生成。但是因为在其中新引入了用户定制操作的功能,所以我们可以开发和使用 RSS 更新定制操作,在工作流程中自动完成 RSS 数据源的生成和更新。
WCM 定制操作开发的工程中,主要包括 Java 类和部署描述文件两种类型的文件。
首先创建我们工程中的 Java 类:
com.ibm.wcm.customworkflowaction.RSSTool:用于 RSS 数据源更新的工具类,提供创建 RSS 数据源文件,添加和删除 RSS 数据项的方法。
com.ibm.wcm.customworkflowaction.AddRSSItemAction:将新发布的内容信息写入 RSS 数据源的定制操作类。此类实现了 CustomWorkflowAction 接口,每一个 WCM 定制操作开发工程中至少需要包括一个实现此接口的 Java 类。
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 所示
编写 WCM 定制操作的主要工作是通过实例化 CustomWorkflowAction 接口,来实现的在其中定义的两个方法。
方法声明 | 说明 |
CustomWorkflowActionResult execute(Document document) | 定制工作流程操作的具体执行代码 |
java.util.Date getExecuteDate(Document document) | 指定当前工作流程操作执行的时间 |
其中 CustomWorkflowActionResult 接口中包括一个 String 类型的动作完成信息(将显示于工作流程的状态信息中)和一个用来指示 WCM 引擎接下来动作的 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 。
public Date getExecuteDate(Document arg0) { returnDATE_EXECUTE_NOW; } |
2 .实现 execute 方法
execute(Document document) 实现了定制操作的主要工作。我们实例化这个方法来实现读取当前内容的信息,并向 RSS 数据源文件中添加项目的功能,这将在当前动作执行时运行。其 CustomWorkflowActionResult 类型的返回值中,包括一个 String 类型的动作完成信息,将显示于工作流程的状态信息中;和一个 Directive 类型的信息,将用来指示 WCM 引擎接下来的动作。在我们的例子中是将返回 Directives.CONTINUE 使工作流程正常进行下去。
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 。具体的代码可以参见本文后面的附件。
WCM 定制操作使用了工厂方法的设计模式,用户通过工厂类将实现的定制操作注册到 WCM 引擎中,同时工厂类也会在 WCM 引擎需要时提供,定制操作类的具体属性和实例。
在编写定制操作的 Web 应用程序时,需要实例化 CustomWorkflowActionFactory 接口来编写工厂类。 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 方法的代码,具体的工厂类代码可以参见本文后面的附件。
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; } |
plugin.xml 将会由 WAS 服务器中的 Eclipse Plugin Framework 读取,文件提供的信息用于将定制操作工厂类注册到 WAS 服务器的运行环境中。
其中主要的几个 xml 元素包括
下面是本文使用的 plugin.xml 文件
最后还完成工具类 RSSTool 的编写,由于不涉及定制操作的特有内容,本文不在此赘述,详细代码可以参见附件。
|
WCM 允许将定制操作应用程序打包成 WAR 或 EAR 。由于打包成 EAR 拥有可以对其进行热部署而不用重启服务器的优势,所以我们使用 EAR 的方式进行打包和部署。采用 WAR 包的方式与此类似,但需要在部署完成后重新启动应用服务器来完成最终的部署。
RSS Custom Workflow Action 应用程序前出现绿色的三角图标,表示已经正常启动了。
现在我们在 WCM 的编写界面中已经可以看到 RSS 更新定制操作了。
|
RSS 更新定制操作的使用策略是,当内容发布时就将内容的信息写入 RSS 数据源文件,当内容到达过期阶段时就将其信息从 RSS 数据源文件中移除。
我们需要在内容库中建立三个文本组件用来为我们的 RSS 更新定制操作提供必要的信息。
文本组件名称 | 描述 |
ContentRoot | 用于生成内容 URL 的根地址 |
ChannelLink | 本频道的 URL 地址 |
RSSFileName | RSS 数据源文件的完整路径和文件名 |
同时需要我们建立具有如下三个工作流程阶段的工作流程。
工作流程阶段 | 描述 |
草稿阶段 | 内容处于编写设计阶段 |
发布和添加 RSS 项阶段 | 使新内容在 Web 站点中可见,并加入到 RSS 数据源中 |
过期和移除 RSS 项阶段 | 停止内容在 Web 站点中的可见状态,并从 RSS 数据源中移除 |
建立工作流程操作
类似的建立 Remove RSS Item Action 的工作流程操作,并命名为 RSSRemove 。
建立工作流程阶段
建立工作流程
这样我们在使用 WCM 编写 Web 内容的时候,使内容采用 RSSWorkflow 作为其工作流程。这样当内容进入发布状态时,WCM 引擎就会自动地在 RSS 数据源文件中添加一个当前内容的条目;当内容离开发布状态,进入过期状态时,就会自动地从 RSS 数据源文件中将当前内容的条目移除。完成 RSS 数据源的自动更新。生成的 RSS 数据源文件如下。
my content sitehttp://www.mysite.com.cn My first contentThis is my first contenthttp://mysite.com/my+content+site/glsite/glsitearea/Myfirstcontent 4ec261004e3499768a6dff9a4cc3fba9 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-610873/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14789789/viewspace-610873/