<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擴展機制研究(續)

    2、 擴展Binding

    SCA規范中對Binding的定義有兩種,一種為Service Binding,一種為Reference Binding。Service Binding定義了外部客戶用來訪問Service的入口,Reference Binding描述了引用外部服務的方式,換句簡單的話說就是,Reference Binding為引進(與貿易名詞‘進口’對應),Service Binding為導出(與貿易名詞‘出口’對應)。

    目前已實現的binding方式有:rmi,ejb,jms,sca,webservice,其中有些binding實現還不支持service binding,僅支持reference binding。

    Binding的裝配時運行圖如下:

    下面詳細說明一下在Tuscany中實現一種擴展Binding的方式。

    a. 定義Reference,Service Binding上的擴展模型

    b. 定義模型Binding的接口及實現,在其中可以定義用戶自己的一些屬性,接口必須要實現org.apache.tuscany.sca.assembly.Binding,此接口中定義了Binding中的一些基本屬性如URI等。

    c. 定義binding的解析器,實現接口StAXArtifactProcessor,其中包含了read,write,resolve方法,分別負責讀自定義的節點,Binding實例保存,擴展解析生成的Binding對象。

    d. 定義Binding提供者的工工廠類,實現接口BindingProviderFactory,在其中要實現ReferenceBindingProvider,ServiceBindingProvider的創建,分別負責Reference Binding,Service Binding的具體動作。

    e. 實現ModuleActivator,在其start方法中注冊binding解析器和BindingProviderFactory

    f. 在系統注冊Binding(在com.primeton.sca.runtime.IModelLoade文件中注冊ModuleActivator)

    示例

    擴展Binding示例,實現echo的功能,reference binding引用service binding提供的服務。

    a. 在composite定義文件中binding的使用方式如下

    1. <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
    2.       targetNamespace="http://sample/echo"
    3.       xmlns:se="http://sample/echo"
    4.       xmlns:e="http://echo"
    5.       name="EchoBinding">
    6. <service name="EchoService" promote="EchoComponent">
    7. <interface.java interface="echo.Echo"/>
    8. <e:binding.echo uri="http://tempuri.org" />
    9. </service>
    10. <component name="EchoComponent">
    11. <implementation.java class="echo.EchoComponentImpl"/>
    12. </component>
    13. <reference name="EchoReference" promote="EchoComponent/echoReference">
    14. <interface.java interface="echo.Echo"/>
    15. <e:binding.echo uri="http://tempuri.org" />
    16. </reference>
    17. </composite>

    其schema如下:

    1. <element name=“binding.echo" type="sca:EchoBinding" substitutionGroup="sca:binding" />
    2. <complexType name=“EchoBinding">
    3. <complexContent>
    4. <extension base="sca:Binding“/>
    5. </complexContent>
    6. </complexType>

    b.定義EchoBinding接口,擴展了org.apache.tuscany.sca.assembly.Binding

    1. /**
    2. *AmodelforthesampleEchobinding.
    3. */
    4. publicinterface EchoBinding extends Binding {
    5. }
    6. c.定義EchoBindingFactory接口,通過此工廠可以生成EchoBinding實例
    7. publicinterface EchoBindingFactory {
    8. /**
    9. *CreatesanewEchobinding.
    10. *
    11. *@returnanewEchobinding
    12. */
    13. EchoBinding createEchoBinding();
    14. }

    c.定義EchoBinding 的實現EchoBindingImpl

    1. /**
    2. *ImplementationoftheEchobindingmodel.
    3. */
    4. publicclass EchoBindingImpl implements EchoBinding {
    5. private String name;
    6. private String uri;
    7. public String getName() {
    8. returnname;
    9. }
    10. public String getURI() {
    11. returnuri;
    12. }
    13. publicvoid setName(String name) {
    14. this.name = name;
    15. }
    16. publicvoid setURI(String uri) {
    17. this.uri = uri;
    18. }
    19. public List<PolicySet> getPolicySets() {
    20. // The sample binding does not support policies
    21. return Collections.emptyList();
    22. }
    23. public List<Intent> getRequiredIntents() {
    24. // The sample binding does not support policies
    25. return Collections.emptyList();
    26. }
    27. public List<Object> getExtensions() {
    28. // The sample binding does not support extensions
    29. return Collections.emptyList();
    30. }
    31. publicboolean isUnresolved() {
    32. // The sample binding is always resolved
    33. returnfalse;
    34. }
    35. publicvoid setUnresolved(boolean unresolved) {
    36. // The sample binding is always resolved
    37. }
    38. }

    d.定義EchoBindingFactory 的實現DefaultEchoBindingFactory

    1. publicclass DefaultEchoBindingFactory implements EchoBindingFactory {
    2. public EchoBinding createEchoBinding() {
    3. returnnew EchoBindingImpl();
    4. }
    5. }

    e.定義節點的解析器EchoBindingProcessor,負責解析binding.echo,并生成對象EchoBinding實例,采用XMLStreamReader進行解析。

    f.定義binding的具體動作,在接口ReferenceBindingProvider和ServiceBindingProvider實現。

      ServiceBindingProvider在其start方法中進行對外服務的提供,提供監聽外部的調用。Stop方法中銷毀對外的監聽。

      ReferenceBindingProvider在其createInvoker方法中實現引用外部服務的具體實現.在本例中只是把輸入的值直接返回。

    g. 實現ModuleActivator,對解析器及調用ProviderFactory進行注冊。并在org.apache.tuscany.sca.core.ModuleActivator文件中對ModuleActivator進行注冊到系統運行環境中。

    (未完待續)

    posted on 2007-08-05 11:08 wangfeng 閱讀(489) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 日本一道在线日本一道高清不卡免费| 日日躁狠狠躁狠狠爱免费视频| 亚洲视频免费观看| 亚洲av综合色区| 亚洲国产精品第一区二区| 亚洲av无码av制服另类专区| 久久精品国产亚洲AV嫖农村妇女| 久久亚洲精品成人AV| 久久精品九九亚洲精品| 亚洲六月丁香六月婷婷色伊人 | 免免费国产AAAAA片| 国产福利在线观看免费第一福利| 在线观看特色大片免费视频 | 99久久精品毛片免费播放| 97人妻精品全国免费视频 | 香港经典a毛片免费观看看| 日韩毛片在线免费观看| 二区久久国产乱子伦免费精品| 成人免费ā片在线观看| 一区二区三区亚洲| 亚洲免费视频网址| 亚洲欧美成人av在线观看| 精品免费AV一区二区三区| 一个人晚上在线观看的免费视频| 波多野结衣久久高清免费| 国产乱子影视频上线免费观看| www.亚洲一区| 亚洲精品乱码久久久久久按摩 | 久久久久亚洲av无码专区蜜芽| 亚洲精品视频在线观看视频| 亚洲制服在线观看| 美女黄频视频大全免费的| 中文在线免费观看| 无码人妻精品中文字幕免费东京热| 女人18毛片a级毛片免费视频| 午夜亚洲福利在线老司机| 国产精品亚洲一区二区三区在线| 久久亚洲春色中文字幕久久久| 亚洲一区二区三区在线观看网站| 特黄特色大片免费| 人妻无码久久一区二区三区免费 |