先来看看整个项目的代码架构
com.ajun.tuscany.server包主要是加减乘除法的java接口和计算器接口和计算器实现类。
com.ajun.tuscany.script主要是用脚本语言来实现加减乘法服务功能。
com.ajun.tuscany.client客户端调用。
server包主要代码:
IAdd.java
package com.ajun.tuscany.server; /** * 加法接口 * @author ajun * @e-mail [email protected] * @blog http://blog.csdn.net/ajun_studio * @version 创建时间:2012-7-19 下午9:47:25 */ public interface IAdd { double add(double n1,double n2); }
package com.ajun.tuscany.server; /** * 减法接口 * @author ajun * @e-mail [email protected] * @blog http://blog.csdn.net/ajun_studio * @version 创建时间:2012-7-19 下午9:52:00 */ public interface ISubtract { double subtract(double n1,double n2); }
package com.ajun.tuscany.server; /** * 乘法接口 * @author ajun * @e-mail [email protected] * @blog http://blog.csdn.net/ajun_studio * @version 创建时间:2012-7-19 下午9:50:47 */ public interface IMultiply { double multiply(double n1,double n2); }
package com.ajun.tuscany.server; /** * 除法接口 * @author ajun * @e-mail [email protected] * @blog http://blog.csdn.net/ajun_studio * @version 创建时间:2012-7-19 下午9:48:53 */ public interface IDivide { double divide(double n1,double n2); }
package com.ajun.tuscany.server; /** * 计算机接口 * @author ajun * @e-mail [email protected] * @blog http://blog.csdn.net/ajun_studio * @version 创建时间:2012-7-19 下午10:02:20 */ public interface ICalculator { /** * 加法 * @param n1 * @param n2 * @return */ double add(double n1,double n2); /** * 减法 * @param n1 * @param n2 * @return */ double subtract(double n1,double n2); /** * 除法 * @param n1 * @param n2 * @return */ double divide(double n1,double n2); /** * 乘法 * @param n1 * @param n2 * @return */ double multiply(double n1,double n2); }
package com.ajun.tuscany.server; import org.osoa.sca.annotations.Reference; 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) { System.out.println("Server add"); return this.add.add(n1, n2); } @Override public double subtract(double n1, double n2) { System.out.println("Server subtract"); return this.subtract.subtract(n1, n2); } @Override public double divide(double n1, double n2) { System.out.println("Server divide"); return this.divide.divide(n1, n2); } @Override public double multiply(double n1, double n2) { System.out.println("Server multiply"); return this.multiply.multiply(n1, n2); } }
AddService.js
//加法,用js实现 function add(n1,n2){ return n1+n2; }
//用Groovy实现除法 def divide(n1,n2){ return n1/n2 }
#用python实现 def multiply(n1,n2): return n1*n2
#减法用Ruby实现 def subtract(n1,n2) return n1-n2 end
<?xml version="1.0" encoding="UTF-8"?> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0" targetNamespace="http://calc" xmlns:c="http://calc" name="Calculator" > <component name="CalculatorServiceComponent"> <implementation.java class="com.ajun.tuscany.server.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"> <tuscany:implementation.script script="com/ajun/tuscany/script/AddService.js"/> </component> <component name="SubtractComponent"> <tuscany:implementation.script script="com/ajun/tuscany/script/SubtractService.rb"/> </component> <component name="MultiplyComponent"> <tuscany:implementation.script script="com/ajun/tuscany/script/MultiplyService.py"/> </component> <component name="DivideComponent"> <tuscany:implementation.script script="com/ajun/tuscany/script/DivideService.groovy"/> </component> </composite>
CalculatorServerClient.java
package com.ajun.tuscany.client; import org.apache.tuscany.sca.host.embedded.SCADomain; import com.ajun.tuscany.server.Calculator; import com.ajun.tuscany.server.ICalculator; /** * 服务端调用 * @author ajun * @e-mail [email protected] * @blog http://blog.csdn.net/ajun_studio * @version 创建时间:2012-7-19 下午11:12:44 */ public class CalculatorServerClient { public static void main(String [] args){ SCADomain domain = SCADomain.newInstance("com/ajun/tuscany/server/Calculator.composite"); ICalculator c = domain.getService(Calculator.class, "CalculatorServiceComponent"); 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)); } }
运行:
2012-7-26 21:55:32 org.apache.tuscany.sca.node.impl.NodeImpl <init> 信息: Creating node: com/ajun/tuscany/server/Calculator.composite 2012-7-26 21:55:33 org.apache.tuscany.sca.node.impl.NodeImpl configureNode 信息: Loading contribution: file:/E:/springdm/Calculator_script/bin/ 2012-7-26 21:55:36 org.apache.tuscany.sca.node.impl.NodeImpl start 信息: Starting node: com/ajun/tuscany/server/Calculator.composite Server add 3 + 2 = 5.0 Server subtract 3 - 2 = 1.0 Server multiply 3 * 2 = 6.0 Server divide 3 / 2 = 1.5