`
zwm
  • 浏览: 272981 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

TuscanySCA以独立方式运行的简单例子收藏

阅读更多

这个例子是基于tuscany-sca-1.0--incubator-M2环境的。

可以从http://incubator.apache.org/tuscany/sca_downloads.html 下载相关的运行环境和例子的代码。

SCA规范中,component被定义为执行代码的基本单元。每个component对外提供一个功能。在本例子中共有五个component,其中有四个分别实现了加法、减法、乘法和除法的功能。

 

Compostie作为发布的单元,在每一个配置文件中都是以composite作为XML文档的根元素。

Composite包含0...nComponent,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环境启动过程中完成的。

CompositeServcie的名称是CalculatorServiceCalculatorService对外提供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>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics