发表于: 2017-05-28 23:41:49
4 1679
今天完成的事:
1、稀里糊涂的将Tuscany计算器的例子跑通了(由于网上的例子都是几年前跑的,各方面与现在可能有些差距,现将详细内容贴出,方面后人)
开发环境:idea 2017.1.1 maven3.3.9 Java1.8 Tuscany 2.0.1(经测试Java1.6可以)
目录结构:
CalculatorServerClient.java
package com.jnshu.client;
import com.jnshu.service.Calculator;
import com.jnshu.service.ICalculator;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
import java.io.IOException;
/**
* Created by Tom on 2017/5/25.
*/
public class CalculatorServerClient {
public static void main(String[] args) throws IOException {
Node node = NodeFactory.newInstance().createNode("Calculator.composite");
node.start();
System.out.println("service启动");
ICalculator c = node.getService(Calculator.class,"CalculatorServiceComponent");
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));
node.stop();
}
}
Add.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public class Add implements IAdd{
public double add(double n1, double n2) {
return n1+n2;
}
}
Calculator.java
package com.jnshu.service;
import org.oasisopen.sca.annotation.Reference;
/**
* Created by Tom on 2017/5/25.
*/
public class Calculator implements ICalculator{
/**
* 引用其他组件IAdd,ISubtract,IMultiply,IDivide
* @Reference 说明引用其他组件 会和.composite文件进行配置
*/
private IAdd add;//加法组件
private ISubtract subtract;//减法组件
private IMultiply multiply;//乘法组件
private IDivide divide;//除法组件
public IAdd getAdd() {
return add;
}
@Reference
public void setAdd(IAdd add) {
this.add = add;
}
public ISubtract getSubtract() {
return subtract;
}
@Reference
public void setSubtract(ISubtract subtract) {
this.subtract = subtract;
}
public IMultiply getMultiply() {
return multiply;
}
@Reference
public void setMultiply(IMultiply multiply) {
this.multiply = multiply;
}
public IDivide getDivide() {
return divide;
}
@Reference
public void setDivide(IDivide divide) {
this.divide = divide;
}
@Override
public double add(double n1, double n2) {
return this.add.add(n1, n2);
}
@Override
public double subtract(double n1, double n2) {
return this.subtract.subtract(n1, n2);
}
@Override
public double divide(double n1, double n2) {
return this.divide.divide(n1, n2);
}
@Override
public double multiply(double n1, double n2) {
return this.multiply.multiply(n1, n2);
}
}
Divide.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public class Divide implements IDivide{
public double divide(double n1, double n2) {
return n1/n2;
}
}
IAdd.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public interface IAdd {
double add(double n1,double n2);
}
ICalculator.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public interface ICalculator {
/**
* 加法
*/
double add(double n1, double n2);
/**
* 减法
*/
double subtract(double n1, double n2);
/**
* 除法
*/
double divide(double n1, double n2);
/**
* 乘法
*/
double multiply(double n1, double n2);
}
IDivide.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public interface IDivide {
double divide(double n1,double n2);
}
IMultiply.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public interface IMultiply {
double multiply(double n1,double n2);
}
ISubtract.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public interface ISubtract {
double subtract(double n1,double n2);
}
Multiply.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public class Multiply implements IMultiply{
public double multiply(double n1, double n2) {
return n1*n2;
}
}
Subtract.java
package com.jnshu.service;
/**
* Created by Tom on 2017/5/25.
*/
public class Subtract implements ISubtract{
public double subtract(double n1, double n2) {
return n1-n2;
}
}
CalculatorClient.java //这个文件可以不要,和Tuscany没关系
package com.jnshu.client;
import com.jnshu.service.*;
/**
* Created by Tom on 2017/5/25.
*/
public class CalculatorClient {
public static void main(String [] args){
//java 实现方式
Calculator c = new Calculator();
IAdd add = new Add();
c.setAdd(add);
System.out.println("3 + 2 = "+c.add(3, 2));
ISubtract subtract = new Subtract();
c.setSubtract(subtract);
System.out.println("3 - 2 = "+c.subtract(3, 2));
IMultiply multiply = new Multiply();
c.setMultiply(multiply);
System.out.println("3 * 2 = "+c.multiply(3, 2));
IDivide divide= new Divide();
c.setDivide(divide);
System.out.println("3 / 2 = "+c.divide(3, 2));
}
}
Calculator.composite
<composite
xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
targetNamespace="http://com.jnshu"
name="Calculator">
<!--xmlns="http://www.osoa.org/xmlns/sca/1.0"-->
<component name="CalculatorServiceComponent">
<implementation.java class="com.jnshu.service.Calculator" />
<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="com.jnshu.service.Add" />
</component>
<component name="SubtractComponent">
<implementation.java class="com.jnshu.service.Subtract" />
</component>
<component name="MultiplyComponent">
<implementation.java class="com.jnshu.service.Multiply" />
</component>
<component name="DivideComponent">
<implementation.java class="com.jnshu.service.Divide" />
</component>
</composite>
pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jnshu</groupId>
<artifactId>Task09Test</artifactId>
<version>1.0-SNAPSHOT</version>
<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>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
运行结果:
注意事项:
Calculator.composite文件copy到idea中如果出现下面的爆红那么你就是对的如果你把它改的不红了你就错了
项目的jar包手动可动导入;下载Zip压缩包:(pom文件中少了一个api的jar是不影响运行的)
下载地址:http://archive.apache.org/dist/tuscany/java/sca/2.0.1/
遇到的问题:
今天本来是参照这个例子跑的结果没跑通(对Tuscany加载文件的路径很是不解)
http://blog.csdn.net/samurais/article/details/6857913
如果后边有哪位跑通了的话,望能借我一观
明天计划的事:尝试spring+Tuscany拆分service和web。
收获:idea的报错有的时候不能相信,(就是因为相信才让我整了三天)
总结:有时候感觉自己是比较倔的,遇到了问题比较喜欢自己死磕。这三天该怎么说呢,花的时间太长了却只跑通一个简单的例子,这感受又让我回到了学springMVC的时候(怀疑了人生,并萌生了转线上的念头)
评论