这个例子是基于tuscany-sca-1.0--incubator-M2环境的。
可以从http://incubator.apache.org/tuscany/sca_downloads.html 下载相关的运行环境和例子的代码。
在SCA规范中,component被定义为执行代码的基本单元。每个component对外提供一个功能。在本例子中共有五个component,其中有四个分别实现了加法、减法、乘法和除法的功能。
Compostie作为发布的单元,在每一个配置文件中都是以composite作为XML文档的根元素。
Composite包含0...n个Component,Service,Reference,Wire, Property,还可以包含0...n个其他的Composite。根据Composite的这个特点,可以组合成很多中情况。在以后的例子中会涉及, 到时候在详细列举。
在tuscany-sca-1.0--incubator-M2环境下,应用的装配文件被命名为default.scdl。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="CalculatorComposite">
<service name="CalculatorService">
<interface.java interface="calculator.CalculatorService"/>
<reference>CalculatorServiceComponent</reference>
</service>
<component name="CalculatorServiceComponent">
<implementation.java class="calculator.CalculatorServiceImpl"/>
<reference name="addService">AddServiceComponent</reference>
<reference name="subtractService">SubtractServiceComponent</reference>
<reference name="multiplyService">MultiplyServiceComponent</reference>
<reference name="divideService">DivideServiceComponent</reference>
</component>
<component name="AddServiceComponent">
<implementation.java class="calculator.AddServiceImpl"/>
</component>
<component name="SubtractServiceComponent">
<implementation.java class="calculator.SubtractServiceImpl"/>
</component>
<component name="MultiplyServiceComponent">
<implementation.java class="calculator.MultiplyServiceImpl"/>
</component>
<component name="DivideServiceComponent">
<implementation.java class="calculator.DivideServiceImpl"/>
</component>
</composite>
在系统环境的装配文件system.scdl被装配完毕之后,应用的装配文件default.scdl也被装配完毕,这些步骤是在SCA环境启动过程中完成的。
Composite中Servcie的名称是CalculatorService。CalculatorService对外提供Java接口和一个指向CalculatorServiceComponent的引用。
在Java 接口中声明了外部可以调用的方法,CalculatorService.java文件内容如下:
package calculator;
/**
* The Calculator service interface.
*/
public interface CalculatorService {
double add(double n1, double n2);
double subtract(double n1, double n2);
double multiply(double n1, double n2);
double divide(double n1, double n2);
}
在CalculatorServiceImpl.java继承了CalculatorService.java,并实现对其他component的引用。CalculatorServiceImpl.java内容如下:
package calculator;
import org.osoa.sca.annotations.Reference;
import org.osoa.sca.annotations.Scope;
/**
* An implementation of the Calculator service.
*/
@Scope("MODULE")
public class CalculatorServiceImpl implements CalculatorService {
private AddService addService;
private SubtractService subtractService;
private MultiplyService multiplyService;
private DivideService divideService;
@Reference
public void setAddService(AddService addService) {
this.addService = addService;
}
@Reference
public void setSubtractService(SubtractService subtractService) {
this.subtractService = subtractService;
}
@Reference
public void setDivideService(DivideService divideService) {
this.divideService = divideService;
}
@Reference
public void setMultiplyService(MultiplyService multiplyService) {
this.multiplyService = multiplyService;
}
public double add(double n1, double n2) {
return addService.add(n1, n2);
}
public double subtract(double n1, double n2) {
return subtractService.subtract(n1, n2);
}
public double multiply(double n1, double n2) {
return multiplyService.multiply(n1, n2);
}
public double divide(double n1, double n2) {
return divideService.divide(n1, n2);
}
}
四个component提供了四种算法功能。每一个功能由一个component提供。每个component提供相应的Java接口和Java接口的实现。
加法Java接口:
package calculator;
public interface AddService {
double add(double n1, double n2);
}
加法Java接口实现:
package calculator;
import org.osoa.sca.annotations.Scope;
/**
* An implementation of the Add service
*/
@Scope("MODULE")
public class AddServiceImpl implements AddService {
public double add(double n1, double n2) {
return n1 + n2;
}
}
减法Java接口:
package calculator;
public interface SubtractService {
double subtract(double n1, double n2);
}
减法Java接口实现:
package calculator;
import org.osoa.sca.annotations.Scope;
/**
* An implementation of the subtract service.
*/
@Scope("MODULE")
public class SubtractServiceImpl implements SubtractService {
public double subtract(double n1, double n2) {
return n1 - n2;
}
}
乘法Java接口:
package calculator;
public interface MultiplyService {
double multiply(double n1, double n2);
}
乘法Java接口实现:
package calculator;
import org.osoa.sca.annotations.Scope;
/**
* An implementation of the Multiply service.
*/
@Scope("MODULE")
public class MultiplyServiceImpl implements MultiplyService {
public double multiply(double n1, double n2) {
return n1 * n2;
}
}
除法Java接口:
package calculator;
public interface DivideService {
double divide(double n1, double n2);
}
除法Java接口实现:
package calculator;
import org.osoa.sca.annotations.Scope;
/**
* An implementation of the Divide service.
*/
@Scope("MODULE")
public class DivideServiceImpl implements DivideService {
public double divide(double n1, double n2) {
return n1 / n2;
}
}
以上是composite组件的实现。下面通过客户端来调用这个可以提供加减乘除服务的composite组件。
CalculatorClient.java
package calculator;
import org.osoa.sca.CompositeContext;
import org.osoa.sca.CurrentCompositeContext;
/**
* This client program shows how to create an SCA runtime, start it,
* locate the Calculator service and invoke it.
*/
public class CalculatorClient {
public static void main(String[] args) throws Exception {
CompositeContext context = CurrentCompositeContext.getContext();
CalculatorService calculatorService =
context.locateService(CalculatorService.class, "CalculatorServiceComponent");
// Calculate
System.out.println("3 + 2=" + calculatorService.add(3, 2));
System.out.println("3 - 2=" + calculatorService.subtract(3, 2));
System.out.println("3 * 2=" + calculatorService.multiply(3, 2));
System.out.println("3 / 2=" + calculatorService.divide(3, 2));
}
}
运行结果:
<END>
分享到:
相关推荐
火龙果软件工程技术中心 Tuscany作为SCASpec1.0实现,现在已接近Release1.0的尾声,在近期将发布。本文将针对其最新代码,通过对其启动过程进行分析,来了解Tuscany中对资源的加载及模型组装的处理。...
1.概述上一篇文章主要讲述了TuscanySCA的插件板模式及工厂模式的发展和提升,本文主要介绍TuscanySCA开源软件中动态代理模式(DynamicProxy)及方法调用Invocation。在使用TuscanySCA中,我们只需要写接口及实现类,...
0.0.0 VScode插件platformIO开发环境的安装[esp32、8266]_̌萌新历险记的博客-CSDN博客.mhtml
五一数学建模
人工智能大模型体验报告3.0 目录 大模型产品测评综述 大模型产品现状与进程 3 .0版本大模型测评规则 大模型厂商整体测评 3.0版本大模型综合指数 3.0版本 测评细分维度指数及评述 测评题目展示 厂商最佳实践案例 厂商优秀案例展示 人工 智能大模型体验报告3.0.pdf (1.39 MB, 需要: RMB 9 元)
使用opencv进行人脸识别和对比-python源码.zip
触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板
基于matlab实现的GST模型的红外弱小目标检测代码.rar
LMDI(对数平均迪氏指数法)目前在能源消耗、碳排放等领域应用很多,总体来说并不 是一个很难的方法,但是相应的资料、步骤还是比较少。本人在写论文的时候,通过搜集资 料、研究,找到了stata的实现方法,来自于 Kerry Du老师写的一个模块l dmi,网址为: LMDI: Stata module to compute L ogarithmic Mean Divisia Index (LMDI) Dec omposition (repec.org) 大家可以自己去研究一下。对应的参考 文献就是Ang, B.W., 2005. The LMDI approach t odecomposition analysis: a practical gui de. Energy Policy 33, 867–871. 目前LMDI分解基 本都以这篇文献为参考,论坛里也有,大家可以下载去深入研究一下,总体并不难。 但是 对于LMDI方法的解读以及stata实现的步骤、过程,目前基本没有具体的中文资料 。 本文在写论文的过程中,进行了总结,现上传上来供大家参考,里面包括stata的 程序文件(ado
IEC 60695-11-2-2017 第11-2部分:试验火焰——1kW标称预混合火焰——装置、验证试验安排和指南.pdf
基于matlab实现的拉普拉斯金字塔分解 做毕业设计的可以参考,小波变换以及MGA的初级参考.rar
本文档是课题研究的研究报告内含调研以及源码设计以及结果分析
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
制造企业数字化转型ERP与CRM系统集成定位及场景构建方案.pptx
触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板
【课程设计全套资料】基于JAVA的管理系统
IEC 60730-2-13-2017.pdf
机械设计谷物洗涤机sw12非常好的设计图纸100%好用.zip
2000—2022年东中西分区域空间权重矩阵,省级层面,具体包括01矩阵,经济矩 阵,地理矩阵,经济地理矩阵以及经济地理嵌套矩阵,包含原始数据和计算过程,经济地理 权重矩阵采用2000-2022年数据,可以更改研究期间,里面有计算过程,地理距离 是用的欧式距离,如有疑问可与我私聊哈,大家放心下载。
TMCM-0930-TMCL 硬件手册