關(guān) 注 開(kāi) 源 (王鋒的Blog)

          Spring Hibernate Jboss Tomcat SCA OSGI

          Tuscany SCA擴(kuò)展機(jī)制研究(Interface,DataBinding)

          本節(jié)對(duì)Tuscany擴(kuò)展中的Interface,DataBinding進(jìn)行了探討,說(shuō)明了兩種實(shí)現(xiàn)的目的以及如何進(jìn)行擴(kuò)展。Interface對(duì)提供的service進(jìn)行接口的描述,服務(wù)元模型的一種描述方式,在使用是會(huì)對(duì)調(diào)用的服務(wù)進(jìn)行接口匹配,來(lái)保證調(diào)用的服務(wù)的操作與服務(wù)定義的接口相一致。DataBinding提供了數(shù)據(jù)的轉(zhuǎn)換機(jī)制,能夠把業(yè)務(wù)數(shù)據(jù)按正確的方式傳遞給Component進(jìn)行調(diào)用,通過(guò)實(shí)現(xiàn)接口DataBinding和Transformer來(lái)完成。

          3、 擴(kuò)展Interface

          Interface擴(kuò)展相對(duì)于implementation,binding來(lái)講,是相對(duì)簡(jiǎn)單一點(diǎn)的擴(kuò)展方式,對(duì)提供的service進(jìn)行接口的描述,提供服務(wù)元模型的一種方式。Interface在使用是會(huì)對(duì)調(diào)用的服務(wù)進(jìn)行接口匹配,來(lái)保證調(diào)用的服務(wù)的操作與服務(wù)定義的接口相一致。

          目前已實(shí)現(xiàn)的interface有Java,WebService1.1兩種方式。

          擴(kuò)展步驟如下:

          a. 定義Interface上的擴(kuò)展模型

          b. 定義InterfaceContract的擴(kuò)展接口,來(lái)擴(kuò)展自己的屬性

          c. 實(shí)現(xiàn)InterfaceContract接口,生成Interface的具體定義

          d. 定義對(duì)Interface節(jié)點(diǎn)的解析器,實(shí)現(xiàn)接口StAXArtifactProcessor,并在其read方法中生成InterfaceContract實(shí)例。

          e. 在ModuleActivator中注冊(cè)解析器,并在運(yùn)行器中注冊(cè)

          4、Databinding擴(kuò)展

          DataBinding提供了數(shù)據(jù)的轉(zhuǎn)換機(jī)制,能夠把業(yè)務(wù)數(shù)據(jù)按正確的方式傳遞給Component進(jìn)行調(diào)用,通過(guò)實(shí)現(xiàn)接口DataBinding和Transformer來(lái)完成。

          DataBinding通過(guò)一字符中類型的ID進(jìn)行區(qū)分,并且還可以為其指定別名,并且指定針對(duì)其ID所使用的一系列轉(zhuǎn)換器(Transformer),在使用過(guò)程中,會(huì)針對(duì)指定類型把一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型,實(shí)現(xiàn)接口數(shù)據(jù)的自動(dòng)匹配。例如,我們定義了data1到data2數(shù)據(jù)類型的轉(zhuǎn)換器,那么在應(yīng)用過(guò)程中,可以使用data1數(shù)據(jù)類型,也可以使用data2數(shù)據(jù)類型,框架會(huì)此進(jìn)行判斷,并按轉(zhuǎn)換器定義的規(guī)則進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。

          要擴(kuò)展新的DataBinding實(shí)現(xiàn),通常通過(guò)以下幾個(gè)步驟:

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

          a) 定義DataBinding的唯一標(biāo)識(shí)和別名

          b) 處理操作的wrapping/unwrapping

          c) 定義數(shù)據(jù)的copy方式,傳值引用,相于對(duì)象的clone

          d) 定義正理異常的Handle

          b. 增加轉(zhuǎn)換器,把databinding中指定的類型轉(zhuǎn)換到不同的類型數(shù)據(jù)上,在Tuscany中會(huì)把所有的Transformer放到一張拓?fù)鋱D中,根據(jù)拓?fù)鋱D能找到從源類型—>目標(biāo)類型轉(zhuǎn)換的最短路徑。通過(guò)實(shí)現(xiàn)PullTransformer/PushTransformer接口來(lái)完成

          a)接口定義了源和目標(biāo)數(shù)據(jù)的類型以及其中的源到目標(biāo)數(shù)據(jù)類型的轉(zhuǎn)換規(guī)則。

          b)Transformer有兩種類型的接口PullTransformer/PushTransformer,其中有一點(diǎn)小小的區(qū)別,PushTransformer在數(shù)據(jù)轉(zhuǎn)換方法transform中比PullTransformer多了一個(gè)參數(shù),來(lái)表明數(shù)據(jù)的接收點(diǎn)(The sink to receive the data),有點(diǎn)像管道流的作用。

           下面以AxiomDataBinding轉(zhuǎn)換的示例,把字符串類型轉(zhuǎn)換為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加載

          其實(shí)現(xiàn)方式同Implementation,Binding,Interface,通過(guò)實(shí)現(xiàn)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 閱讀(1217) 評(píng)論(1)  編輯  收藏

          評(píng)論

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

          好,收藏起來(lái),學(xué)習(xí)先!  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 密云县| 高清| 安图县| 综艺| 长丰县| 恩平市| 大连市| 米泉市| 平塘县| 昌黎县| 祥云县| 乌拉特前旗| 阳原县| 鹤岗市| 沁阳市| 广南县| 绥棱县| 涡阳县| 垫江县| 米泉市| 叶城县| 任丘市| 榆中县| 保山市| 敦煌市| 甘孜县| 玉林市| 乐清市| 敦化市| 饶阳县| 博乐市| 蒙自县| 金坛市| 鲜城| 无为县| 灵台县| 金乡县| 宜兰县| 鄂托克旗| 永仁县| 任丘市|