发表于: 2019-05-27 22:19:13

1 524


今天完成的事情:

Tusacny的学习

Tusacny的几个关键的知识名词

1.component构件:构件是sac装配和表达的基本单元,它可以提供服务或引用其他构件

2.组合构件:多个构件组合

3.implementation实现:构件实现所需要的方法,语言

4.properties属性:构件所需要的属性,可以外部传递

5.references引用:用来连接其他构件或组合构件

6.services服务:用于将构件或者组合构件采用一定的协议和访问方式,来为外部程序提供访问。

Tuscany的demo

服务端

mevan依赖

<dependencies>
   <!--https://mvnrepository.com/artifact/org.apache.tuscany.sca/tuscany-base-runtime-->
   <dependency>
       <groupId>org.apache.tuscany.sca</groupId>
       <artifactId>tuscany-base-runtime</artifactId>
       <version>2.0.1</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/org.apache.tuscany.sca.aggregation/tuscany-binding-rmi-runtime-aggregation -->
   <dependency>
       <groupId>org.apache.tuscany.sca.aggregation</groupId>
       <artifactId>tuscany-binding-rmi-runtime-aggregation</artifactId>
       <version>2.0.1</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/org.apache.tuscany.sca.aggregation/tuscany-binding-ws-runtime-axis2-aggregation -->
   <dependency>
       <groupId>org.apache.tuscany.sca.aggregation</groupId>
       <artifactId>tuscany-binding-ws-runtime-axis2-aggregation</artifactId>
       <version>2.0.1</version>
   </dependency>
</dependencies>

新建接口加减乘除

加法

package service;

public interface AddInterface {
public double add(double n1, double n2);
}

加法实现类

package service.impl;

import service.AddInterface;

public class AddInterfaceImpl implements AddInterface {
public double add(double n1, double n2) {
return n1+n2;
   }
}

减法

package service;

public interface SubtractInterface {
public double subtract(double n1, double n2);
}

减法实现类

package service.impl;

import service.SubtractInterface;

public class SubtractInterfaceImpl implements SubtractInterface {
public double subtract(double n1, double n2) {
return n1-n2;
   }
}

乘法

package service;

public interface MultiplyInterface {
public double multiply(double n1, double n2);
}

乘法实现

package service.impl;

import service.MultiplyInterface;

public class MultiplyInterfaceImpl implements MultiplyInterface {
public double multiply(double n1, double n2) {
return n1*n2;
   }
}

除法

package service;

public interface DivideInterface {
public double divide(double n1, double n2);
}

除法实现

package service.impl;

import service.DivideInterface;

public class DivideInterfaceImpl implements DivideInterface {
public double divide(double n1, double n2) {
try {
return n1 / n2;
       } catch (Exception e) {
return 0;
       }
}
}

创建计算接口用于暴露给客户端

package service;

public interface CalculatorInterface {
public double add(double n1, double n2);
   public double divide(double n1, double n2);
   public double subtract(double n1, double n2);
   public double multiply(double n1, double n2);
}

计算接口实现类

package service.impl;

import org.oasisopen.sca.annotation.Reference;
import service.*;

public class Calculator implements CalculatorInterface {
private AddInterface add;
   private SubtractInterface subtract;
   private MultiplyInterface multiply;
   private DivideInterface divide;

   public AddInterface getAdd() {
return add;
   }
@Reference
   public void setAdd(AddInterface add) {
this.add = add;
   }

public SubtractInterface getSubtract() {
return subtract;
   }
@Reference
   public void setSubtract(SubtractInterface subtract) {
this.subtract = subtract;
   }

public MultiplyInterface getMultiply() {
return multiply;
   }
@Reference
   public void setMultiply(MultiplyInterface multiply) {
this.multiply = multiply;
   }

public DivideInterface getDivide() {
return divide;
   }
@Reference
   public void setDivide(DivideInterface divide) {
this.divide = divide;
   }

public double add(double n1, double n2) {
return n1+n2;
   }

public double divide(double n1, double n2) {
try {
return n1 / n2;
       } catch (Exception e) {
return 0;
       }
}

public double subtract(double n1, double n2) {
return n1-n2;
   }

public double multiply(double n1, double n2) {
return n1*n2;
   }
}

在set方法上需要加上@Reference 类似于spring中的set注入

Tuscany的配置文件是composite格式,本质上也是一个xml文件,我们需要在idea中对xml添加此格式

<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
          name="Calculator" targetNamespace="http://com.jnshu"
          xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1">

   <!--组合构件-->
<component name="CalculatorServiceComponent">
   <!--实现-->
   <implementation.java class="service.impl.Calculator"/>
   <!--暴露服务-->
   <service name="Calculator">
       <interface.java interface="service.CalculatorInterface"/>
       <tuscany:binding.rmi uri="rmi://127.0.0.1:8090/CalculatorRMI"/>
   </service>

   <!--引用-->
   <reference name="add" target="AddComponent"/>
   <reference name="subtract" target="SubtractComponent"/>
   <reference name="multiply" target="MultiplyComponent"/>
   <reference name="divide" target="DivideComponent"/>


</component>

   <!--构件    组合构件中引用的实现-->
   <component name="AddComponent">
       <implementation.java class="service.impl.AddInterfaceImpl"/>
   </component>
   <component name="SubtractComponent">
       <implementation.java class="service.impl.SubtractInterfaceImpl"/>
   </component>
   <component name="MultiplyComponent">
       <implementation.java class="service.impl.MultiplyInterfaceImpl"/>
   </component>
   <component name="DivideComponent">
       <implementation.java class="service.impl.DivideInterfaceImpl"/>
   </component>
</composite>

标签报红不管它。这样服务端就写好了。

启动方法

import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;

public class TestMain {
public static void main(String[] args) {
Node node = NodeFactory.newInstance().createNode("Calculator.composite");
       node.start();
       System.out.println("service启动");

测试端,同样导依赖包

加入服务端暴露的计算接口

package service;

public interface CalculatorInterface {
public double add(double n1, double n2);
   public double divide(double n1, double n2);
   public double subtract(double n1, double n2);
   public double multiply(double n1, double n2);
}

运行测试方法

package main;

import service.CalculatorInterface;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class CliMain {
public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {
CalculatorInterface c = (CalculatorInterface) Naming.lookup("//127.0.0.1:8090/CalculatorRMI");
       System.out.println(c.add(2, 2));
       System.out.println("3 + 2 = " + c.add(3, 2));
       System.out.println("3 - 2 = " + c.subtract(3, 2));
       System.out.println("3 * 2 = " + c.multiply(3, 2));
       System.out.println("3 / 2 = " + c.divide(3, 2));
   }
}

明天计划的事情:

尝试去集成spring
遇到的问题:

远程暴露的时候会报错没有实现的方法,需要手动打头文件。
收获:

Tuscany远程暴露服务


返回列表 返回列表
评论

    分享到