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

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

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

    關 注 開 源 (王鋒的Blog)

    Spring Hibernate Jboss Tomcat SCA OSGI

    Tuscany SCA擴展機制研究(Interface,DataBinding)

    本節對Tuscany擴展中的Interface,DataBinding進行了探討,說明了兩種實現的目的以及如何進行擴展。Interface對提供的service進行接口的描述,服務元模型的一種描述方式,在使用是會對調用的服務進行接口匹配,來保證調用的服務的操作與服務定義的接口相一致。DataBinding提供了數據的轉換機制,能夠把業務數據按正確的方式傳遞給Component進行調用,通過實現接口DataBinding和Transformer來完成。

    3、 擴展Interface

    Interface擴展相對于implementation,binding來講,是相對簡單一點的擴展方式,對提供的service進行接口的描述,提供服務元模型的一種方式。Interface在使用是會對調用的服務進行接口匹配,來保證調用的服務的操作與服務定義的接口相一致。

    目前已實現的interface有Java,WebService1.1兩種方式。

    擴展步驟如下:

    a. 定義Interface上的擴展模型

    b. 定義InterfaceContract的擴展接口,來擴展自己的屬性

    c. 實現InterfaceContract接口,生成Interface的具體定義

    d. 定義對Interface節點的解析器,實現接口StAXArtifactProcessor,并在其read方法中生成InterfaceContract實例。

    e. 在ModuleActivator中注冊解析器,并在運行器中注冊

    4、Databinding擴展

    DataBinding提供了數據的轉換機制,能夠把業務數據按正確的方式傳遞給Component進行調用,通過實現接口DataBinding和Transformer來完成。

    DataBinding通過一字符中類型的ID進行區分,并且還可以為其指定別名,并且指定針對其ID所使用的一系列轉換器(Transformer),在使用過程中,會針對指定類型把一種數據類型轉換為另一種數據類型,實現接口數據的自動匹配。例如,我們定義了data1到data2數據類型的轉換器,那么在應用過程中,可以使用data1數據類型,也可以使用data2數據類型,框架會此進行判斷,并按轉換器定義的規則進行數據類型的轉換。

    要擴展新的DataBinding實現,通常通過以下幾個步驟:

    a. 擴展接口DataBinding,通常擴展抽象類BaseDataBinding就可以了

    a) 定義DataBinding的唯一標識和別名

    b) 處理操作的wrapping/unwrapping

    c) 定義數據的copy方式,傳值引用,相于對象的clone

    d) 定義正理異常的Handle

    b. 增加轉換器,把databinding中指定的類型轉換到不同的類型數據上,在Tuscany中會把所有的Transformer放到一張拓撲圖中,根據拓撲圖能找到從源類型—>目標類型轉換的最短路徑。通過實現PullTransformer/PushTransformer接口來完成

    a)接口定義了源和目標數據的類型以及其中的源到目標數據類型的轉換規則。

    b)Transformer有兩種類型的接口PullTransformer/PushTransformer,其中有一點小小的區別,PushTransformer在數據轉換方法transform中比PullTransformer多了一個參數,來表明數據的接收點(The sink to receive the data),有點像管道流的作用。

     下面以AxiomDataBinding轉換的示例,把字符串類型轉換為OMElement類型:

    1. public class String2OMElement extends BaseTransformer<String, OMElement> implements
    2. PullTransformer<String, OMElement> {
    3. @SuppressWarnings("unchecked")
    4. public OMElement transform(String source, TransformationContext context) {
    5. try {
    6. StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(source.getBytes()));
    7. OMElement element = builder.getDocumentElement();
    8. AxiomHelper.adjustElementName(context, element);
    9. return element;
    10. } catch (Exception e) {
    11. throw new TransformationException(e);
    12. }
    13. }
    14. public Class getTargetType() {
    15. return OMElement.class;
    16. }
    17. public Class getSourceType() {
    18. return String.class;
    19. }
    20. public int getWeight() {
    21. return 40;
    22. }
    23. }

    c、DataBinding加載

    其實現方式同Implementation,Binding,Interface,通過實現ModuleActivator接口完成。

    DataBinding的類圖如下:

    資源列表:

    Spec:http://www.osoa.org/display/Main/Home

    Tuscany Home:http://cwiki.apache.org/TUSCANY/

    Tuscany Code:https://svn.apache.org/repos/asf/incubator/tuscany/java/sca

    (全文完)

    posted on 2007-08-08 21:50 wangfeng 閱讀(1213) 評論(1)  編輯  收藏

    評論

    # re: Tuscany SCA擴展機制研究(Interface,DataBinding) 2007-08-09 11:45 阿不

    好,收藏起來,學習先!  回復  更多評論   


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲人6666成人观看| 亚洲精品高清国产一线久久| 亚洲国产亚洲片在线观看播放| 国产免费一区二区三区在线观看| 亚洲综合熟女久久久30p| 国产又黄又爽又大的免费视频| 久久精品国产亚洲精品| XXX2高清在线观看免费视频| 在线亚洲97se亚洲综合在线| 国产一级在线免费观看| 亚洲天天做日日做天天看 | 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 日韩精品无码永久免费网站| 亚洲成A人片在线观看无码3D| 一级做a爰片性色毛片免费网站| 亚洲中文字幕无码不卡电影| 日本卡1卡2卡三卡免费| 亚洲一区综合在线播放| 青草草色A免费观看在线| 中文字幕亚洲精品无码| 亚洲国产精品不卡毛片a在线| 成人网站免费大全日韩国产| 18亚洲男同志videos网站| 91在线视频免费91| 美美女高清毛片视频黄的一免费| 不卡精品国产_亚洲人成在线| 久久免费动漫品精老司机| 亚洲综合校园春色| 免费一级毛片一级毛片aa| 免费看少妇高潮成人片| 亚洲国产综合精品| 天堂亚洲免费视频| 可以免费观看的毛片| 在线观看肉片AV网站免费| 亚洲成a人片在线网站| 国产在线98福利播放视频免费| 你懂的在线免费观看| 亚洲国产精品成人精品软件| 免费萌白酱国产一区二区| 无码国产精品一区二区免费3p| 亚洲乱码av中文一区二区|