<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    Tuscany 2 的基本配置與流程

    實習期間mentor讓看看Tuscany——apache的一個頂級項目。之前一直沒有接觸過,聽mentor說了下用途過后,感覺其像是alibaba的分布式服務框架Dubbo,簡要看了看,似乎和RMI也有相關性??傊彩敲嫦蚍盏姆植际娇蚣?。經過一下午的嘗試,發現Tuscany 2和Tuscany 1還是有比較大的不同(API方面、設計思想沒有深入研究不知道),網上關于Tuscany的資料也不多,所以在此寫文章mark一下。

    Tuscany 1的API參考這位博主http://blog.csdn.net/ajun_studio/article/details/7770023


    1. 準備

    首先是在工程中引入Tuscany 2.0.1的jar包,從一個Apache的China鏡像上不難找到(PS:Tuscany 1在官網上已經不維護了)。

    工程需要實現客戶端調用遠程服務器端的服務的功能。該項目中調用遠程完成“加”的功能。


    2. 入門

    首先添加IAdd接口

    package com.ajun.tuscany.server;  
      
    public interface IAdd {  
        double add(double n1,double n2);  
    }  
    然后是實現類Add

    package com.ajun.tuscany.server;  
      
    public class Add implements IAdd {  
      
        @Override  
        public double add(double n1, double n2) {  
            // TODO Auto-generated method stub  
            return n1 + n2;  
        }  
      
    加減乘除都屬于“計算”類,此處為了簡便,只實現“加”方法。然后是“計算”的接口。

    package com.ajun.tuscany.server;  
      
    public interface ICalculator {  
        double add(double n1, double n2);  
    }  
    然后是“計算”的實現,注意一定要在setter中加入@Reference,否則會報錯,這里類似于Spring的注入。

    package com.ajun.tuscany.server;  
      
    import org.oasisopen.sca.annotation.Reference;  
      
    public class Calculator implements ICalculator {  
      
        private IAdd add;  
      
        public IAdd getAdd() {  
            return add;  
        }  
      
        @Reference  
        public void setAdd(IAdd add) {  
            this.add = add;  
        }  
      
        @Override  
        public double add(double n1, double n2) {  
            // TODO Auto-generated method stub  
            return this.add.add(n1, n2);  
        }  
      
    }  
    到此,基本的業務邏輯類就編寫好了,接下來,是Tuscany中重要的配置文件,即XXX.composite,其本質也是一個xml。如果不是面向分布式服務,該xml文件結構類似Spring的application.xml。下面是Calculator.composite,注意配置文件中reference,name標記為add,應該也是同Spring的大寫首字母規則,通過settrt注入。

    <?xml version="1.0" encoding="UTF-8"?>           
    <composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"  
               xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"  
               targetNamespace="http://sample"  
               xmlns:sample="http://sample"  
               xmlns:scallop="http://scallop/xmlns/sca/1.1"   
               name="Calculator" >    
          
        <component name="CalculatorServiceComponent">    
            <implementation.java class="com.ajun.tuscany.server.Calculator" />  
            <reference name="add" target="AddComponent"/>     
        </component>    
              
        <component name="AddComponent">    
            <implementation.java class="com.ajun.tuscany.server.Add" />    
        </component>    
          
    </composite>   

    最后是運行main的類

    package com.ajun.tuscany.server;  
      
    import org.apache.tuscany.sca.node.Node;  
    import org.apache.tuscany.sca.node.NodeFactory;  
      
    public class StartService {  
      
        public static void main(String[] args) {  
            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));  
        }  
      
    運行輸出如下

    2014-11-10 17:39:24 org.apache.tuscany.sca.node.impl.NodeFactoryImpl loadContributions
    信息: Loading contribution: file:/E:/HuRanjie/EclipseWorkspace/Calculatoer_01/bin/
    2014-11-10 17:39:24 org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerService
    信息: RMI service registered: rmi://127.0.0.1:8099/CalculatorRMIService
    2014-11-10 17:39:24 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
    信息: Add endpoint - binding.rmi - rmi://127.0.0.1:8099/CalculatorRMIService
    2014-11-10 17:39:24 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
    信息: Add endpoint - binding.sca - AddComponent/Add
    service啟動
    4.0


    3. 遠程調用rmi

    上面并沒有將“計算”類作為一個服務,暴露給遠程調用,只是實現了本地的裝配。下面將其作為服務給遠程調用,后面可以看到,只需要暴露一個包括host、port、serviceName


    首先,修改配置文件,修改為如下樣子——在本地(127.0.0.1)的8099端口暴露出名字為CalculatorRMIService的服務

    <?xml version="1.0" encoding="UTF-8"?>           
    <composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"  
               xmlns:tuscany
    ="http://tuscany.apache.org/xmlns/sca/1.1"  
               targetNamespace
    ="http://sample"  
               xmlns:sample
    ="http://sample"  
               xmlns:scallop
    ="http://scallop/xmlns/sca/1.1"   
               name
    ="Calculator" >    
          
        <component name="CalculatorServiceComponent">    
            <implementation.java class="com.ajun.tuscany.server.Calculator" />  
              
            <service name="Calculator">    
                <interface.java interface="com.ajun.tuscany.server.ICalculator"/>    
                <tuscany:binding.rmi uri="rmi://127.0.0.1:8099/CalculatorRMIService"/>    
            </service>  
              
            <reference name="add" target="AddComponent"/>     
        </component>    
              
        <component name="AddComponent">    
            <implementation.java class="com.ajun.tuscany.server.Add" />    
        </component>    
          
    </composite>   

    服務器端的main主要功能是啟動該服務,如下

    package com.ajun.tuscany.server;  
      
    import org.apache.tuscany.sca.node.Node;  
    import org.apache.tuscany.sca.node.NodeFactory;  
      
    public class StartService {  
      
        public static void main(String[] args) {  
            Node node = NodeFactory.newInstance().createNode(  
                    "Calculator.composite");  
            node.start();  
            System.out.println("service啟動");  
        }  
      

    客戶端通過rmi調用服務器端的服務,來實現功能,如下

    package com.ajun.tuscany.client;  
      
    import java.rmi.Naming;  
    import com.ajun.tuscany.server.ICalculator;  
      
    public class CalculatorClient {  
      
        public static void main(String[] args) throws Exception {  
             ICalculator c= (ICalculator) Naming.lookup("http://127.0.0.1:8099/CalculatorRMIService");    
             System.out.println(c.add(1, 2));    
        }  
    }  

    啟動服務端輸出


    2014-11-10 18:00:30 org.apache.tuscany.sca.node.impl.NodeImpl start
    信息: Starting node: http://tuscany.apache.org/sca/1.1/nodes/default0 domain: default
    2014-11-10 18:00:30 org.apache.tuscany.sca.node.impl.NodeFactoryImpl loadContributions
    信息: Loading contribution: file:/E:/HuRanjie/EclipseWorkspace/Calculatoer_01/bin/
    2014-11-10 18:00:31 org.apache.tuscany.sca.host.rmi.DefaultRMIHost registerService
    信息: RMI service registered: rmi://127.0.0.1:8099/CalculatorRMIService
    2014-11-10 18:00:31 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
    信息: Add endpoint - binding.rmi - rmi://127.0.0.1:8099/CalculatorRMIService
    2014-11-10 18:00:31 org.apache.tuscany.sca.core.assembly.impl.DomainRegistryImpl addEndpoint
    信息: Add endpoint - binding.sca - AddComponent/Add
    service啟動

    客戶端輸出

    3.0

    posted on 2014-12-24 14:07 paulwong 閱讀(1828) 評論(0)  編輯  收藏 所屬分類: SOA


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日本黄网站动漫视频免费| 免费鲁丝片一级在线观看| 亚洲另类自拍丝袜第1页| 午夜寂寞在线一级观看免费| 国产精品偷伦视频免费观看了| 91精品国产亚洲爽啪在线观看| 午夜视频免费观看| 99久久婷婷免费国产综合精品| 亚洲成人网在线观看| 日韩亚洲国产二区| 91福利免费体验区观看区| 国产精品亚洲综合| 亚洲视频免费一区| 亚洲电影日韩精品 | 亚洲日韩v无码中文字幕| 19禁啪啪无遮挡免费网站| 美女黄频a美女大全免费皮| 亚洲天堂男人天堂| 亚洲A∨午夜成人片精品网站| 亚洲精品视频在线免费| a级毛片免费观看网站| 亚洲综合成人婷婷五月网址| 亚洲精品高清无码视频| 国产男女猛烈无遮挡免费视频网站| 四虎影视无码永久免费| 特级毛片全部免费播放| 亚洲成a人片在线观看精品| 亚洲成A人片在线观看WWW| 又粗又硬免费毛片| 18禁止观看免费私人影院| a在线视频免费观看| 日韩成人精品日本亚洲| 久久精品国产99国产精品亚洲| 亚洲AV午夜成人影院老师机影院 | 中文字幕免费在线| 久久精品成人免费观看97| 国产综合激情在线亚洲第一页| 亚洲国产成人久久精品app| 亚洲A∨无码无在线观看| 久久久精品国产亚洲成人满18免费网站 | 在线观看免费视频网站色|