本部分描述如何使用 SOA 中的交互与协助服务场景实现模式来解决与帐户开立项目案例研究相关的业务和 IT 挑战。
为了使 JKHLE 采用 SOA 做好准备,企业架构师 Edmund Smythe-Barrett 参加了许多 SOA 培训活动,包括深入学习在 IBM® SOA 基础和 SOA 场景中获得的知识。
Edmund 确定团队可以将交互与协作服务 SOA 场景用于帐户开立项目。对于帐户开立流程来说,理想的情况是将与服务和流程进行交互的 Portlet 聚合到统一的门户页面中。门户还可以基于用户角色来识别服务和流程交互的上下文。
一次在接受首席技术架构师 Sandy 的检查中,Edmund 介绍了主要功能(请参见图 2)。Sandy 很快就能看到,通过提供可在各销售渠道中使用的通用用户界面,门户基础结构将极大地简化现有环境中各种各样的接口和系统。
图 2 交互与协作服务 SOA 场景的主要功能

Sandy 就对现有组件和系统的支持、与后端系统的交互以及安全性这三个方面提出了一些问题。Edmund 解释说建议的解决方案体系结构将利用经验证的 IBM SOA 参考体系结构和 SOA 场景来解决提到的这些问题。
图 3 概要介绍了交互与协作服务 SOA 场景中所用的 SOA 参考体系结构中的关键服务(黑色文本)。Sandy 了解到建议的解决方案主张重用现有组件和系统,而不是一个“拆除和替换”解决方案后终于松了一口气。
图 3 交互与协作服务 SOA 场景中所用的 IBM SOA 基础服务

在下面几个部分中,我们将详细介绍案例研究解决方案元素。这些元素与以下交互与协作服务 SOA 场景实现模式相对应:
- 使用简单的 Portlet 聚合和调用服务
- 使用 AJAX Portlet 的基于富 Web 的应用程序
- 将后端服务与门户集成
- 流程门户
- 托管客户端
- 使用 Web 2.0 实现组织协作
- 安全门户
注意:“安全门户”是可在 SOA 安全管理场景中找到的一种解决方案模式。将安全门户基础结构与交互与协作服务 SOA 场景一起使用是极为常见的。
使用简单的 Portlet 聚合和调用服务
由于各种系统和用户界面并未充分集成,因此不同销售渠道中的客户在帐户开立流程中可能会获得不一致的体验。需要为各销售渠道提供通用用户界面和体验。此外,还需要在 Web 仪表板中查看新帐户在帐户开立流程中的状态。
建议的解决方案
建议的解决方案包括针对以下 Web 应用程序的基于门户的用户界面增强功能:
- 公共门户
公共门户是一种 Web 应用程序接口,可供客户链接到帐户开立流程。
- 帐户开立仪表板
帐户开立仪表板可供客户服务代表和管理层监视帐户在帐户开立流程中的状态。
Edmund 已确定,更新公共门户以使用 SOA 原则添加 Account History 和 Chat Portlet 将是快速实现投资回报 (ROI) 的一种方式。Account History Portlet 将允许客户更快地获取关于其帐户的信息。Chat Portlet 为客户提供了方便快捷的协作能力,使客户能够快速从客户服务代表 (CSR) 那里获得帮助。Chat Portlet 即时消息 (IM) 协作能力是通过使用 IBM Lotus® Sametime®提供的。
Sandy 已决定获得定义帐户开立仪表板需求的权利。Sandy 确定仪表板将包括以下简单的 Portlet:
- 帐户状态 (Account Status)
此 Portlet 将列出新开立的帐户在帐户开立流程的每个阶段的存在时间和状态。
- 帐户历史记录 (Account History)
此 Portlet 将显示详细的帐户信息。
- 信用报告 (Credit Report)
此 Portlet 将显示客户信用信息。
- 热门列表 (Hot List)
此 Portlet 将用于标记需要注意的帐户。
注意:仪表板指的是类似于汽车仪表板的一种用户界面,旨在以易于读阅、直观的格式显示信息。
Sandy 记录了对仪表板的要求,并将设计和组装仪表板的任务分配给门户开发人员 Ming Chow。完成仪表板设计之后,Ming 在设计阶段以方框图的形式向 Sandy 提供了 Portlet 的仪表板布局(请参见图 4)。
图 4 使用简单 Portlet 的帐户开立仪表板

Ming 解释了每个 Portlet 的高级设计。帐户状态 Portlet 可与服务进行交互以从数据库中检索帐户状态,并将相关信息显示到一个可滚动的窗格中。当用户在帐户状态 Portlet 中选择一个帐户时,此信息会显示在信用报告内,然后通过使用 WebSphere Portal Property Broker 功能检索此帐户信息,可立即更新帐户历史记录 Portlet。WebSphere Portal Click to Action 功能用于从帐户状态 Portlet 中的过时列表中选择帐户,然后将所选的帐户添加到热门列表 Portlet 中。
开发组织已决定标准化用于在 IBM Rational Application Developer 上组装 Portlet 的工具,并将 IBM WebSphere Portal 和 Lotus Sametime 用于部署基础结构。
在后续的版本中,Ming 将使用 IBM WebSphere Portal Dashboard Framework 评估更复杂仪表板的使用,IBM WebSphere Portal Dashboard Framework 添加了特定于仪表板的功能,如强大的警报模块和图表。
使用 AJAX Portlet 的基于富 Web 的应用程序
在 Ming 开发了基于门户的帐户开立流程的原型之后,他认识到需要为频繁刷新的门户页面提高 Web 应用程序性能。当用户在页面上单击链接或进行一些其他操作时,门户会处理页面上目标 Portlet 的 actionPerformed() 方法和每个 Portlet 的 doView() 方法。门户页面是聚合的,并且结果页面将以 HTML 文档的形式呈现在用户的 Web 浏览器中。本地处理和缓存减少了整页刷新的开销。
建议的解决方案
Edmund 和 Ming 研究了异步 JavaScript™ 和 XML (AJAX) Portlet 的使用对提高门户页面刷新性能的影响。他们确定,团队可以使用 AJAX 在后台处理许多用户交互事件,然后更新门户页面的各个部分,而无需完整的门户刷新周期。此技术将通过增加对单个操作的响应大大改进用户体验,同时显著提高应用程序的总体性能。JavaScript 是一种脚本语言,可用于从 Web 浏览器所用的 XMLHttpRequest 对象中检索数据。
使用二级 AJAX 控制器(如 Servlet 或 Web 服务)可以进行更强大的应用程序代码分离。可以使用多种技术来实现 AJAX 服务器目标,包括 Portlet、Portlet WAR 或独立 Servlet WAR中的 Servlet,或者 Web 服务。
Edmund 决定将整个 AJAX 控制器设计用于帐户开立流程应用程序,并且让 AJAX 控制器来处理所有基本用户输入操作和分段显示更新。门户 actionPerformed() 方法仅用于页面级转换或处理主要状态更改。Edmund 确认他们将用于部署基础结构的 IBM WebSphere Portal 是支持 AJAX 的。
将后端服务与门户集成
当前环境中有许多全异的后端系统和部门门户。各个销售渠道在用户界面和体验方面存在许多不一致性。帐户开立流程需要与多个后端系统进行交互,如 SAP®、Siebel® 和 CICS®。当前用于访问这些后端系统的方法要求使用专有技术,这使得更改或重用都很麻烦。
Sandy 已将设计基于 SOA 的解决方案的任务分配给了 Edmund,此解决方案将提供通用门户用户界面,允许使用内部和外部服务访问许多全异的后端系统。
建议的解决方案
建议的用于将全异的后端系统与通用门户用户界面集成的解决方案要求使用多种解决方案模式来创建联合门户。
Edmund 对可用于访问 SAP 和类似系统的集成方法进行了分析。Edmund 确定主门户可以通过使用 Web Services for Remote Portlet (WSRP) 访问 SAP 企业门户。WSRP 允许远程 SAP Portlet 并入主门户。
注意:WSRP 定义了一组经 OASIS 批准的用户界面和网络协议。WSRP 使门户能够显示远程承载的 Portlet 以及内部门户页面,而无需进行额外的编程。
为了在门户中提供 SSO 功能,WSRP 解决方案要求每个门户都知道用户 ID。可以通过使用通用用户存储库满足这一要求,具体做法是,使用 IBM Tivoli® Identity Manager 和 Tivoli Directory Integrator 这样的产品在两个存储库中创建相同的用户 ID,或通过使用 IBM Tivoli Federated Identity Manager 在整个企业中映射标识。
Edmund 与 Ming 紧密协作来应用图 5 中所示的虚拟提供者模式。
图 5 用于将后端服务与门户集成的虚拟提供者模式

此解决方案模式包括以下元素:
- 使用代理与虚拟服务提供者后端系统进行通信。
- 使用适配器将服务提供者协议转换为门户服务使用者所需的协议。
- 将代理和适配器封装在 Facade 中。
- 使用适配器将所用的协议转换为门户希望、需要,或者已经在服务描述或契约中指定的协议。
- 将代理和适配器封装到 Facade 中。经过封装的适配器将使用现有的 API 重用通信方法。
- 将 facade 用作服务使用者与后端系统进行通信。
注意:还可以使用其他方法来访问 SAP 后端系统,如直接使用 SAP Web 服务、使用 SAP 适配器,以及使用 WebSphere Portal Factory Builder for SAP use of BAPI® 远程函数。
Edmund 考虑利用服务集成器模式和远程服务策略模式来进一步增强带有门户的后端集成服务所使用的体系结构。服务集成器模式通过使用服务集成器组件引入了集成和管理层。服务集成器为访问其他冗余服务提供了单一访问点。服务集成器为构建耦合程度更松散、可重新配置的体系结构提供了良好开端。
远程服务策略模式创建了一个可重新配置的服务层,不需要进行硬编码更改。这一模式的变体包括能够通过部署服务注册中心动态更改服务提供者。发现和协商流程是在不受门户控制、但可以通过外部服务代理程序访问的注册中心中发生的。
Edmund 决定 JKHLE 将实现远程服务策略模式以提供可重新配置的服务层。此模式将通过部署 IBM WebSphere Service Registry and Repository 来实现。
最后,Edmund 和 Ming 一致认同 JKHLE 可以利用 ESB 模式在门户和后端服务之间提供中介支持。此模式将通过部署 IBM WebSphere® Enterprise Service Bus 来实现。