IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

利用 Application Server Toolkit 6.1 在 Websphere Application Server 6.1 上开发 SIP 应用

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

赵 叔能 (Suknang@163.com), IBM中国广州分公司软件部实习生

2006 年 12 月 01 日

IBM 公司的软件产品 Websphere Application Server 6.1 版本中已经实现了符合 JSR 116 标准的 SIP Servlet 支持。本文通过简介 SIP 相关背景、描述利用 Application Server Toolkit 6.1 开发 SIP Servlet 的步骤,并建立一个简单的企业应用来说明如何利用 WAS 6.1 的这一新特性为构建企业应用服务。

引言

SIP (Session Initiation Protocol) 是一种用于在IP网络上建立对话的轻量级协议。该协议使用简单的文本命令管理呼叫控制信息。该协议的可扩展性、可互操作能力、简单性使得它在网络应用中成为追逐的标准。随着3G应用对SIP的需求增大,很多设备厂商都开始将其下一代网络的协议标准向SIP方向倾斜,包括思科,北电网络都在很多年前取得了较大的提高。

与此同时,J2EE平台在企业级应用中获得的成功也使得部分的电信服务企业转向了使用J2EE平台。随着Java平台越渐成熟,更多的电信网络的业务将可以使用Java平台实现。由于电信网络平台的特点,使得原来的电信业务基本很难与J2EE平台的业务相交互。为此,Java标准定制组织JCP在近年来为Java 平台制定了相关的标准以支持SIP协议。使得Java 平台能够为电信网络业务服务。

IBM公司的软件产品Websphere Application Server 6.1版本中已经实现了符合JSR 116标准的SIP Servlet支持。本文通过简介SIP相关背景、描述利用Application Server Toolkit 6.1开发SIP Servlet的步骤并建立一个简单的企业应用来说明如何利用WAS 6.1的这一新特性为构建企业应用服务。





回页首


1. 关于的SIP简介

SIP 出现于二十世纪九十年代中期,源于哥伦比亚大学计算机系副教授 Henning Schulzrinne 及其研究小组的研究。

Schulzrinne 本来打算编写多方多媒体会话控制 (MMUSIC) 标准。1996 年,他向 IETF 提交了一个草案,其中包含了 SIP 的重要内容。1999 年,Schulzrinne 在提交的新标准中删除了有关媒体内容方面的无关内容。随后,IETF 发布了第一个 SIP 规范,即 RFC 2543。虽然一些供应商表示了担忧,认为 H.323 和 MGCP 协议可能会大大危及他们在 SIP 服务方面的投资,IETF 继续进行这项工作,于 2001 年发布了 SIP 规范 RFC 3261。此标准即为现行SIP的基础。

SIP 能够连接使用任何 IP 网络(有线 LAN 和 WAN、公共 Internet 骨干网、移动 2.5G、3G 和 Wi-Fi)和任何 IP 设备(电话、PC、PDA、移动手持设备)的用户,从而出现了众多利润丰厚的新商机,改进了企业和用户的通信方式。基于 SIP 的应用,如 VOIP、多媒体会议、push-to-talk(按键通话)、定位服务、在线信息和 IM,即使单独使用,也会为服务提供商、ISV、网络设备供应商和开发商提供许多新的商机。不过,SIP 的根本价值在于它能够将这些功能整合起来,形成各种更大规模的无缝通信服务。

使用 SIP,服务提供商及其合作伙伴可以定制和提供基于 SIP 的组合服务,使用户可以在单个通信会话中使用会议、Web 控制、在线信息、IM 等服务。实际上,服务提供商可以创建一个满足多个最终用户需求的灵活应用程序组合,而不是安装和支持依赖于终端设备有限特定功能或类型的单一分散的应用程序。

通过在单一、开放的标准 SIP 应用架构下合并基于 IP 的通信服务,服务提供商可以大大降低为用户设计和部署基于 IP 的新的创新性托管服务的成本。它是 SIP 可扩展性促进本行业和市场发展的强大动力。





回页首


2. SIP与JAVA平台

随着Java平台应用的普及,JCP也定制了与SIP相关的规范,使得开发人员能够利用Java平台进行SIP的开发。这里列举了三个与SIP联系最紧密的规范:

1. JAIN SIP:JSR 32中制定的规格说明。这是由Sun Microsystems领导的小组进行编写的。组内也包括了其他厂商成员,如思科,北电等。这一规范主要是针对J2SE平台开发SIP应用的API规范。

2. SIP Servlet:JSR 116中定义的SIP Servlet规格说明,是由Dynamicsoft公司领导的。参与的主要公司包括IBM,Ericsson,Nokia Networks, Nortel Networks, Siemens, Sun, 和Ubiquity等。 该规范主要是针对在J2EE应用服务器上开发SIP应用的情况。此规范是本文中使用到的Websphere Application Server 6.1所支持的。

3. SIP for J2ME: JSR 180中定义的规范。由Nokia公司所领导。参与的主要公司有Cisco Systems, Motorola, Panasonic, Siemens AG和Sun Microsystems等。该规范主要是制定在手持设备上开发SIP应用的接口及相关内容。





回页首


3. SIP Servlet简介

SIP Servlet API规范制定了一个用于在网络中开发SIP应用的环境。它主要是规范了在J2EE应用服务器上支持SIP的各项内容。它是在HTTP Servlet基础上建立起来的,开发的步骤与部署的方式与HTTP Servlet相类似。SIP Servlet 规范除支持在RFC 3261中制定的最基本的SIP功能以外,还外加支持了RFC 3265中制定的事件通知框架和RFC 3428中建立的消息方法。SIP Servlet的核心是可以作为一个终端用户也可以作为代理或者注册服务处理SIP的信令。SIP Servlet的API设计是使得开发人员可以完全控制整个SIP的信令,同时也隐藏了大部分SIP的细节。使得开发人员可以集中精力处理业务逻辑的代码,而不需要关心过多的复杂的非核心过程,如消息的解析等。SIP Servlet容器管理大部分SIP需要使用到的资源,如:监听端口、线程、对话和会话状态等。开发人员建立的应用可以作为user agent、代理(proxy)或者注册器(registrars)。由于SIP Servlet的调用需要大量的访问SIP消息的头部,而我们并没有独立于SIP的信令API去处理这些信息,因此在部署的时候需要一个与HTTP Servlet部署描述符相类似的文件。这个描述符最主要的功能是声明应用中用到的Servlet以及定义调用这些Servlet的规则。这些规则是分发请求的最主要依据。SIP Servlet允许多个Servlets同时响应一个请求。但这些多规则匹配的选择则留给应用本身去定义了。一个Servlet的应用可以同时包含有SIP和HTTP的组件。这种同时包含SIP与HTTP的应用,他们之间是可以共享会话状态的。SIP Servlet在安全性支持上是同时支持声明式和编程式的方式定义安全规则。编写SIP 应用的工作其它已经非常简便。容器已经帮我们处理好了解析SIP 消息的工作以及存储会话状态等。我们只需要集中力量在处理消息响应的业务逻辑。利用OOP的API去处理SIP的消息。Websphere Application Server v6.1在这方面提供了相当良好的编程开发与部署运行的环境。借助WAS在业界取得的成功,我们可以利用WAS稳定、高效的J2EE平台,构建起我们的SIP应用。





回页首


4. 在AST6.1中开发SIP Servlet步骤

这里所描述的是如何创建一个包含SIP Servlet的企业应用。主要是介绍了如何在AST中创建SIP Servlet的通用步骤,以作为一个简单的入门。这里不涉及复杂的SIP业务逻辑。只是告诉读者可以在哪里编写他们的SIP业务逻辑。

首先我们建立一个可以部署到应用服务器的企业应用项目。接着,我们在New ->Other 中选择创建一个SIP 的Converged Project 如图所示。这一类别的项目可以同时包含有HTTP Servlet 和SIP Servlet。


图

紧接下来我们将所创建的项目加入到一个企业应用项目中。最后可以在J2EE的Perspective下看到如图所示。


图

那么现在我们就可以着手创建一个SIP Servlet了。选择项目如图所示。


图

填写Java类的名字及包名的步骤与创建其它的Java类相同。在下一步中,我们可以在Mappings这里设置激发这一SIP Servlet的条件。我们可以通过详细设置不同的Mappings条件,如利用逻辑的运算符,使不同的请求由不同的SIP Servlet响应。下图所示的情况是该SIP Servlet在接收到INVITE或者MESSAGE的消息时调用。注意到JSR116标准中所说的,我们可以编写多个SIP Servlet同时处理一个SIP消息,其调用结果是与这些Servlet分开在不同机器上处理同一条消息的结果相同。


图

接着选择生成的方法框架。


图

我们分别在doRequest 与doMessage方法中添加相应的输出与回复。这里要演示的是一个SIP消息过来所处理的顺序。容器在解析完消息后,会调用doRequest方法。值得注意的是,我们如果要扩展我们的SIP命令则可以在这个方法中实现。最后是必须要调用基类的doRequest方法将基本的SIP消息分发在不同的处理函数上面。这里的doMessage方法只是简单的把消息的内容显示出来,并返回一个200 OK的回复。


图

接着我们要在该项目的Web 部署描述文件中添加上面我们已经建立了的Servlet的信息。这一步的配置是必不可少的,否则应用服务器将找不到相应的SIP Servlet进行响应。我们双击Converged Project的web部署描述符,如图中所示的选择部分。


图

打开后我们选择Servlet页面,然后按Add。即出现如下图所示,由于我们已经创建了SIP Servlet的类,所以我们选择Use existing Servlet class 一项。


图

接着我们填写关于Servlet的URL Mapping。填写的名字选择我们在SIP部署描述符中存在的SIP Servlet的名字。


图

最后要选择Servlet使用的Java Class,即我们已经编写完成的一个Java类,并且选择Load on startup。


图

构建完成Servlet的相关信息以后,可以将整个企业应用部署到服务器上。部署的方法可以选择直接在AST中使用Server配置中直接Publish 到服务器上。也可以利用WAS应用服务器的控制台进行部署。部署过程中对SIP包的设置参数选择默认即可。

最后我们使用sipsak工具测试该SIP Servlet。这里只是简单的发送了一个带MESSAGE命令的信息,内容为hello 到服务器。服务器端的显示表明了我们编写的SIP Servlet响应的过程。


图

上面所述的就是建立一个SIP Servlet 的过程。总观整个构建的流程,我们可以清楚的看到开发一个SIP的服务器端应用是很简易的。而且,服务器已经帮助我们将SIP的消息转换成一种消息驱动的开发模式,让我们可以集中关注在我们的业务逻辑上而不是将精力花费在SIP这个协议的本身。此外,SIP Servlet提供的API也更好的利用面向对象的方式给开发人员去处理各种的SIP请求与应答。接下来我们利用SIP Servlet结合J2EE EJB组件构建一个简单的应用。





回页首


5. 与EJB相结合的简单应用

5.1 应用背景

现代企业的通信中心一般都集成各种复杂的应用。作为应用逻辑处理中心的应用服务器来说,它应该与种通信的设备相连,使得企业级的应用能够与其它通信网络的应用相集成。SIP正正很好的提供了这一集成的接口。使得我们的J2EE应用服务器可以与其它基于IP网络通信的应用、设备,以及通过网关相连的传统电话网设备实现互操作。

自动的呼叫分发响应是现代企业在其IT设施中应该具备的一项基本业务功能,而且这个分发的中心,会根据呼叫的相关信息,与后台的CRM、HR、资源管理系统等作集成应用。与此同时,企业中不同的角色可以加入到这一个呼叫的控制中心。如呼叫管理员可以定制由哪些人员接听特定的服务号码呼入、呼叫记录可以帮助企业处理与客户联系相关的信息。

这里的应用例子演示,主要着重于呼叫中心的三个角色:

1. 管理员:负责管理应用程序后台及配置呼叫分派。

2. 接听员:负责接受分派的呼叫,为客户提供服务。

3. 客户:呼叫端,呼叫企业的服务号码。

本文所建立的应用例子主要是演示利用SIP Servlet与后台的EJB结合,做到可控制的呼叫分派的功能。这个应用的简单例子完成的功能是:

1. 接听端向应用服务器注册。

2. 管理员可以通过Web访问分配呼叫分派。这里的应用为了简化,只允许为一个服务配置一个接听端。

3. 呼叫中心负责呼叫分派和记录。

4. 管理员可以通过Web访问得到相关的呼叫记录及客户(呼叫端)的信息。

5.2 实验系统的架构

实验的架构如下图,其中使用到的组件是:

1. 应用服务器:Websphere Application Server V6.1 ND ;

2. 数据库: Derby 10.0;

3. 客户端使用JAIN SIP API v1.1包。

客户端利用JAIN SIP API建立一个简单的应用程序模拟SIP 电话的功能。整个操作的流程如下:

①. 接听端向服务器进行注册。

②. 管理员通过Web页面进入管理,配置服务与接听端的对应关系,即进行呼叫分派的配置。

③. 客户端向服务器发送呼叫请求。

④. 服务器端根据已设定的服务对应关系转发请求。并记录相应的呼叫信息。

⑤. 管理员通过Web页面进入管理,察看与管理呼叫及客户信息。

此外,我们还可以利用Web服务将整个呼叫控制的工作加入到SOA中,与其它的应用进行整合。


图

5.3 关键程序片段

接听端注册是指接听服务的应用, 可以包括PC上的SIP 电话或者支持SIP的电话座机,向服务器进行注册。发送一个SIP定义的REGISTER 注册命令。服务器则根据这个命令提供的相关信息处理注册的业务逻辑。


图

注册的过程主要是提取REGISTER 请求中的用户信息,并将其存到服务器中。在处理过程中,可以要根据情况向请求端发送不同的答复。我们这里只是简单的将注册的用户利用EJB将他的信息存放到数据库中。 呼叫的过程则主要是客户向服务器发出请求,请求的地址则是预先设置好的服务SIP URL。这个服务的SIP URL和对应的接听端信息可以用EJB中的实体Bean获取得到。


图

除此以外,我们可以在doSuccessResponse或者doErrorResponse方法中处理建立对话过程中出现的答复并利用EJB进行记录,使更多的对话建立状态信息可以与企业应用整合。整个应用例子的代码可以在文章后面的资源列表中找到。





回页首


6. 结束语

利用SIP Servlet,可以令J2EE应用服务器与传统电话网络及正在发展之中的VoIP的应用集成起来。Websphere Application Server v6.1在这方面的支持可以令企业更便利的在J2EE平台上构建与SIP相关的应用和服务。从上文可以看出,WAS v6.1的SIP Servlet功能是集成在应用服务器的基础设施中的,而不是作为独立的产品。这样,SIP的应用与原有的J2EE应用结合就会更加紧密。从开发人员的角度来看,AST v6.1提供的图形化开发界面,使得开发人员可以集中精力于SIP应用的业务逻辑,而不需要关心SIP协议本身的底层细节。通过简单的几步配置与代码开发,即可以快速成生SIP 应用。WAS的这一新特性,必将为用户提供更好的信息集成与信息管理功能。相关的资源可以参考文后的链接列表。也可以发邮件给作者。



参考资料



关于作者

赵叔能,目前就读于中山大学计算机系(软件工程实验室)。研究兴趣包括分布式计算、语义网格、AOP等。可以通过以下方式与笔者联系: http://www.cs.sysu.edu.cn/selab/ 或者 Suknang@163.com




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款