TUSCANY SCA JAVA (二) 入門

來源:互聯網
上載者:User

準備工作:

 開發工具:Eclipse,這裡用的是eclipse-jee-juno-win32,你可以更新eclipse soa相關外掛程式

有利於以後的開發和可視化的操作

tuscany  jar包,網址:http://tuscany.apache.org/sca-java-1x-releases.html

下載第一個,解壓出來,找到lib,全部選中,在Eclipse裡自訂一個tuscany的庫,以後方便直接用。

例子:計算機加減乘除運算。

首先看看計算機組合構件的裝配圖:

其中包括了CalculatorServiceComponent,AddComponent,SubtractComponent,MultiplyComponent,DivideComponent這些組件。

CalculatorServiceComponent引用了其他的組件,CalculatorServiceComponent作為組合構件的服務。

整體代碼結構如:

為了實現電腦功能,首先來設計相關介面和實作類別

加法介面IAdd.java

package com.ajun.tuscany.server;/** * 加法介面 * @author ajun * @e-mail zhaojun2066@gmail.com * @blog http://blog.csdn.net/ajun_studio * @version 建立時間:2012-7-19  下午9:47:25 */public interface IAdd {double add(double n1,double n2);}

加法實作類別:Add.java

package com.ajun.tuscany.server;public class Add implements IAdd {@Overridepublic double add(double n1, double n2) {return n1+n2;}}

減法介面:ISubtract.java

package com.ajun.tuscany.server;/** * 減法介面 * @author ajun * @e-mail zhaojun2066@gmail.com * @blog http://blog.csdn.net/ajun_studio * @version 建立時間:2012-7-19  下午9:52:00 */public interface ISubtract {double subtract(double n1,double n2);}

減法實作類別:Subtract.java

package com.ajun.tuscany.server;public class Subtract implements ISubtract {@Overridepublic double subtract(double n1, double n2) {return n1-n2;}}

乘法介面:IMultiply.java

package com.ajun.tuscany.server;/** * 乘法介面 * @author ajun * @e-mail zhaojun2066@gmail.com * @blog http://blog.csdn.net/ajun_studio * @version 建立時間:2012-7-19  下午9:50:47 */public interface IMultiply {double multiply(double n1,double n2);}

乘法實作類別:Multiply.java

package com.ajun.tuscany.server;public class Multiply implements IMultiply {@Overridepublic double multiply(double n1, double n2) {return n1*n2;}}

除法介面:IDivide.java

package com.ajun.tuscany.server;/** * 除法介面 * @author ajun * @e-mail zhaojun2066@gmail.com * @blog http://blog.csdn.net/ajun_studio * @version 建立時間:2012-7-19  下午9:48:53 */public interface IDivide {double divide(double n1,double n2);}

除法實作類別:Divide.java

package com.ajun.tuscany.server;public class Divide implements IDivide {@Overridepublic double divide(double n1, double n2) {return n1/n2;}}

電腦介面:ICalculator.java,對外提供了四個服務作業,加減乘除

package com.ajun.tuscany.server;/** * 電腦介面 * @author ajun * @e-mail zhaojun2066@gmail.com * @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);}

電腦介面實作類別:Calculator.java,引用其他四個組件IAdd,ISubtract,IMultiply,IDivide,並調用了對應的方法

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;}@Referencepublic void setAdd(IAdd add) {this.add = add;}public ISubtract getSubtract() {return subtract;}@Referencepublic void setSubtract(ISubtract subtract) {this.subtract = subtract;}public IMultiply getMultiply() {return multiply;}@Referencepublic void setMultiply(IMultiply multiply) {this.multiply = multiply;}public IDivide getDivide() {return divide;}@Referencepublic void setDivide(IDivide divide) {this.divide = divide;}@Overridepublic double add(double n1, double n2) {return this.add.add(n1, n2);}@Overridepublic double subtract(double n1, double n2) {return this.subtract.subtract(n1, n2);}@Overridepublic double divide(double n1, double n2) {return this.divide.divide(n1, n2);}@Overridepublic double multiply(double n1, double n2) {return this.multiply.multiply(n1, n2);}}

其中set方法上的@Reference 說明引用其他組件 會和.composite檔案進行配置,來產生相應的類的執行個體。

至此以上為整個代碼的服務端,下面我們用一般思路來實現用戶端調用服務端。

package com.ajun.tuscany.client;import com.ajun.tuscany.server.Add;import com.ajun.tuscany.server.Calculator;import com.ajun.tuscany.server.Divide;import com.ajun.tuscany.server.IAdd;import com.ajun.tuscany.server.IDivide;import com.ajun.tuscany.server.IMultiply;import com.ajun.tuscany.server.ISubtract;import com.ajun.tuscany.server.Multiply;import com.ajun.tuscany.server.Subtract;/** * 普通java用戶端 * @author ajun * @e-mail zhaojun2066@gmail.com * @blog http://blog.csdn.net/ajun_studio * @version 建立時間:2012-7-19  下午10:26:17 */public class CalculatorClient {public static void main(String [] args){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));}}

運行結果:

3 + 2 = 5.0
3 - 2 = 1.0
3 * 2 = 6.0
3 / 2 = 1.5

以上程式並沒有用tuscany的工廠來產生對象,完全利用java編程的特性。

要利用tuscany工廠,需要一個.composite結尾的xml檔案,下面是以上電腦群組件的xml檔案

<?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"><implementation.java class="com.ajun.tuscany.server.Add" /></component><component name="SubtractComponent"><implementation.java class="com.ajun.tuscany.server.Subtract" /></component><component name="MultiplyComponent"><implementation.java class="com.ajun.tuscany.server.Multiply" /></component><component name="DivideComponent"><implementation.java class="com.ajun.tuscany.server.Divide" /></component></composite>

說明:組合構件的名字:Calculator

           電腦構件的名字:CalculatorServiceComponent

           <implementation.java class="com.ajun.tuscany.server.Calculator" />設定實作類別,採用了java的實現方式,對應的實作類別為:om.ajun.tuscany.server.Calculator

         <reference name="add" target="AddComponent"/>引用其他組件 其中add必須和Calculator的set方法對應。

用戶端程式代碼:

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 zhaojun2066@gmail.com * @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));}}

說明:

SCADomain domain = SCADomain.newInstance("com/ajun/tuscany/server/Calculator.composite"); 相當於spring 讀取設定檔,進行執行個體化裡的對象。

ICalculator c = domain.getService(Calculator.class, "CalculatorServiceComponent"); 獲得執行個體對象 ,相當於spring的getBean();

運行輸出結果:

2012-7-21 13:39:03 org.apache.tuscany.sca.node.impl.NodeImpl <init>
資訊: Creating node: com/ajun/tuscany/server/Calculator.composite
2012-7-21 13:39:07 org.apache.tuscany.sca.node.impl.NodeImpl configureNode
資訊: Loading contribution: file:/E:/springdm/Calculatoer_01/bin/
2012-7-21 13:39:11 org.apache.tuscany.sca.node.impl.NodeImpl start
資訊: Starting node: com/ajun/tuscany/server/Calculator.composite
3 + 2 = 5.0
3 - 2 = 1.0
3 * 2 = 6.0
3 / 2 = 1.5

到此整個tuscany入門結束。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.