级别: 初级 冯 月利, 软件工程师, IBM 万 淑超, 软件工程师, IBM
2009 年 8 月 28 日 IBM WebSphere Application Server 从版本 6.1 开始提供对会话初始化协议 (Session Initiation Protocol, SIP) 的支持,支持基于 JSR 116 (SIP Servlet 1.0) 规范的 SIP 应用和 SIP/HTTP 聚合应用。
为满足电信、银行、保险和零售等行业日益个性化的业务需求,WebSphere Application Server 在版本 7.0 基础之上提供了 Communication Enabled Application 功能部件包。本文将系统地向您介绍 CEA 功能部件包中的新特性及其典型的使用场景。
引言
 | |
您可以点击如下链接,马上下载 WebSphere Application Server 软件 v7 版本,体验其为您带来的新特性及新功能。
更多关于 WebSphere Application Server 的技术资源,请参考:
|
|
IBM WebSphere Application Server 从版本 6.1 开始提供对 SIP 的支持,支持基于 JSR 116 (SIP Servlet 1.0) 规范的 SIP 应用和 SIP/HTTP 聚合应用,且支持基于 SIP 代理服务器的集群应用架构和高可用性。您可以从文章 WebSphere Application Server 6.1 对 SIP 的支持 和文章 利用 WebSphere Application Server 6.1 构建 SIP 集群应用环境及其性能调优 中了解 SIP、SIP 代理服务器和 SIP Servlet 的基本概念,以及 WebSphere Application Server V6.1 对 SIP 的支持。
WebSphere Application Server 产品从版本 6.1 到 7.0,根据实际通信业务需求增加了对很多 SIP 新规范的支持,从而更加全面、稳定地支持 SIP。这些规范包括 RFC 3263(定位 SIP 服务器),RFC 3311(SIP Update 方法),RFC 3325(对信任网络中断言标识的 SIP 私有扩展),RFC 3891 (SIP 替换 header),RFC 3911(SIP 联合 header),RFC 4475(SIP 严酷性测试)等。
Communication Enabled Application (CEA) 是指跟通信技术相关的一组 IT 组件,通常被用于 SOA 架构中,为传统的 IT 应用增加实时通信和交互功能,以提高组织的生产效率并提升用户体验。
为了满足电信、银行、保险和零售等行业日益个性化的业务需求,WebSphere Application Server 在版本 7.0 基础之上提供了一个可选功能部件包 Communication Enabled Application(以下简称 CEA 功能部件包)。
CEA 功能部件包提供的重要新特性包括:
-
它支持 JSR 289 (SIP Servlet 1.1) 规范,并向前兼容 JSR 116;它在 Java EE 5 的基础上支持基于注释 (annotation) 的 SIP Servlet 编程模型,提供应用路由器功能组件及 B2buaHelper 类,简化了 SIP 应用的开发。
-
它提供了基于 dojo 的 Widget,利用 Web Services、REST API 访问通信服务和基于标准的电话基础设施,能够很容易地将通信和交互功能嵌入到传统应用和业务流程中去,提供多样化的增值服务,让用户体验多模式通信,比如:点击呼叫、呼叫提醒、同步浏览、网络双向协作等。
-
它提供了一组样本应用,使得用户无需借助电话通信网络就可以进行系统原型测试。
接下来,本文还将对这些新特性做更加详细的介绍。
该功能部件包的特点在于,它使得普通 Java 开发人员能够快速方便地改进现有应用,使其具备通信功能,而无需精通通信技术;此外,它通过低成本实现的实时通信,提供多样化的交互增值服务,提升客户支持的体验。
本文首先介绍 CEA 功能部件包中几个典型的使用场景,以便您迅速感受 CEA 功能部件包带来的用户新体验,然后介绍 CEA 功能部件包的几个重要的新特性。
CEA 功能部件包使用场景
您一定很好奇,CEA 功能部件包能带给用户什么新体验,这里作者将向您介绍 CEA 功能部件包几个典型的的使用场景。
场景 1 和场景 2 中介绍的是点击呼叫、呼叫提醒、同步浏览 (Co-Browse) 这三个 Widget 的使用场景。CEA 功能部件包提供以下两种服务,利用 Widget,用户只需在 Web 页面中增加几行简单的代码即可使用这些服务。
-
电话访问 —— 借助于 REST API、web service 客户端和基于 Dojo 的 CEA widgets,提供与传统应用统一的交流平台,提高流程效率,减少通信错误,优化实时业务交互。
-
多模式网络交互 —— 通过共享会话(会话连接)的机制,允许位于不同地点的用户共同浏览同一网页。商务站点可以利用该服务,在保护内部站点信息的同时,提供产品支持和客户支持。
场景 3 介绍了应用路由器的使用场景。这是 JSR 289 规范引入的新组件,能够灵活、方便地帮助用户定制 SIP 服务的路由规则。
场景 1:点击呼叫 (Click to Call) 和呼叫提醒 (Call Notification)
利用 Dojo 工具包可以在应用中嵌入 CEA widgets。在场景 1 中,描述了客户和客服人员在浏览器端利用 widget 建立通话的过程。这里介绍两个 widget:点击呼叫 widget 和呼叫提醒 widget。
1. 首先,客服人员和客户都在浏览器中打开自己的页面,客服人员的页面上包含呼叫提醒 widget,客户的页面上包含点击呼叫 widget。
注意:CEA 功能部件包支持以下四种类型的浏览器(使用其他类型的浏览器,不能保证 widget 的正确显示):
-
Mozilla Firefox 3.0
-
Internet Explorer 7.0
-
Safari 3.2
-
Google Chrome 1.0
2. 客服人员输入自己的电话号码,激活呼叫提醒 widget(见图 1),表明自己处于工作状态,准备随时接听来自客户的电话(见图 2)。注意:在实验场景中,我们输入的都是通话者的 SIP URI 标识,而实际使用场景中,输入的是电话号码。
图 1. 呼叫提醒 widget – 客服人员到岗
图 2. 呼叫提醒 widget – 客服人员处于工作状态
3. 客户利用点击呼叫 widget 向客服人员发起呼叫请求:向点击呼叫 widget 中输入自己的电话号码,点击”call me” (见图 3)。
图 3. 点击呼叫 widget – 客户点击呼叫
4. 当客户呼叫到达时,客服人员接听电话,双方开始通话。 此时,客服人员的状态变成 Connected(见图 4),客户的状态也变成 Connected(见图 5)。
图 4. 呼叫提醒 widget – 客服人员被接通
图 5. 点击呼叫 widget – 客户被接通
场景 2:同步浏览 (Co-browse)
CEA 功能部件包允许用户发起一个 Co-Browse 会话,会话发起方可以控制对方的浏览器,引导显示特定的页面,甚至高亮显示页面上的元素。
1. 在含有同步浏览 widget 的页面上点击“Create”(见图 6),会产生一个 Invitation Link(见图 7)。
图 6. 同步浏览 widget – 创建邀请连接
图 7. 同步浏览 widget – 复制邀请连接
2. 复制 Invitation Link 中的 URI,通过 e-mail、短消息或者其他方式将该 URI 发给对方。
3. 协作方在自己的浏览器中打开收到的 URI。一旦 Co-Browse 会话建立,双方浏览器中会显示相同的程序窗口(见图 8 和图 9)。发起方有拥有操作的控制权,包括:“send page”、“follow me”和“highlight”。两边程序窗口的按钮分别显示了连接的状态和各自窗口的状态。
图 8. 同步浏览 widget – 发起方程序窗口(查看大图)
图 9. 同步浏览 widget – 协作方程序窗口(查看大图)
4. 发起方可以发送一个页面给协作方,然后使用“follow me”功能,带着协作方浏览一系列页面。发起方也可以使用“highlight”功能,高亮显示页面上的某个元素(见图 10)。
图 10. 同步浏览 widget – 高亮显示(查看大图)
5. 双方都可以主动结束协作会话,只需要关闭程序窗口,然后点击“End Collaboration”按钮(见图 11)。
图 11. 同步浏览 widget – 结束会话
场景 3:应用路由器 (Application Router)
为了提供多样化的服务,响应客户的某个 SIP 请求往往需要调用若干个相关的 SIP 应用,JSR 289 规范规定由应用路由器 (Application Router) 帮助 SIP 容器选择应用的调用顺序。场景 3 中,我们将向您介绍 CEA 功能部件包中缺省应用路由器 (Default Application Router) 的使用。
假设 SIP 容器里部署了 10 个 SIP 应用 sipapp1 ~ sipapp10,它们都能处理 INVITE 请求,部署人员可以根据需要灵活地配置路由规则。具体做法如下:
1. 在管理控制台,进入“环境 > SIP 应用路由器 > DefaultSIPApplicationRouter > server1”(见图 12), 缺省情况下, SIP 应用路由器以应用程序启动顺序作为路由标准。用户可以选择配置高级应用程序路由规则,配置基于属性文件路由规则。
图 12. 缺省 SIP 应用路由器
2. 如果用户选择利用 DAR 配置来设置路由规则,可以导入已有的 DAR 配置文件(见图 13-14),也可以选择新建一个 DAR 配置文件。然后保存之。
图 13. 缺省 SIP 应用路由器 – 导入 DAR 配置
图 14. 缺省 SIP 应用路由器 – 导入 DAR 配置
3. 图 15 展示的是导入的 DAR 配置文件定义的路由规则,包括,可调应用程序名称、处理的 SIP 消息类别、该应用订阅者标识、路由区域、路由修饰符、状态信息等。应用路由器的基本规则是,先从 Originating 区域开始进行调用,经过 Neutral 区域,最后才调用 Terminating 区域内的应用。其中,状态信息代表的是应用路由器每次选择的路由信息索引值,下次选择时,应用路由器会基于上次选择的路由信息索引值向前找到 sip_dar.properties 列表中的下一条 SIP 路由信息。所以,状态信息这个索引值也决定了应用的调用顺序。
图 15. 缺省 SIP 应用路由器 – DAR 配置文件
在场景 3 中,我们通过 DAR 配置定义了一组路由规则,按照规定的顺序调用各个应用依次处理 INVITE 请求。
当其中某个或某些应用被卸载之后,应用路由器会更新以上 DAR 配置,以保证跟 SIP 容器中实际部署的应用保持一致。
本文前面向您介绍了 CEA 功能部件包的三个典型使用场景,接下来将向您介绍支持实现以上场景的 CEA 功能部件包的几个主要特性及功能组件。
通信服务
CEA 功能部件包支持电话访问、网络协同浏览等多种通信模式,提高了企业应用和网络应用的交互能力。开发人员无需了解电话行业和 SIP 技术,就能够借助 CEA 功能部件包完成多样化的通信功能开发。
在 CEA 功能部件包中,通信服务是一个重要的基础服务,它为通过提供创建呼叫、协作会话共享、协作数据传输等基本操作有效地支持电话、网络多模式协作功能。通信服务具有两种不同的访问接口:REST 接口和 Web 服务接口,开发人员在企业应用开发中通过简单的接口调用,即可快速使用通信功能。其中,REST 接口通常用在基于 Web 的应用开发中,而 Web 服务的调用方式通常用于非 Web 方式的企业应用中。
通信服务
通信服务可以通过管理控制台显式的启用。
进入管理控制台,点击“服务器 > 服务器类型 > WebSphere Application Server > 服务器名”,在页面的右下角,点击“通信 > Communication-Enabled Applications (CEA)”。在配置页面上,选择“Enabled communications service”后通信服务即被启用(见图 16)。
图 16. 启用通信服务
通过 REST 接口访问通信服务可以执行两类不同功能的通信操作,电话访问操作和协同浏览操作。其中,电话访问操作包括:发起呼叫、结束呼叫、获取呼叫信息、注册呼叫提醒、轮询呼叫提醒、注销呼叫提醒六种操作类型;而协同浏览操作包括:启动协作功能、获取协作状态、发起协作会话、结束协作会话、获取数据、发送数据六种操作类型。通过 REST 接口访问时请求可以使用 JSON 和 XML 两种不同格式。本文前段所介绍的场景 1 和场景 2 中使用的多个 Widget 正是通过对这些操作的灵活调用构造而成。
对于 Web 服务接口,目前仅支持电话访问操作,包括创建通话、结束通话、启动通话监控会话、结束通话监控会话四个操作类型。开发人员可以访问地址 http://<hostname>:<port>/commsvc.rest/ControllerService?wsdl 查看通信服务的 Web 服务接口描述。
多模式协作
基于通信服务的 REST 访问接口,CEA 功能部件包中内置了多个 Web widget,提供多模式的协作功能。这些 widget 可以直接使用,也可以根据用户需求使用 Dojo 工具包,进行方便的定制、扩展。多模式协作涉及电话、网络及两者结合的交流方式,主要包括以下功能:
-
点击通话:用户点击网页中一个按钮,即可与另一用户建立电话连接。
-
通话提醒:当电话呼入时,为随后的网络协作创建会话服务。
-
协作窗口:为协作双方提供协作页面共享
-
双向同步表单:协作窗口的扩展,允许协作双方共同完成表单的填写工作,并在一方界面中屏蔽某些另一方提供敏感数据,保证数据私密性和安全。
-
点对点同步浏览:协作双方通过唯一 URI 地址建立协作会话,同步浏览共享页面,进行网络协作
-
呼叫同步浏览:协作双方分别通过点击通话和通话提醒建立协作会话,同步浏览共享页面,在电话交流的同时进行网络协作。
多模式协作功能的提供使得终端用户在访问应用时能够获得更有效的通信方式和更丰富的用户体验。同时,内置 Widget 的引入也极大程度的简化了开发过程,降低了实施成本。
样本应用
为方便用户体验 CEA 功能部件包的新功能,CEA 功能部件包自带了两个样本应用:Sample IP-PBX 和基于 Ajax 的 PlantsByWebSphere。您可以在 <WAS_HOME>/feature_packs/cea/samples/ 目录下找到它们的安装包:
-
Sample IP-PBX - commsvc.pbx.ear
-
PlantsByWebSphere - plantsbywebsphere/PlantsByWebSphere.ear
样本 IP-PBX (IP Private Branch eXchange) 是以 EAR 形式提供给客户做测试用的。实际场景中,IP-PBX 是一个业务电话系统,其作用是在数字网络上传输声音,并跟 PSTN(Public Switched Telephone Network) 电话网进行交互。
在 CEA 功能部件包中,要想运行 PlantsByWebSphere 样本应用,最简单的方法是,先安装这两个样本应用,然后利用 softphone 分别模拟通话双方。
您可以根据 <WAS_HOME>/feature_packs/cea/samples/plantsbywebsphere/documentation 下的文档安装和运行 PlantsByWebSphere 应用,体验本文描述的场景 1 和场景 2。
支持 JSR 289 (SIP Servlet 1.1) 规范
CEA 功能部件包提供对 JSR 289 (SIP Servlet 1.1) 的支持,同时兼容 JSR 116 (SIP Servlet 1.0)。JSR 289 相对于 JSR 116 来说,提供了更强大的功能,是一组更成熟的 SIP Servlet 规范,简化了 SIP 应用的开发。 本节将对 JSR 289 最主要的几个特性及其优势作进一步介绍。
应用路由器 (Application Router)
在实际应用中,一个完整的 SIP 服务通常是由多个 SIP 应用组合来完成的。所以,以什么顺序来调用这些 SIP 应用是一个大问题。
关于应用路由,在 JSR 116 中,每个 SIP 应用有自己的部署描述符 sip.xml,并与其密切绑定。如果当前 SIP 容器里部署了多个 SIP 应用,SIP 容器依次遍历每个 SIP 应用的 sip.xml,以找到能处理该消息的 SIP servlet,被 SIP servlet 处理过 SIP 消息有可能被再次发回到 SIP 容器, SIP 容器会继续依次遍历剩下 SIP 应用的 sip.xml 以找到下一个合适的 SIP servlet,以此类推。对于开发人员和部署人员来说,JSR 116 中的这种调用方式不灵活,也不可靠。SIP 容器负责应用路由,开发人员或部署人员却无法精确地控制和调整应用的调用次序和逻辑。
JSR 289 提出了应用路由器的概念,它是一个独立于 SIP 容器的组件,通过配套的、可动态配置的路由文件定义路由规则,帮助 SIP 容器以合理的顺序依次选择合适的应用服务于某个请求。这种方式相对于 JSR 116 中提供的路由方式更合理、更灵活,主要表现在以下几个方面:
-
开发人员在开发某个应用时,只需要专注于自己的处理逻辑,无需考虑或定义当前应用的接口应用及其之间的依赖关系。
-
部署人员来定义应用路由规则。这样做比较合理,因为部署人员最了解用户的角色和权限,应用路由器可以利用任何外部信息,比如:部署人员维护的权限数据库、订阅服务等,帮助选择正确的应用。
-
应用的选择是由应用路由器参考其部署人员定义的路由文件做到的,也就是说,调用顺序是可以由部署人员通过修改路由文件灵活控制的,甚至可以将请求路由到另一个 SIP 容器去。而不像 JSR 116 中那样,SIP 容器只能依次遍历每个应用的 sip.xml 来做选择。
-
应用和应用路由的松耦合,使得部署人员能够基于模块化的组件构造更复杂的服务,简化了应用集成的流程,并提供了丰富的服务。
注意,应用路由器只负责路由,不实现任何应用逻辑,不能修改 SIP 请求,也不能发送响应。
CEA 功能部件包中,可以通过以下三种方式来设置应用路由策略:
-
使用缺省应用路由器 (Default Application Router, DAR)
-
使用应用启动 (startup) 权重:如果没有设置其他路由规则,缺省使用该设置。
-
使用 DAR 属性文件:在管理控制台,设置定制属性 javax.servlet.sip.ar.dar.configuration 来标识 DAR 属性文件的位置,或者导入一个 DAR 属性文件。
-
使用定制的应用路由器 (Custom Application Router, CAR)
-
在管理控制台,设置定制属性 javax.servlet.sip.ar.spi.SipApplicationRouterProvider 来标识定制应用路由器的实现类路径。
此外,除了 z/OS,在其他所有平台上,CEA 功能部件包支持 WebSphere 集群环境下的应用路由。
注释 (Annotations)
JSR 289 引入了一种基于注释的 SIP Servlet 编程模型,可以快速、方便地开发应用。通过注释,您可以方便地将元数据 (metadata) 嵌入到应用中去,而在以前,这些信息需要在部署描述符文件进行设置。通过注释,您还可以方便地向应用中注入资源,比如 SipFactory 或 SIP 实用类等。
这里,需要注意的是,JSR 289 只适用于 Java SE 5 或 Java EE 5 以上的版本。也就是说,如果想在代码中使用注释的方式,sip.xml 的版本必须是 SIP servlet 1.1,web.xml 的版本必须是 HTTP Servlet 2.5。
JSR 289 引入的几个常用的注释有:
-
@SipServlet:表明某类是 SIP servlet,对应部署描述符里的 <servlet> 元素。
-
@SipApplication:在 package-info.java 中使用该注释,除非为某个 sip servlet 设置了 @SipServlet(applicationName),否则包里的所有 sip servlet 都属于同一个应用。对一个 SAR 或者 WAR 文件而言,通过注释,或者通过部署描述符,只能注册一个 Sip Application 到 SIP 容器。
-
@SipListener:将某类标识为一个 Listener,对应部署描述符里的 <listener> 元素。
-
@Resource:将 SipFactory 等资源注入到 Java EE 组件并使用之,而不需要像 JSR 116,只能在 HTTP servlet 中通过 servlet context 查找这些资源。
聚合应用 (Converged Applications)
从 WebSphere Application Server V6.1 起,就支持由 SIP Servlet 与 HTTP Servlet 组合而成的聚合应用。聚合应用可以被打包成 SAR、 WAR 或 EAR 文件。在 CEA 功能部件包中,允许将 SIP Servlet 与其它的 Java EE 组件(例如 EJB)组装成聚合应用,打包成 EAR 文件。
在聚合应用中,Java EE 组件主要通过 SipFactory 接口与 SIP Servlet 协同工作,比如产生 SIP 请求等。JSR 116 的 SIP/HTTP 聚合应用依靠 HTTP Servlet 能访问共享 servlet context 这一特性找到 SipFactory,但这并不能应用到非 servlet 组件。所以,JSR 289 利用 @Resource 注释,使得 SIP 容器依赖注入 SipFactory 对象,以供 EAR 里的其他 Java EE 组件使用。也就是说,利用依赖注入的方式,能够允许非 servlet 应用访问到 SipFactory 资源。
除了 SipFactory,Java EE 组件有时需要访问应用会话 (application session)。这里,应用会话指的是逻辑上相关的一组会话,用来存放应用的状态信息。比如:多方会议应用将多个 SIP 连接集成到单个应用中;点击呼叫应用将 SIP 会话和一个 HTTP 会话连接起来,集成到一个 application session 中去。在 JSR 289 中,同样地,利用 @Resource 依赖注入 SipSessionUtil 对象,就可以通过该对象查找到要访问的应用会话。
B2buaHelper 类
B2BUA 这个 SIP 应用通常被用来转换或转发请求,是 SIP 应用中常用的模式,但在 JSR 116 中实现起来容易出错。JSR 289 提供 B2buaHelper 类,使得实现 B2BUA 的模式变得非常容易,此外,它还能为新来的请求创建拷贝,根据需要修改 From/To 等头部信息,并且自动维护 B2BUA 两端会话间的连接。
其它
此外,CEA 功能部件包 还支持 JSR 289 的其他一些特性,比如:Session key based targeting,Parameterable 接口等。想了解更多关于这些特性的信息,请参考 CEA 功能部件包信息中心。
异步调用 (Asynchronous Invocation API)
理想情况下,为避免同步和锁的问题,与某 SipApplicationSession 相关的所有事件都被传到同一服务器做处理。但有些情况下,外部事件可能需要把工作从集群中的某个服务器移交到另一个服务器,比如,去改变另一个服务器上 SIP 会话的状态。
异步调用 API 也叫异步工作分发 (asynchronous work dispatcher),是 CEA 功能部件包提供的 IBM 特有的 API,其作用是允许应用根据 SipApplicationSession ID 分发任务给某服务器,并确保该任务在服务器的某线程中运行。
异步调用 API 的好处在于:
-
最多两个服务器参与异步调用过程。一个负责获取和触发任务,触发该任务的请求可以来自非 SIP 应用,比如 Web 服务客户端应用。另一个负责处理在某 SipApplicationSession 内执行任务。
-
异步调用允许工作在线程安全模式。这样确保只有一个线程处理跟某个 SipApplicationSession 相关的所有消息,因为也没必要对会话的访问进行同步。
-
异步调用提供了一个可伸缩的解决方案。当更多的服务器加入到集群中时,没有性能影响。
-
只有当需要时,才使用跨服务器的调用,以保证更优的性能。
对开发人员来说,要使用异步调用 API,需要扩展以下两个类(想了解详细信息,请参阅 CEA 功能部件包信息中心):
-
com.ibm.websphere.sip.AsynchronousWork
-
com.ibm.websphere.sip.AsynchronousWorkListener
总结
本文从三个典型的使用场景开始,介绍了 CEA 功能部件包的几个重要的新特性,帮助用户了解如何利用 CEA 功能部件包在 WebSphere Application Server V7 基础之上快速构建基于通信的多样化服务和协作模式。 2009 年 7 月 31 日,IBM 正式发布了 IBM WebSphere Application Server V7.0 Feature Pack for Communication Enabled Application,需要注意的是,安装该功能包的最低要求是 WebSphere Application Server 版本至少是 7.0.0.5。
参考资料 学习
获得产品和技术
讨论
作者简介  | |  | 冯月利:软件工程师,2005 年加入 IBM, 一直在 IBM 软件开发中心从事 WebSphere 应用服务器系统测试工作,曾经测试过的版本包括:WAS 6.1、Web Services Feature Pack、 EJB 3.0 Feature Pack、WAS 7.0、CEA Feature Pack 等。感兴趣的技术领域包括 SIP、Web Services、EJB 3.0/JPA,Security 等的问题诊断和 WebSphere 应用服务器的性能调优。除了系统测试的工作,她还参与 WebSphere 应用服务器客户支持和 WebSphere 社区工作,包括讲授 WebSphere 课程、WebSphere 问题诊断等。目前已通过 WebSphere 应用服务器高级管理员认证。 |
 | |  | 万淑超:软件工程师,2008 年加入 IBM 中国开发实验室,一直从事 WebSphere 应用服务器以及相关功能部件包的系统集成测试工作,也同时参与开源项目 Tuscany 的测试工作。感兴趣的技术领域包括 SCA,Web2.0,SIP 及Java EE。曾参与 WebSphere 应用服务器管理课程的培训工作,具有一定的教学经验。目前已通过 WebSphere 应用服务器网络部署版 6.1 核心管理的认证考试。 |
对本文的评价
|