基于Tuscany SCA远程访问web service
2014-08-16唐青
唐 青
福建卫生职业技术学院信息技术教研室,福建福州,350101
基于Tuscany SCA远程访问web service
唐 青
福建卫生职业技术学院信息技术教研室,福建福州,350101
以基金销售系统中代销机构交收资金明细查询功能为例,讨论了利用Tuscany SCA访问远程web service的实现过程。这个过程使用servlet与Tuscany SCA构件相结合技术,通过建立web构件、servlet程序及配置servlet过滤器,实现了基于SCA的远程调用web服务。利用这种方法实现调用远程服务,易于理解且实现相对简单。
SCA web服务;远程调用;servlet
当今,在分布式应用系统开发过程中,开发者常需要远程访问后台系统或者第三方系统提供的web service。客户端访问web service方法有很多,常见的有利用JDK中web服务API调用web service,利用Apache CXF、Axis2等一些开源框架实现对web service远程调用。上述方法虽然较为成熟,但实现时需要编写的程序代码较多,较为繁琐。本文尝试利用Apache Tuscany SCA实现web service的远程调用。Apache Tuscany是一个开源SOA基础架构,主要用于服务构件的开发、组装、发布和管理;另外,它也提供了一种轻量级远程服务调用方法。利用这种方法实现远程服务的调用,相对简单且易于理解。
1 基于Tuscany SCA的远程服务调用框架
为了更好地阐述这种调用远程服务的方法,以基金销售系统代销机构交收资金明细查询功能为例,详细介绍利用Tuscany SCA进行远程web service访问的实现过程。如图1所示,该功能在实现过程中需要通过web service方式访问后台清算子系统提供的Clearing Service,查询获得代销机构交收资金明细数据。
图1 采用web service方式访问后台清算子系统提供的Clearing Service
基于Tuscany SCA实现远程服务调用的基本原理,使用servlet与Tuscany SCA服务构件结合技术。Tuscany SCA 允许将Java EE规范中web模块(servlet)扩展为符合SCA规范要求的服务组件,这样,web浏览器通过调用servlet就可以轻松地访问远程的web service。这种方式简化了web服务器调用远程服务的开发,同时使开发者将现有的servlet和SCA服务结合起来,大大提高了代码的复用度。如图2为基于SCA调用远程服务的过程框架图。
2 实现方式的主要步骤
为了实现基于Tuscany SCA远程访问web service,除开发一个用于用户交互的JSP网页外,还需要完成以下主要任务:(1)基于Tuscany SCA,配置一个Web构件,利用该构件,引用远程服务ClearingService;(2)建立实现查询功能的servlet;(3)配置TuscanyServletFilter过滤器。
2.1 配置web构件
客户端的jsp页面在servlet程序顺利调用远程web Service之前,必须先配置一个如图3所示的web构件。
图2 基于SCA的远程调用框架图
Web构件包括Web Client和Clearing Reference Component两个服务组件。其中,Web Client组件用于将servlet扩展为服务组件;Clearing Reference Component是标准的通过java类来实现的服务组件,用于引用远程服务。
图3 Web构件图
Tuscany SCA下web构件的建立方法:通过在/META-INF/sca-deployables/目录下新建web.composite文件。该文件定义了web构件的组成。web.composite文件架构内容如下:
……
……
……
根据构件图和web.composite的架构内容,需要作如下说明[1]:
(1)在web构件中定义Web Client服务组件用来引用Clearing Reference服务。
(2)
(3)在web构件中定义了ClearingReference组件,该组件又定义了一个基于Web Service的引用Clearing Service。通过这个引用,便可以调用远程的共享服务“ClearingService”,在架构代码中为:
其中uri值表明了这个远程服务的uri地址。
2.2 建立servlet程序
建立一个servlet程序,通过它可以查找和使用基于SCA的web服务。但是,不同的servlet容器对SCA的支持程度不一致,有些容器完全支持SCA,有些容器部分支持SCA。对于完全支持SCA的容器,servlet代码就可以使用@Reference注释;而对于不完全支持SCA的容器,@Reference注释不起作用,引用需要被设置在servlet的init()方法中[1]。
下面是基于上述两种情况的代码:
(1)servlet容器完全支持SCA的代码写法,servlet使用@Reference注释来查询ClearingReference服务。
publicclassQuerySettlementServlet extends HttpServlet {
privatestaticfinallongserialVersionUID = 1L;
@Reference
protectedClearingReferenceclearingReference;
(2)servlet容器不完全支持SCA的代码写法,servlet通过SCA Component Context来查询Clearing Reference。Component Context是标准的SCA API。常见的Tomcat服务器是不完全支持SCA的,可以采用下面的写法。
public void init(ServletConfigconfig) throws ServletException {
if (clearingReference==null){
ComponentContextcontext=(ComponentContext)config.getServletContext().getAttribute("org.osoa.sca.ComponentContext");
clearingReference=context.getService(ClearingReference.class, "ClearingRef-erence");
}
}
2.3 配置TuscanyServletFilter过滤器
在基于Web Service的SCA应用中,要想在Web环境中使用Tuscany提供的功能,需要在web.xml中设置TuscanyServletFilter过滤器。其工作过程如下:当应用服务器启动、客户端访问jsp页面时,服务器调用Web.xml中Tuscany Servlet Filter过滤器。在Tuscany Servlet Filter过滤器中,首先得到一个WebAppServletHost实例,Web App Servlet Host是在Web应用环境中使用的Tuscany功能提供者;在Web App Servlet Host中,得到一个SCA Domain实例,并将之放入Servlet Context上下文中,以后可藉由相应的key得到此SCA Domain实例,即jsp中成功取得SCADomain实例,根据SCA Domain实例取得Domain域中相应的组件,之后就可以调用组件中的各种业务方法了。
Tuscany Servlet Filter过滤器具体配置:在WEB-INF/目录下创建web.xml,在web.xml文件中配置Tuscany Servlet过滤器。主要架构内容如下:
……
……
……
3 基于SCA调用远程服务示例
将定义的web构件中的组件部署到Tomcat服务器,启动Tomcat服务器,在浏览器中输入调用远程服务的jsp页面,并在页面输入要查询的各项条件,提交后,浏览器去调用QuerySettlementServlet.java程序,并使用SCA ComponentContext(SCA API)来查询ClearingReference服务,Clearing Reference服务再调用远程服务ClearingService中的接口query All SalersSettle Statements(String strSale,Strings trFundCode,String cfDate1,String cfDate2),根据“代销机构”“基金代码”“起始确认日期”“结束确认日期”查询代销机构交收资金明细。代码片断如下:
protected void doPost(HttpServletRequest request,Http Servlet Response response) throws Servlet Exception,IOException {
……
ssr=clearing Reference.query All Salers Settle Statements(strSaler ID,strFundcode,cfmDate1,cfmDate2);
……}
运行结果如图4所示。
图4 代销机构交收资金明细查询结果
4 结束语
本文基于 SCA架构与servlet相结合,通过建立web构件、servlet程序及配置servlet过滤器,实现了基于SCA的远程调用web服务。这种框架利用Tuscany SCA简化了远程服务的访问方式。
[1]Simon Laws,Mark Combellack,Raymond Feng.Tuscany SCA in Action[EB/OL].[2014-06-05].http://www.open-open.com/doc/view/4cd938feb9b34d49a82f664958 a9a248
[2]吴清涛.基于Proxy模式的远程处理框架研究[J].长江大学学报:自然科学版,2013,10(19):23-26
[3]孙佳庆,俎云霄,李巍海,等.基于JSP的Matlab远程调用和并行处理[J].计算机科学与应用,2013(3):273-277
[4]周毅,张晓先,陈丽蓉.AUTOSAR 符合性测试适配器的实现方法[J].计算机工程,2014(1):291-294
[5]李海闻,宁敏,林福良,等.一种基于CORBA的分布式应用模型[J].计算机系统应用,2010,19(S1):33-34
[6]纽康莫,劳莫,徐涵,等.Understanding SOA with Web Service:中文版[M].北京:电子工业出版,2006:20-32
[7]刘佑平.SCA在铁路信息共享平台中的应用研究[D].北京:北京交通大学研究生院,2008:2-35
[8]焦烈焱,冯兴智,杨洪波.SOA中国路线图[M].北京:清华大学出版社,2009:2-223
(责任编辑:汪材印)
10.3969/j.issn.1673-2006.2014.11.023
2014-07-28
福建省教育厅B类课题科技基金项目“基于Tuslang SCA的应用开发研究”(JB13335)。
唐青(1975-),女,福建福州人,硕士,讲师,主要研究方向:计算机信息系统。
TP311.5
A
1673-2006(2014)11-0079-04