• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 基于RSA開發SOA Pattern

    發表于:2007-05-24來源:作者:點擊數: 標簽:soa開發本文PatternRSA
    本文介紹了基于RSA模式的相關概念,并以一個簡單的例子說明如何開發及調試模式插件。 1 摘要 Pattern 即模式是SOA資產的重要組成部分。創造和使用模式促進了軟件再應用。一個模式一旦被設計出來,就可以被反復的使用。模式的可重用性潛在地降低了制造成本。RS
    本文介紹了基于RSA模式的相關概念,并以一個簡單的例子說明如何開發及調試模式插件。

    1 摘要

    Pattern 即模式是SOA資產的重要組成部分。創造和使用模式促進了軟件再應用。一個模式一旦被設計出來,就可以被反復的使用。模式的可重用性潛在地降低了制造成本。RSA中的模式這種特殊的資產遵循RAS(Reusable Asset Specifications)所制定的標準, 通過遵循這些統一的規范,可以更加便利利用地使用模式。本文介紹了基于RSA模式的相關概念,并以一個簡單的例子說明如何開發及調試模式插件。





    2 引言

    SOA體系架構具有提高企業IT資產利用率、提高系統適應性等特征,能夠根據用戶的業務需求和變動快速做出調整,保證服務上市時間;同時也強調通過建立一定的標準,實現研發成果可重復利用性,來降低成本。SOA很重要的方面就是資產重用,可重用的軟件組件、設計、代碼是軟件開發企業最重要的資產。資產重用一直以來都是軟件開發追求的重要目標之一。資產重用可以縮短軟件開放周期,提高軟件質量。Rational Software Architect (RSA)提供了通過支持模型和代碼模板開發模式插件來達到軟件重用目的機制,可以實現各個層次的軟件重用??芍赜玫能浖M件、設計、代碼是軟件開發企業最重要的資產。

    本文是將向大家介紹如何在RSA 中創建自己的模式,并利用RSA的代碼模板和模式的結合更加促進軟件的重用。





    3 相關概念介紹

    • SOA:面向服務的體系結構(service-oriented architecture,SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種這樣的系統中的服務可以以一種統一和通用的方式進行交互。
    • Pattern : Pattern是解決某類特定問題的一般性方法。IBM Rational pattern實現從一個初始UML2.0 Model 到另一個應用該模式的UML2 Model, 也可以稱之為Model to Model Transformation. 模式設計的關鍵之處就在于找出可重復的結構和過程,并將它們轉化到可重用的模式之中。模式的設計者可以應用RAD中的框架完成一個最簡單的到非常復雜的模式設計。
    • Asset:資產是SOA中的重要元素,RAS(Reusable Asset Specifications)標準提供了系列的工具來方便管理和共享Pattern Assets,提供分類、搜索、組織和文檔功能。模式通過分發和重用來實現他的最大價值。Pattern 是一種獨特類型的RAS資產。
    • MDD(Model Driven Development):模型驅動開發技術的主要思想是在模型這一更高的抽象層次來構造軟件系統,從而使架構設計師和軟件開發人員專注于"業務邏輯"而不是編程細節,代碼可以通過手工或自動的方法從模型中自動生成。Pattern在RAD中的應用過程就是模型驅動開發的過程,它實現的是Model 到 Model轉化。




    4 開發流程

    一般模式插件的開發主要分為以下幾步:

    1. 以RSA提供的項目模板為基礎,建立Project。

    2. 建立Pattern,并設定相關參數,包括Pattern名字,參數,基本描述,所屬的組等等。

    3. 擴展點編程,擴展點主要分為三部分:

    • 針對各個參數內部類的expand()方法,這個方法根據使用pattern時的bind動作和終于上來了unbind動作又被重載為兩個方法。
    • 在參數設置時,有可能設定參數之間的依賴關系,那么在參數內部,又會生成一個內部類,并生成的方法update(), update也會有多個重載,擴展相應的update()方法,就可以對相關聯的參數發生變化是進行處理。
    • 隱性擴展點,在Project顯示給出的擴展框架之外,還有一些隱性的擴展點完成更多的功能,下面分別介紹:
      • protected IStatus validToAddArgument(PatternParameterValue.Proposed proposed)
      • public IStatus validToCreateArguments(AbstractPatternInstance instance, IPatternMetatype metatype)
      • ……
      這些隱性擴展主要完成對應用在Pattern參數上的元素進行更進一步的驗證,以保證綁定的參數能夠符合要求,這些驗證包括類型、Stereotype等各類,從而配合基本擴展點完成一些復雜的工作。

    4.調試,發布Pattern 插件。





    5 范例

    范例是一個Simple Cache Pattern, 這個Pattern為一般的服務訪問提供緩沖功能,降低系統開銷,提高響應速度。應用該Pattern后將在Model內生成一個類,該類實現或繼承目標對象(接口或類),將從服務提供者中獲得的數據緩存,并用它們作為客戶端請求的響應。這個Pattern定義了Service, getEntry, CacheSize 和Timeout四個參數,這四個參數分別表示在應用這個Pattern時的必要設置。Service制定要應用pattern的對象(是Interface或者是Class),getEntry表示要應用緩存的方法,CacheSize表示需要Cache空間的大小,Timeout用來表示Cache失效時間。

    步驟一:應用RSA提供的Pattern工程模板創建項目

    1. 選擇菜單File -> New ->Project->Plug-in Development -> Plug-in project,彈出如下窗口,在Project name 中為項目命名為com.ibm.pattern.cache,其他保持缺省設置即可




    2. 點擊Next按鈕,彈出如下窗口,保持缺省設置:




    3. 點擊Next按鈕,進入如下窗口,這個窗口可以選擇根據已有的Plug-in模板來建立工程,選中<Create a plug-in using one of template>,然后選擇Plug-in with patterns。




    4. 點擊Finish,生成了一個新的Project,如下圖所示:




    步驟二:創建Pattern

    1. 選擇Window'show view'Modeling'Pattern Authoring, 打開Pattern authoring視圖.




    2. 新建Pattern,在Pattern Authoring視圖中,選擇我們剛剛建立的Project, 在上面擊右鍵彈出菜單,選擇New Pattern。彈出如下窗口,命名為Cache Pattern, 則對應Class Name為CachePattern,選擇Pattern Type為Collaboration,并為該Pattern創建一個組,稱之為Tutorial Pattern.




    3. 創建Pattern參數,在上圖的Parameters欄中,點擊Add…按鈕,彈出下圖的對話框。分別定義前面的四個參數,下圖為Service參數的建立,由于該參數綁定的類型可能為Interface或是Class,指定其類型為Classifier。下面第二圖為getEntry參數建立Parameter Dependency,指定其Supplier parameter為Service。這種設定為兩個參數建立了依賴關系,如果沒有綁定Service,則不能綁定getEntry,因為getEntry所綁定的operation實現是Service參數的元素。







    4. 完成Pattern 參數定義后,轉到Detail Tab,可以定義一些Pattern的描述信息。Keywords為Pattern在RAS中進行搜索是提供方便。




    5. 單擊OK,在Pattern Authoring視圖下,生成的結構如下




    在Package Explorer下生成的結構如下:




    步驟三:擴展點編程

    在生成的代碼框架中我們可以看到,在CachePattern中添加了四個內部類,這四個類分別對應我們所添加的四個模式參數,我們展開其中一個內部類可以看到內部類由PARAMETER_ID,構造函數和兩個基本擴展方法所構成,如上圖紅圈所標注,對于GetEntry內部類對應getEntry參數,由于在參數構建時設定了依賴關系,所以在getEntry內部類中又產生一個內部類GetEntry_ServiceDependency,在其內部產生了若干個update()擴展方法。下面說明在該例中如何擴展這些擴展方法。

    1. 兩個基本擴展點:

    • public boolean expand(PatternParameterValue value) 在參數被綁定時觸發,完成綁定參數的動作,同時可以觀察到該方法返回值為boolean類型,但是不要以為返回false該動作不會發生,即無論擴展后該方法返回何值,bind事件都會被觸發。若想改變這種狀況,則必須進行驗證,驗證方法后面會提到。下面代碼為在Service內部類擴展該方法的代碼:

      
                      		public boolean expand(PatternParameterValue value) {
                      Object obj = value.getValue();
                      if( obj instanceof Classifier ) {
                      Classifier classifier = (Classifier) obj;
                      // instance -- instance of the pattern in the model which
                      gives values specified for this pattern.
                      com.ibm.xtools.patterns.framework.AbstractPatternInstance patternInstance =
                      value.getOwningInstance();
                      CachePatternImplementation impl;
                      impl = (CachePatternImplementation) instanceToImplMap.get(patternInstance);
                      if (impl == null) {
                      impl = new CachePatternImplementation (patternInstance);
                      instanceToImplMap.put(patternInstance, impl);
                      }
                      impl.expandService(classifier);
                      }
                      return true;
                      }
                      

      該段代碼完成在綁定Service參數時,根據綁定的類生成相應的UML2 元素,其中主要的實現在CachePatternImplementation類中完成,以減少項目主類中的代碼數量。

    • public boolean expand(PatternParameterValue.Removed value) 該方法在解除參數綁定時所觸發,只要解除動作發生了,那么該方法將被執行。下面代碼仍為在Service內部類擴展該方法的代碼:比如,我們以在該例中的Service的expand方法編程,我們在該例子中為該Pattern的Service方法添加代碼如下:

      
                      		public boolean expand(PatternParameterValue.Removed value) {
                      Object obj = value.getValue();
                      if( obj instanceof Classifier ) {
                      Classifier classifier = (Classifier) obj;
                      // instance -- instance of the pattern in the model which gives
                      values specified for this pattern.
                      com.ibm.xtools.patterns.framework.AbstractPatternInstance patternInstance =
                      value.getOwningInstance();
                      CachePatternImplementation impl;
                      impl = (CachePatternImplementation) instanceToImplMap.get(patternInstance);
                      if (impl == null) {
                      impl = new CachePatternImplementation (patternInstance);
                      instanceToImplMap.put(patternInstance, impl);
                      }
                      impl.removeService(classifier);
                      }
                      return true;
                      }
                      

    2. 依賴關系擴展點:

    生成的依賴關系擴展點有如下三個

    • public boolean update(PatternParameterValue value, PatternParameterValue dependencyValue)
    • public boolean update(PatternParameterValue.Maintained value, PatternParameterValue.Removed dependencyValue)
    • public boolean update(PatternParameterValue.Removed value, PatternParameterValue.Maintained dependencyValue)

    我們在此例中只有getEntry參數建立了依賴關系,而至擴展了第二個方法,因為第二個方法是在getEntry所依賴的Service方法刪除時調用,而getEntry所綁定的參數的提供這恰為Service的參數,所以在Service參數解除綁定時,對應的getEntry也應該解除綁定,代碼如下所示:



    
                public boolean update(PatternParameterValue.Maintained value,
                PatternParameterValue.Removed dependencyValue){
                Object obj = value.getValue();
                if( obj instanceof Operation) {
                Operation oper = (Operation) obj;
                // instance -- instance of the pattern in the model which gives values
                specified for this pattern.
                com.ibm.xtools.patterns.framework.AbstractPatternInstance patternInstance =
                value.getOwningInstance();
                CachePatternImplementation impl;
                impl = (CachePatternImplementation) instanceToImplMap.get(patternInstance);
                if (impl == null) {
                impl = new CachePatternImplementation (patternInstance);
                instanceToImplMap.put(patternInstance, impl);
                }
                impl.unbindOperation(oper);
                }
                return true;
                }
                

    這段代碼利用CachePatternImplementation類中的方法解除了getEntry方法的參數綁定。

    3. 驗證擴展點:

    在此例中我們注意到Service的參數應當為Interface或是Class,而我們在指定類型時只能將其指定為Classifier,而Classifer作為UML2種的一個類型,包含許多子類型,比如Component、UseCase等等,而將這些類型作為Service的參數是不允許的,所以我們必須使用驗證擴展點來保證這一點。在此例中我們擴展的方法及代碼如下所示是:



    
                protected  IStatus validToAddArgument(PatternParameterValue.Proposed proposed){
                // Use to judge whether the parameter can be bound.
                IStatus status = super.validToAddArgument(proposed);
                if (status.isOK()){
                Object obj = proposed.getValue();
                if ((obj instanceof Class)||( obj instanceof Interface)) ;
                else return Status.CANCEL_STATUS;
                }
                return status;
                }
                

    至此,基本Pattern Authoring 的工作就算完成了,下面進行調試。

    步驟四:調試

    調試是必須運行一個runtime_workbench,這里我們建議選擇eclipse的JVM,并設置參數為-Xj9,這樣可以支持"hotcode-replacement"方便我們減少我們在調試過程中啟動runtime_workbench的次數。調試界面如下圖所示:




    1. 在Runtime_workbench中切換到Model perspective,并打開Pattern Explorer視圖,如上圖所示。

    2. 可以看到我們剛剛創建的Cache Pattern已經在Tutorial Pattern組中,將其拖至建好的空的Model中,建立測試用的接口或類,綁定適當的參數,就可以借助RSA提供的強大功能進行調試了。

    調試完成,也就完成了這個簡單而又實用的Cache Pattern的開發工作。





    6 結語

    通過本文的介紹,我們可以看到,模式是一種抽象的軟件解決方案,用來解決一個在特定場景中的連續的或反復出現的問題。開發設計過程中大量地使用模式有很多的優點,我們可以利用已有的模式來解決一些軟件問題,從而節省了設計人員的時間。模式的用戶并不需要知道如何去設計一個具體的模式,但是用戶需要有好的模式文檔,好的模式文檔能幫助模式的用戶定位、選擇和應用不同的模式。用戶需要了解這個模式是用來解決什么問題的,這個問題是如何被解決的以及應用這個模式的結果。模式的作者能夠創造多種類型的與模式打包在一起的模式文檔,在模式應用過程中,用戶可以使用這些文檔。

    模式的可重用性還能夠節省大量的設計開發時間。 可重用的特性增加了軟件的可靠性和編碼設計的連續性。一個模式可以在一個項目中、一個公司內部以至不同公司間共享。模式的局限性由模式的設計以及模式開發者的設計意圖所決定。而RSA中的模式都由標準的Eclipse插件構成,我們可以通過將包含模式的插件打包成可重用的資產(Reusable Asset Specifications)并且在RAS資產庫中注冊和管理它們來實現最大程度的模式可重用性。通過由模式開發者提供的模式的關鍵字和描述的匹配,潛在的模式用戶可以從RAS資產庫里搜索和選擇所需的模式。模式這種特殊的資產遵循RAS(Reusable Asset Specifications)所制定的標準, 通過遵循這些統一的規范,模式用戶和模式開發者之間可以非常便利地交換模式。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>