竹十一
          在匆忙與奔走中墮落

          Fabric3簡要入門

          Fabric3的關(guān)注源于對SOA的關(guān)注。最近SCA這個概念可是很火啊,而且Fabric3的背景有BEA,(Tuscany背后是IBM),剛剛在上海結(jié)束的BEA2007發(fā)布了WebLogic Server 10.3 Tech Preview,其中SCA的實現(xiàn)就是基于Fabric3的。而且Fabric3現(xiàn)在在codehaus上,codehuas可是出品了不少精品啊,XFire、MuleGroovyAspectWerkz等等,憑這點也值得關(guān)注下。

          SCA的概念就不多說了,本文關(guān)注的是如何用Fabric3開發(fā)最簡單的SCA應(yīng)用,用的是Calculator的例子。Fabric3Tuscany不約而同的選了這個作為例子,不知道是歷史淵源呢還是Calculator的典型性,有趣的問題:)。

          廢話不多說,先看代碼組織結(jié)構(gòu)圖

          編譯必須的庫(Eclipse: properties/Java Build Path


          環(huán)境準(zhǔn)備好了,下面開始編寫代碼。

          先看看我們要組織的SCA結(jié)構(gòu),這里為了減少本文篇幅只聲明兩個component,其余可以類似添加:

          <?xml version="1.0" encoding="UTF-8"?>
          <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" 
                     xmlns:fabric3
          ="http://fabric3.org/xmlns/sca/2.0-alpha"
                     name
          ="CalculatorComposite"
                     autowire
          ="true">
              
          <component name="calculator">
                  
          <implementation.java class="calculator.CalculatorServiceImpl"/>
              
          </component>
              
          <component name="adder">
                  
          <implementation.java class="calculator.AddServiceImpl"/>
              
          </component>
          </composite>

          很簡單,只有兩個component。首先看CalculatorServiceImpl:

          public class CalculatorServiceImpl implements CalculatorService {
              
          private AddService addService;
              @Reference
              
          public void setAddService(AddService addService) {
                  
          this.addService = addService;
              }
          }

          很簡單,僅有一點需要說明@Referenceorg.osoa.sca.annotations.Reference,負(fù)責(zé)組裝component。注意composite配置中的autowire="true",在calculator里面并沒顯示的添加對adder的引用。另外還有兩個annotation可以關(guān)注下,@Init和@Destroy,類似Junit里的setup和teardown,在component的每個方法調(diào)用前后執(zhí)行些初始、善后的工作。

          AddServiceAddServiceImpl很簡單,沒什么好說的。

          下面是CalculatorClient,讓我們來看看Fabric3的客戶端APITuscany有什么不同。

          public class CalculatorClient {
              
          public static void main(String[] args) throws Exception {
                  Domain domain 
          = new Domain();
                  URL url 
          = Thread.currentThread().getContextClassLoader().getResource("calculator.composite");
                  domain.activate(url);
                  CalculatorService calculator 
          = domain.connectTo(CalculatorService.class"calculator");
                  System.out.println(
          "0.2 + 0.6 = " + calculator.add(0.20.6));
              }
          }

          怎么說呢,除了用了不同的方法簽名之外和Tuscany好像大同小異:),都是先建立domain,然后拿到component進行操作。當(dāng)然建立domain進行裝配這一過程很多細(xì)節(jié)還是值得一挖的,本文限于主題和篇幅不去涉及這些主題,(關(guān)鍵是俺能力有限,挖不深:))。

          代碼準(zhǔn)備好了,下面來運行下。

          這里需要注意的是,光上面四個jar不足以運行Fabric3的例子,還需要Development Runtime中的/boot/system兩個文件夾下的內(nèi)容,層次結(jié)構(gòu)如上圖所示,放在工程目錄下就行了??梢栽?/span>http://fabric3.codehaus.org/Downloads下載Development Runtime,目前的版本是0.3。

          然后再次編譯運行,打印出結(jié)果,運行順利通過,OK。 

          本文只涉及了calculatoradder兩個component,其余三個操作各位同學(xué)可以做個練習(xí)J 還有文中提到的@Init@Destroy也可以同時嘗試下,更深入的主題還需要不斷的探索。


          備注

          Fabric3是另一個SCA的實現(xiàn)(http://fabric3.codehaus.org/)。寫這篇東東是為了介紹除Tuscany之外的SCA實現(xiàn)供大家參考,現(xiàn)在江湖中Tuscany很是流行,但畢竟,一枝獨秀不是春,百花齊放春滿園,拿Fabric3來比較下競爭下,不是要弄它個血雨腥風(fēng),而是為了江湖能夠更和諧。不過老實說,在組織這篇東東的過程中,確實為非技術(shù)性的因素所困擾――Fabric3在文檔方面確實非常非常缺乏。如果這點不改進的話,恐怕很難和Tuscany競爭。

          References
          http://fabric3.codehaus.org/
          http://dev2dev.bea.com/blog/editors/archive/2007/12/sca_for_weblogi.html

           

          posted on 2007-12-24 00:48 竹十一 閱讀(2518) 評論(1)  編輯  收藏 所屬分類: SOA
          Comments
          • # re: Fabric3簡要入門[未登錄]
            xmlspy
            Posted @ 2007-12-24 12:47
            什么web services,soa等等一對東西,800年前叫鬧哄哄的,不過至今都沒廣泛應(yīng)用,看了代碼,其實就是和以前一樣的東西換個名稱  回復(fù)  更多評論   
           
          主站蜘蛛池模板: 兴业县| 元氏县| 昌乐县| 淮南市| 库尔勒市| 当雄县| 宣化县| 晋江市| 仁化县| 民丰县| 定日县| 江门市| 寿宁县| 麦盖提县| 兴海县| 获嘉县| 凤城市| 勐海县| 韶山市| 紫云| 舟曲县| 电白县| 宁蒗| 岳池县| 搜索| 铅山县| 财经| 张家港市| 临沧市| 阿拉尔市| 江都市| 邵阳市| 榕江县| 精河县| 彩票| 哈密市| 平塘县| 延津县| 鹿邑县| 会理县| 祁阳县|