使用JAVA技术实现新一代OSS/BSS


SUN中国工程研究院 软件技术中心 王刚

摘要:本文着眼于OSS/BSS发展的现状,对于OSS/J的技术架构、API规范以及如何进行基于OSS/J的系统开发做了简要介绍。

OSS/BSS概述
OSS(Operations Support Systems)是指“运营支持系统”,BSS(Business Support Systems)为“业务支持系统”,OSS/BSS是这两类系统的结合在一起形成的综合的电信业务运营和管理平台,在国内OSS/BSS有时也被称为BOSS。

标准化组织电信管理论坛(TMF)对OSS/BSS提出了被业界广泛接受的功能模型。在这个模型中,OSS/BSS包括三大功能:业务开通、业务保障和计费(或称业务计量)。业务开通是指电信运营商接受客户订购电信服务的订单,通过对电信资源的分配、配置、安装和部署为客户提供所需的服务,并能够对服务进行计费。业务保障要提供量化的测量指标,确保服务能达到客户的要求。业务计量则是测量电信网络中各种业务的使用情况,计算应收费用,并对收费过程提供支持。

作为一种高效的信息管理系统,OSS/BSS已在国外电信运营商中得到广泛的运用,并在实践中积累了大量的成功案例。OSS/BSS解决方案也在这一过程中趋于完善,同时也暴露出越来越多的难以克服的问题:


图1、OSS/BSS的“集成的噩梦”

  • OSS/BSS的软件系统相对复杂,从而使得网管系统、计费系统、营账系统、客服系统等都是各成体系,要想把它们有机地整合在一起,几乎是不可能的,对于这种“杂乱无章”的系统结构(参见图1),简直可以称之为系统集成的噩梦(Integration Nightmare)。
  • 很多OSS/BSS开发商都有同感——缺少训练有素的工程师,这也是由前一条所决定的,需要工程师同时精通电信的专业知识,又能熟悉各类软件,的确要求比较苛刻。
  • 行业标准问题。尽管在近几年来国际国内都陆续推出了一些标准规范,但大多是停留在纸面上,同时也缺少更直观的技术指导和成功案例。 l 一个OSS/BSS,往往会涉及若干个分离的系统,除了集成,对系统进行测试、维护都是十分耗时的。

以上各方面的问题,OSS/J就可以解决,原因在于:

  • 采用符合OSS/J规范而开发的软件接口相对简单,OSS/BSS内部的各个子系统是可以互换的( Interchangable )。
  • OSS/J是基于J2EE技术的,开发人员只要熟悉J2EE的开发(甚至仅仅熟悉JAVA的开发)就足够了,他们就能够与设计人员合作,完成系统开发。
  • OSS/J不仅包括了技术规范,而且有真实的代码实现以及测试工具。这能够帮助开发人员很快的上手。 l 因为各个子系统都符合标准的接口,所以系统的后期测试和维护工作会比较简单。

什么是OSS/J
OSS/J(OSS Through Java)是以JAVA技术为动力的新一代的OSS/BSS解决方案。

说到OSS/J,我们需要提及一个称为OSS Through Java Initiative的工作组,这个工作组由众多的业界新技术的倡导者(例如Motorola,Nokia,Sun, BEA, IBM)派出的专家组成。自2000年成立以来,他们一直在为加速OSS/BSS解决方案的开发、简化其中的系统组件的部署和集成而努力。工作组利用JAVA技术,为OSS/BSS定义实现了一系列的开放的标准API,提供给OSS/BSS的开发者使用。在不久的将来,电信行业的设备制造商、软件开发商、系统集成商都遵循这些标准API的定义,那么最后建立起来的OSS/BSS将是一个组件化的、有机结合在一起的综合管理平台(参见图2),“杂乱无章”的系统结构将成为过去。


图2、采用OSS/J构建的系统结构

需要指出的是,OSS/J并不是要定义另一个通用的OSS/BSS集成框架。工作组的成员在定义标准的API之前,已经汲取了众多标准规范和协议中的精华,例如,OSS/J很好的继承了来自3rd Generation Partnership Project (3GPP), 3GPP2, Mobile Wireless Internet Forum(MWIF)以及TeleManagement Forum(TMF)等组织或论坛推出的规范和框架体系。因此,工作组将所有的经历投入到了JAVA API的定义和编码实现上,而且使用OSS/J规范的的用户可以免费地获得这些资料。

TMF在NGOSS 3.0(Next Generation Operations Support Systems下一代运营支持系统)的文档中,推出了详细的OSS/BSS的定义。(参见http:// www.tmforum.org)。OSS/J的API定义遵守了NGOSS eTOM (enhanced Telecom Operations Map)的规定,详细内容请见“OSS/J API简介”部分。概括地说,NGOSS为我们提供了独立于技术实现的普遍适用的框架,而OSS/J则是以该框架为基础,提出了采用JAVA技术的实现方案。

OSS/J的规范的推出是在JCP( Java Community Process, http://jcp.org)支持下完成的。通过访问JCP的网站,或者光临http://java.sun.com/products/oss,你都可以下载到OSS/J的规范、参考实现和兼容性测试工具,下面逐一简介:

OSS/J的规范:包括OSS/J API规范和OSS/J J2EE系统设计指导。这些内容将在“OSS/J API简介”中详细叙述。

OSS/J 参考实现(Reference Implementation或RI):主要内容是根据OSS/J API规范而完成的系统实现的代码。推出RI一方面是为了验证规范的可执行性,所以RI的代码未曾经过很好的优化。RI的另一个重要的作用是它能够使得开发者很快的着手进行设计和开发工作,而且,RI中的所有代码可以被开发人员直接使用到商业系统的开发中去。所以,仔细阅读分析RI的代码能大大缩短你用于熟悉OSS/J的时间。

兼容性测试工具(Test Compatibility Kits或TCK ):当一个OSS/BSS(或其中的一个子系统)的开发完成了以后,我们如何才能知道它是否符合OSS/J 规范的规定呢?TCK可以完成这样的测试,并产生一个测试报告。如果开发的产品符合OSS/J规范的要求,那么它将很容易和其它同样兼容OSS/J规范的产品集成在一起。

OSS/J的规范推出以后,得到了业界的广泛认可,许多电信运营商、服务提供商、系统集成商争相追随。来自IDC的2002年的报告说,“……随着SA、TT、Qos API的发布,许多服务提供商和供应商认为,采用JAVA技术实现OSS已经到了实际可行的阶段。”

OSS/J与J2EE
上文提到,OSS/J可以帮助我们终结“系统集成的噩梦”,因为它为我们定义了一系列的标准API,只要各个厂商都能遵守API中的规定,那么OSS/BSS的集成难的问题将迎刃而解。那么具体的底层实现机制是怎样的呢?——OSS/J采用了J2EE作为技术平台。

J2EE(Java 2 Enterprise Edition)即Java 2企业版,是提供给开发者的采用组件技术构建分布式系统的编程框架,需要更深入了解J2EE,请浏览http://java.sun.com/j2ee/。总体来说,J2EE使得开发人员无须去考虑分布式系统中的底层技术实现细节,例如线程管理,网络通信等,而是集中精力开发符合业务逻辑的代码,这无疑大大加快了应用程序的开发进程,而且简化了系统的部署和后期维护工作。目前全球的J2EE开发人员总数已经达到了几百万,这个群体还在迅速膨胀。


图3、采用J2EE实现OSS/BSS

作为服务器端的开发技术,企业JavaBean(EJB)、扩展标记语言(XML)以及JAVA Management Extensions(JMX)都在OSS/J中被采纳。因为J2EE、XML、JMX已经在很多的大型企业应用(特别是服务器端的应用程序)中获得了成功,所以OSS/J采用它们定义在组装、开发和部署OSS/BSS解决方案时所需要的API。

图3是采用J2EE实现OSS/BSS的示意。以OSS/J API为基础,我们开发了支持SA、TT等功能的EJB,这些EJB可以根据需要通过JDBC存取数据库,或通过JNDI访问目录服务器。对于已有的遗留系统以及EMS(Element Management Systems),可以采用J2EE连接器的架构(Java Connector Architecture即JCA)通过SNMP、CMIP或其他专有协议实现集成。OSS的客户端可以是浏览器或定制的应用程序,通过HTTP/XML/Java/IIOP和系统相联。与此同时,JAVA的消息机制为我们提供了更加灵活的“松耦合(loosely-coupled)”的集成方式,利用它可以简单地实现和Intranet/Internet中的其他系统的连接。

OSS/J API简介
图4将OSS/J中的核心API和TMF的eTOM的各个过程做了映射。从图中可以看出,OSS/J核心API囊括了客户管理、订单管理、服务开通等20个,关于每个API的详细描述,可参见http://java.sun.com/products/oss/apis.html上的OSS/J API Roadmap。目前,已经完成的API有:OSS服务开通API,OSS故障单API,OSS通用API,OSS IP计费API和OSS服务质量控制API,而OSS 库存 API不久将发行。除了API,OSS/J工作组还为开发者提供了《OSS/J J2EE 系统设计指导》。


图4、OSS/J API到eTOM的映射

OSS通用API(OSS Common API):和其他OSS/J API不同的是,它本身没有对OSS/BSS在业务逻辑提供支持,而是为开发者使用OSS/J API提供了一个基础框架。可以认为这部分API是《OSS/J J2EE 系统设计指导》一个具体实施。需要强调的是,既然是基础框架,以下提及的所有OSS/J API都是依赖于通用API的。

OSS/J J2EE系统设计指导(OSS/J J2EE Design Guideline或OSS/J J2EE DG):定义了一系列的设计模式(Design Patterns),这些模式非常适合于采用J2EE/EJB搭建网络服务管理系统。总体来看,DG中提及的设计模式都是来自于J2EE设计模式,关于J2EE设计模式的详细信息,请参见http://java.sun.com/blueprints/corej2eepatterns。DG中主要涉及到以下要点:

  • OSS中的功能都是采用EJB组件的形式实现的
  • 这些EJB提供了面向业务逻辑的粗略的接口
  • 应用服务器为OSS/BSS系统提供了集群、扩展和故障处理等功能
  • 采用消息(Messaging)交换机制来减小组件之间的耦合程度
  • 结合消息机制和JCA架构实现系统的集成和工作流的管理

贯穿DG的一个重要概念就是“软件构件(Software Building Block)”的概念。一块软件积木是若干软件组件(Component)的集合体,这些软件组件相互协作,从而满足系统业务逻辑的需求。需要强调的是,OSS/J API的所有定义和实现方式都是遵从OSS/J J2EE DG的。

OSS服务开通API(OSS Service Activation API或SA API):主要提供了对订单的管理功能(例如生成、修改、删除、查询订单等)和服务的管理功能。API中并没有给出指定的“服务信息模型(Service Information Model)”,而是将这部分工作留给开发者去实现,这样开发者可以根据自己的业务逻辑的需要定义服务信息模型。SA API中关于订单管理的定义是根据TMF 603中的“世界订单信息协定”(World Ordering Information Agreement)以及OMG WMF/WfMC的“订单状态模型(Order State Model)”的定义完成的。

OSS故障单API(OSS Trouble Ticket API或TT API):定义了生成、更新、查询、关闭故障单的一系列操作。网管系统可以通过调用TT API自动生成故障单,服务提供商也可以利用它产生和处理故障单,客户关怀系统能够调用这些API将故障单发送给服务提供商(见图5);如果故障单的管理是在一个工作流程中完成的话,那么开发人员可以使用这些API与工作流引擎进行信息传递。

OSS IP计费API(OSS IP Billing API):定义了IP计费的数据源和计费系统之间的接口。这部分API适用于针对2.5G和3G网络的OSS/BSS开发。而且API的定义重点放在(但不不局限于)无线通信的领域。该规范的定义是为了实现计费系统、计费数据采集系统、计费数据源这些不同的子系统之间够实现无缝连接,流畅地完成各种记录类型(例如CDR、SDR、IPDR等)的交换和传输。

OSS服务质量API(OSS Quality of Service API或OSS QOS API):QOS API使得QOS系统能够从其他系统得到影响服务质量的数据,例如网络性能、极限值以及故障数据等等。QOS API主要涉及到性能和使用情况的数据监测、系统极限值的监测及故障数据的监测三个方面的内容。

OSS 库存 API(OSS Inventory API):OSS/BSS在进行操作的时候,大多需要关于网络可以提供的产品、服务和资源的规划、使用的情况,这些功能要由库存API来提供。这部分API包括了对产品和服务的目录管理,并且有跟踪用户预定和使用产品或服务的功能;同时API中对网络资源管理(例如网络上的设备和网络拓扑结构的管理)的功能对于OSS/BSS来说也是不可或缺的。

下图展示了各个OSS/J API之间的关系,其中椭圆形的边界可以看做是API的定义,矩形的内容是由开发商来实现的,而箭头代表方法或功能的调用,这些功能调用,尤其是各个子系统之间(例如从Qos调用故障单中的功能)应该使用OSS/J的API来完成。


图5、OSS/J API的关系

OSS/J开发指导
了解了OSS/J API的概况以后,可能你已经决定着手进行基于OSS/J的系统开发了。无论你是系统设计人员还是程序员,应该具备J2EE的开发经验,而且最好了解电信行业知识(特别是关于OSS/BSS方面的知识)。而且,建议你按照以下的步骤来开展工作。

研读OSS/J相关的资料

浏览OSS/J的网站http://java.sun.com/products/oss,你可以下载到OSS/J的规范和相关技术文章(如图6所示)。前面提到,试着部署一下RI并研究其代码能帮助你迅速了解OSS/J。如果你在学习和使用的时候有什么疑问和意见,都可以发表在相应的新闻组里(新闻组的地址参见OSS/J的网站)。


图6、下载OSS/J规范、RI进行开发

开始OSS/BSS的设计与实现

这个过程和标准的软件开发没有大的区别,主要经历从制定计划、需求分析、系统设计、详细设计、编码实现和测试等几个环节。由于进行OSS/J的开发是基于J2EE技术的,所以选择稳定高效的应用服务器(Application Server)和集成开发环境(IDE)十分重要,好在由于J2EE的开放性,我们有很多选择,例如Sun ONE应用服务器、BEA Weblogic、Borland Jbuilder等。在系统设计和详细设计时,设计人员需要首先熟悉OSS/J J2EE设计指导中内容,按照其中讲述的设计模式进行设计。至于编码实现,和一般的J2EE开发没什么区别,主要涉及到EJB的编程,同时需要程序员对XML比较熟悉。进入到测试阶段,除了完成普通软件开发需要完成的一系列测试以外,OSS/J规范的兼容性的测试也是必须的,如上文所述,TCK可以帮你完成这一个步骤(参见图7)。


图7、使用TCK进行测试

发布自己的产品信息

当你开发的产品成功地通过了TCK的测试以后,就可以获得OSS/J的认证。OSS/J针对OSS/BSS产品规定了一个灵活的“自我认证流程”,参见图8。上文中提到,使用TCK测试你的产品,将产生一个测试报告。如果测试成功,可以将报告发布到你的公共网站上,同时通知OSS/J工作组的程序管理小组。经过核实以后,OSS/J程序管理小组将会更新OSS/J的网站,将你发布的产品测试报告的链接(URL)加到通过认证的产品列表中去。到现在,整个“自我认证过程”就完成了。获得了OSS/J的认证,意味着你开发的产品可以很容易地和其它厂商的也获得认证的产品集成起来,可以作为有机的一部分加入到基于OSS/J API的OSS/BSS中去。参见http://java.sun.com/products/oss/adoption/ossj_certified_products_table.html,在这里,你可以看到IBM、Ilog、Nokia等许多厂商的产品都已经获得了OSS/J的认证。


图8、OSS/J的“自我认证”

加入OSS/J工作组

如果你希望能最及时地了解OSS/J的发展动向,获得最新的信息,甚至希望参与规范的制订和修改,那么最有效的方式就是加入到OSS/J的工作组中来。OSS/J工作组中的成员有着不同的级别,分别有不同的权利。请查看http://java.sun.com/products/oss/members.html了解加入OSS/J工作组的细节内容。

总结
OSS/J为我们提供了一个采用Java技术实现OSS/BSS的技术框架,它借鉴了众多的既定行业规范,以J2EE/XML技术为基础,为OSS/BSS的开发者提供了一个标准的环境,以解决目前OSS/BSS中存在的集成问题。相信随着相关技术的进步,OSS/J会拥有越来越多的支持者,从而发展成为用JAVA实施OSS/BSS的技术标准。

参考资料

  • Operations Support Systems, http://www.iec.org
  • OSS through Java Initiative, By Philippe Lalande
  • OSS through Java Initiative, Simplifying Integration with Common APIs, http://java.sun.com/products/oss
  • OSS/J API Roadmap
  • Case Study: From NGOSS Map to OSS/J Roadwork, http://www.tmforum.org/browse.asp?catID=1483&sNode=1483&Exp=Y&linkID=28103, By Peter Lambert
  • OSS through Java Design Guidelines, http://java.sun.com/products/oss/apis.html
  • OSS Trouble Ticket API
  • OSS Service Activation API
  • OSS Common API
  • OSS IP Billing API
  • OSS Quality of Service API
  • OSS Inventory API