Apache Tuscany SCA 用户指南.docx

上传人:b****4 文档编号:24261486 上传时间:2023-05-25 格式:DOCX 页数:20 大小:22.98KB
下载 相关 举报
Apache Tuscany SCA 用户指南.docx_第1页
第1页 / 共20页
Apache Tuscany SCA 用户指南.docx_第2页
第2页 / 共20页
Apache Tuscany SCA 用户指南.docx_第3页
第3页 / 共20页
Apache Tuscany SCA 用户指南.docx_第4页
第4页 / 共20页
Apache Tuscany SCA 用户指南.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Apache Tuscany SCA 用户指南.docx

《Apache Tuscany SCA 用户指南.docx》由会员分享,可在线阅读,更多相关《Apache Tuscany SCA 用户指南.docx(20页珍藏版)》请在冰豆网上搜索。

Apache Tuscany SCA 用户指南.docx

ApacheTuscanySCA用户指南

介绍

这篇用户指南帮助你熟悉SCA概念,并且带你浏览示范怎样创建SCA 应用的一个例子。

它也说明了Tuscany支持的多种不同环境(例如命令行客户端或Web应用)以及如何打包程序以运行在这行环境中。

 

本说明或许不需要,因为创建一个SCA应用很简单。

Tuscany和SCA的主要目的之一是,避免强加的规则和要求,以制约如何去编写应用。

我们想让程序员在开发应用的时候,不用担心将要被使用的环境。

基本上,你是为了兴趣而写代码,Tuscany提供环境让它运行。

因此,本指南只是一个例子,说明怎样开发SCA应用,而不是一个规则。

 

SCA快速指南

SCA快速指南给你做SCA概念的概述,并且为下面的例子给你打好基础。

如果你已经熟悉SCA,请略过次章。

 

例子概要 

我们将使用这个计算示例如何开发一个SCA 应用。

 顾名思义,这个例子是实现典型的计算操作。

典型操作就是给两个数字被要求对这两个数字进行一些操作,我们的计算程序将能处理加减乘除四则运算。

 

我们开始于一个简单的计算程序并会逐渐的扩展一些高级SCA特性。

 

对于SCA的更多细节,请参考相关规范,打开SCA网站。

 

 

准备

 

下载TuscanyJavaSCArelease

下载必要的:

Java5

Maven2.0.4+ 或者 Ant1.7.0

运行示例

 

Calculator 程序随着SCA二进制包一起分发,在我们开始编写它之前先运行一下示例,很简单!

 

到../samples/calculator 目录

antrun

如果你打算直接使用命令行来执行例程,那么使用以下的命令

java-cp....libuscany-sca-manifest.jar;targetsample-calculator.jarcalculator.CalculatorClient

一切正常的话,你将会得到以下结果:

 

3+2=5.0

3-2=1.0

3*2=6.0

3/2=1.5

 

如果你使用的是源代码分发包的话,我们建议你使用Maven构建并运行这个计算器实例,因为tuscany-sca-manifest.jar 是不随源代码分发包一起提供的,它是包含在二进制分发包内,它包含了全部的tuscany的jar包,这样可以让运行实例的命令行漂亮且比较短。

 

 

构建Calculator实例

你将学到的

这个例子说明,当你集中于业务逻辑的时候,如何定义你的程序。

本教程会带你通过一系列步骤构建一个叫做calculator的集成构建应用,在这个集成应用中所有组件间的连接器都是本地的,使用java定义的接口。

实例通览

步骤1:

定义所需要的功能块:

考虑下你的应用如何被分解为一个个较小的功能/服务,每个块都是一个可以在总的应用里使用的逻辑操作单元,这样的话,Calculator应用可以被分为五个功能块:

AddService(加)、SubstractService(减)、MultiplyService(乘)、DivideService(除)和一个主功能块,起接收请求并引导到正确操作的控制器的作用。

我们可以叫这个控制器为CalculatorService。

 

步骤2:

实现每个功能块:

既然你已经识别了应用中的功能块,现在将准备创建它们。

在SCA里,功能性的块称为组件,那么让我们看看如何去实现一个组件。

我们将把AddService组件作为我们的第一个例子。

AddService组件将提供两数相加的服务。

每当执行相加操作的时候,CalcualtorService组件就会使用AddService组件。

如果我们使用java来编写AddService组件的话,我们从描述一个(Java)接口开始。

publicinterfaceAddService{

 

    doubleadd(doublen1,doublen2);

}

现在,我们提供这个接口的实现。

publicclassAddServiceImplimplementsAddService{

 

    publicdoubleadd(doublen1,doublen2){

        returnn1+n2;

    }

}

等等!

我们不是在写一个SCA组件么?

那一定是很复杂的,仅仅只有Java接口和实现,这是对的么?

嗯,实际上一个SCA组件可以是一个普通的Java,因此我们已经做完了实现这个SCAAddService组件所需要的编码。

我们能使用SCA暴露AddService组件在任何支持的绑定上提供服务,例如,WebServices,JMS或者RMI,

不需要更改AddService的实现。

 

让我们看一下CalculatorService组件,这很有趣因为它会调用AddService组件,在完整应用中,它会调用SubtractService、MultiplyService以及DivideService 组件,但我们目前会忽略其他的,因为它们和我们实现的AddService是一个模式。

 

我们将再次从定义一个接口开始,因为CalcultorService是一个自身提供给其他程序调用的接口。

 

publicinterfaceCalculatorService{

 

    doubleadd(doublen1,doublen2);

    doublesubtract(doublen1,doublen2);

    doublemultiply(doublen1,doublen2);

    doubledivide(doublen1,doublen2);

}

现在,我们实现这个接口。

 

publicclassCalculatorServiceImplimplementsCalculatorService{

 

    privateAddServiceaddService;

    privateSubtractServicesubtractService;

    privateMultiplyServicemultiplyService;

    privateDivideServicedivideService;

  

    @Reference

    publicvoidsetAddService(AddServiceaddService){

        this.addService=addService;

    }

 

    ...setmethodsfortheotherattributeswouldgohere

 

    publicdoubleadd(doublen1,doublen2){

        returnaddService.add(n1,n2);

    }

 

    ...implementationsoftheothermethodswouldgohere

}

步骤3:

组装应用:

那么,我们该如何让这两个组件运行呢?

我们当中的Java程序员说了,写一个main函数,然后就可以将两个组件联系到一起然后运行,这样做很简单。

 

publicclassCalculatorClient{

    publicstaticvoidmain(String[]args)throwsException{

 

        CalculatorServiceImplcalculatorService=newCalculatorServiceImpl();

        AddService            addService        =newAddServiceImpl();

        calculatorService.setAddService(addService);

     

        System.out.println("3+2="+calculatorService.add(3,2));

        //callstoothermethodsgohereifwehaveimplementedSubtractService,MultiplyService,DivideService

    }

}

但这样做,没有使用TuscanySCA运行时,也没有将代码延展至提供Webservice接口,那样的话,会稍微复杂些。

那么,我们怎样做可以让它运行在Tuscany内,可以得到很多像自由提供Webservice那样的特性?

首先,在我们调用这些组件前,先改变客户端以启动TuscanySCA运行时。

 

publicclassCalculatorClient{

    publicstaticvoidmain(String[]args)throwsException{

 

        SCADomainscaDomain=SCADomain.newInstance("Cposite");

        CalculatorServicecalculatorService=scaDomain.getService(CalculatorService.class,"CalculatorServiceComponent");

 

        System.out.println("3+2="+calculatorService.add(3,2));

        //callstoothermethodsgohereifwehaveimplementedSubtractService,MultiplyService,DivideService

 

        scaDomain.close();

    }

}

你可以看到我们从使用静态方法创建一个SCADomain自身实例开始。

SCADomain是一个SCA概念,表示一个SCA系统的边界。

它可以跨很多处理器部署,现在,让我们先关注它与在单Java虚拟机内运行。

 

参数"Cposite"指的是告诉SCA 这些组件在我们计算器应用内如何集成工作的一个XML 文件。

这里是Cposite内的XML。

 

//www.osoa.org/xmlns/sca/1.0"

           name="Calculator">

 

    

    

        

        

--referencestoSubtractComponent,MultiplyComponentandDivideComponent  -->

    

 

    

        

    

 

    

--definitionsofSubtractComponent,MultiplyComponentandDivideComponent-->

 

可以看到我们在这里定义了两个组件并且指定了TuscanySCA需要加载去实现业务计算的Java实现类。

它们是我们刚刚实现的那些类。

 

需要注意的是,CalculatorServiceComponent拥有一个对addService的引用,在这个XML配置文件里,这个引用目标是AddServiceComponent。

当我们实现CalculatorServiceImpl时,引用名字"addService",与我们建立的addService 领域的名字相配,这不是巧合。

TuscanySCA运行时从Xml配置文件解析这些信息,并且用来创建描述我们calculator应用程序的对象和关系。

它首先创建了AddServiceImpl 和CalcualtorSreviceImpl的实例,然后将AddServiceImpl引用注入到CalculatorServiceImpl对象的addService字段域。

如果你回过头来看下我们如何实现的CalculatorService,你会发现@Reference注释,它告诉SCA哪些字段/域需要被自动设置。

这相当于来自我们正常的Java客户端代码。

 

CalculatorServiceImplcalculatorService=newCalculatorServiceImpl();

        AddService            addService        =newAddServiceImpl();

        calculatorService.setAddService(addService);

一旦配置文件被SCADomain加载,我们的客户端代码就会要求SCADomain提供CalculatorServiceComponent组件的对象实例引用。

 

CalculatorServicecalculatorService=scaDomain.getService(CalculatorService.class,"CalculatorServiceComponent");

我们现在使用这个引用就好像是我们自己创建的一样,例如,来自于CalculatorServiceImpl.add()方法实现:

 

returnaddService.add(n1,n2);

SCA规范往往使用图解的形式描述SCA应用,这往往有利于快速的概览有说明组件组成了该应用以及如何将它们联系在一起,如果我们画一张我们刚刚创建的calculator例子的图,我们会得到如下类似的图:

 

 

 

 你会发现这些图随我们所有的示例提供。

如果你喜欢使用一种可视化的角度去看图的话,这就帮助你快速理解各个例子中的组件。

可以看一下每个例子的顶级目录的那些".png" 文件。

 

步骤4:

部署应用:

只要"Cposite"文件和其他的tuscanyjar包一起,存在于classpath内,我们就可以像之前做的那样运行我们的例子。

这些例子包含一个Ant部署文件build.xml,所以,如果你想测试例子代码的话,你可以如此做并重编译它。

 

antcompile

重新编译以后,你可以像在“运行示例”章节那样运行它,我们还在Ant的build.xml脚本里面提供了一个runtarget以供运行,你可以这样:

 

antrun

 在calculator内使用更多高级特性

回顾以下,我们编写的启动calculator应用的代码,使用的TuscanySCA运行时不比使用普通java代码更长,然而,我们现在确实有一个XML集成配置文件,描述我们的应用如何被组装。

 

但我们的应用变得更复杂,并且我们想要改变它,重用它,和其他应用集成或者使用一个和我们其他SCA应用一致的编程模型进一步开发它的时候,集成的概念就是一个很大的优势。

而不管它们是用说明语言实现的。

 

举个例子,我们认为我们的计算器示例足够强大和易用,我们打算将它放在公司内部网,以供其他人使用他们基于Web2.0的程序,通过浏览器进行直接访问,这个时候我们通常会找书本以努力寻找实现它的办法,因为我们有一个描述我们应用的XML文件,这在Tuscany很容易。

如下内容应该达到目的。

 

//www.osoa.org/xmlns/sca/1.0"

           name="Calculator">

 

     

         

         

        

 

    

        

        

        

--referencestoSubtractComponent,MultiplyComponentandDivideComponent  -->

    

 

    

        

    

 

    

--definitionsofSubtractComponent,MultiplyComponentandDivideComponent-->

 

我们所做的就是增加元素,告诉TuscanySCA如何暴露CalculatorServiceComponent作为一个JSONRPC服务。

注意,我们不需要更改我们组件的Java代码。

这只是配置上的一个改变。

 helloworld-jsonrpc 示例展示了一个jsonrpc绑定的工作例子。

 

如果我们需要一个基于SOAP/HTTP 的WebService也很容易,helloworld-ws-service 和helloworld-ws-reference 两个例子展示了如何使用Webservice。

 

SCA允许其他方式的灵活性。

我们可以重新连接我们的组件,例如,使用其中一个远超绑定,比如RMI,我们可以让运行在一台机器上的CalculatorServiceCompone连接到另一台机器上运行的远端版本应用,calculator-rmi-service 和 calculator-rmi-reference 展示了如何使用RMI绑定的方法。

 

我们也能引进用不同的语言实现的组件,例如,让我们增加Ruby实现的SubtractServiceComponent组件。

 

//www.osoa.org/xmlns/sca/1.0"

           name="Calculator">

 

    

        

        

        

        

--referencestoMultiplyComponentandDivideComponent  -->

    

 

    

        

    

 

    

        

    

 

    

--definitionsofMultiplyComponentandDivideComponent-->

 

当然,我们需要Ruby代码去实现它:

 

defsubtract(n1,n2)

    returnn1-n2

end

TuscanySCA运行时处理了Java组件连接到Ruby组件的问题,并且进行了必要的数据转换,calculator-script 示例展示了不同语言的使用。

 

那么,既然我们的应用程序已经作为SCA装配,那么将来当我们进一步开发它的时候就存在许多的可能性,并且和其他应用集成,接下来的章节会提供更多TuscanySCA的细节。

 

创建一个在线商店(OnLineStore)SCA集成应用

既然你已经熟悉了SCA的概念,你可以利用本教程去创建一个OnLineStore集成SCA应用,给购物车提供Web接口。

这个练习会花费少于半小时的时间,它使你熟悉创建一个真正的SCA集成应用的步骤。

虽然这里使用了Eclipse作为IDE,但并不要求你具备Eclipse的相关知识。

你可以很容易看到在你习惯的IDE里具有相似的步骤。

 

TuscanySCA域的实现

你可能已经从以前例子的通览看到,SCA概述也有提到,SCA有个概念叫做Domain(域)。

SCA集成规范的第10部分把SCADomain描述为“SCA机制的视界”。

SCA线路可用来在单个SCADomain里把组件连接起来。

 

通过以前那个计算器例子可以看到,在组件引用和服务之间的连线,是通过添加一个目标组件名到一个引用,在一个SCADomain里处理的。

 

        

        

     

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1