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

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

  • <strong id="5koa6"></strong>
  • 開發SOA組合應用程序來支持業務服務(1)

    發表于:2007-06-13來源:作者:點擊數: 標簽:
    引言 組合應用程序提供了集成現有面向服務的體系結構(Service-Oriented-Architecture,SOA)服務和/或創建能夠以不同方式進行組合的新服務的能力。組合應用程序的關鍵是使用 SCA 將可重用軟件資產作為 SOA 服務實現創建。我們使用 WebSphere Process Server

    引言

    組合應用程序提供了集成現有面向服務的體系結構(Service-Oriented-Architecture,SOA)服務和/或創建能夠以不同方式進行組合的新服務的能力。組合應用程序的關鍵是使用 SCA 將可重用軟件資產作為 SOA 服務實現創建。我們使用 WebSphere Process Server、WebSphere Portal、WebSphere Service Registry and Repository、WebSphere Enterprise Bus、WebSphere Portlet Factory 和 WebSphere Application Server 及其相應的開發工具開發了一個金融領域的示例組合應用程序。所選擇的場景提供了一些示例,這些示例說明了開發高效組合應用程序所需的不同特性的實現。我們將首先通過這些示例場景來說明組合應用程序的好處和挑戰。最后,我們將分析 IBM 產品中的技術特性以及可以如何將其用于開發組合應用程序。

    在本文中,我們首先定義了組合應用程序、變化點、角色、用例、運行時環境,并給出了一個業務意圖列表,為了創建支持業務服務的組合應用程序,需要實現這些業務意圖。

    本系列的后續文章將更為詳細地對幾個相關問題進行分析,包括多重租賃 (Multi-tenancy) 設計模式、應用選擇器和業務規則來實現動態性、發布服務、自助模式和資產、使用動態配置文件的可配置用戶界面、自動構建和部署、使用 CEI 開發可度量應用程序以及其他類似的主題。

    什么是組合應用程序?

    SOA 組合應用程序定義為“一組解決特定業務問題或任務的動態服務組件。組合應用程序經常提供一組服務,而這些服務又可能屬于其他組合應用程序?!睒I務服務是業務單位選擇在其邊界公開的服務,通過接口與其客戶、合作伙伴或其他業務單位連接。業務服務實現有意義的業務流程或任務。組合應用程序由一個或多個組件或組件聚合組成,而其中每個組件或組件聚合會公開一個服務接口。組合應用程序為業務服務提供支持。

    圖 1. 用于進行零售銀行貸款發放的組合應用程序

    用于進行零售銀行貸款發放的組合應用程序

    正如圖 1 中所示,組合應用程序對一系列可配置服務進行編排。例如,在此示例中矩形與公開業務服務的業務組件對應,如 Validate。紅線指示組合應用程序的特定用例所遵循的調用序列。沿著紅線,將依次接受貸款申請,生成信用記錄,然后驗證、分析和提供貸款。批準貸款后,必須對其進行初始化、配置、結算并記錄。最后,將發起對話,以與客戶進行溝通。

    在此上下文中,服務組件體系結構(Service Component Architecture,SCA)是面向服務的組件模型。它提供涵蓋無狀態會話 EJB、Web 服務、傳統 Java 對象(Plain Old Java Object,POJO)、Web 服務業務流程執行語言(WS-Business Process Execution Language,WS-BPEL)流程、數據庫訪問、企業信息系統(Enterprise Information System,EIS)訪問和其他服務實現的抽象,如下面的圖 2 中所示。SCA 將業務邏輯與基礎設施邏輯分離開來,因此程序員能夠集中精力處理業務問題。

    圖 2. SCA 實現類型

    SCA 實現類型

    變化點

    變化點是確定可能發生更改而應該外部化的位置。具有內置變化點的服務組件允許用戶通過對這些服務進行配置來滿足不同的需求??梢詫⒖蓴U展性機制加入到 UI、服務組件接口、服務組件本身以及數據模型中,從而實現可配置應用程序。

    非常有必要對可配置性和自定義進行一下對比??膳渲眯詾槲覀兲峁┰诓桓拇a庫(編寫代碼)的情況下使組件適應不同需求的能力??膳渲眯詷嫿ǖ椒眨⊿witch、Dial 和 Lever)中,可以由應用程序的用戶進行調用。相反,自定義要求開發額外的代碼(使用編程語言)來擴展和更改軟件組件,以支持特定的“自定義”行為。

    我們可以將這些變化點歸為三大類:用戶界面、業務邏輯和持久性。

    用戶界面 (UI)

    用戶界面中的變化點允許用戶通過配置更改 UI 的外觀以及其語義內容(數據字段)。用戶界面中的配置變化點的示例有:

    1. 使用客戶特定的徽標和標識重塑網站的品牌。例如,假定有兩家銀行 Bank A 和 Bank B。這兩家都具有自己的徽標或品牌,并希望網站能夠反映這一點。
    2. 更改在用戶界面顯示的標簽和文本,以使其對使用它的員工和客戶恰當,且為他們所熟悉。例如,一家銀行可以使用術語 Preferred Aclearcase/" target="_blank" >ccount作為輸入字段的標簽,而另一家銀行則可以使用術語 Advantage Account。
    3. 更改向用戶公開的輸入字段。一家銀行可以允許用戶輸入備用手機號碼,而另一家銀行則可以不允許提供此信息。
    4. 更改用戶調用的 SOA 服務的端點??赡軙鶕趪鴥鹊牡赜虿煌褂貌煌男庞脵z查服務,因此可通過外部化端點來允許對其進行配置。

    業務流程

    由于多個組合應用程序解決方案可以使用同一個業務流程,因此每個應用程序實現可能會希望使用相同業務流程的略有不同的變體。因此,業務流程務必提供變化點,以允許組合應用程序的用戶根據自己特定的需求配置業務流程。例如,假定一家銀行決定向特定期間內開立新帳戶的每個人提供禮品選項(如烤箱)。該銀行將要求開戶業務流程具有向所有新帳戶所有者派發禮品的活動。不過,對于其他銀行,應該禁用此活動。

    為了實現此要求,組合應用程序實現需要能夠禁用業務流程中的可選活動。WebSphere Process Server 提供了外部化變化點的機制,以允許用戶在不必進行自定義的情況下配置業務流程。在 BPEL 業務流程中進行此工作的一個簡單方法是執行活動前檢索業務規則,此業務規則返回一個 Boolean 值,指示此活動是已啟用還是已禁用。在上一段給出的示例中,我們將使用一個禮品規則,管理員可對其進行開啟或關閉,從而最終啟用或禁用業務流程中對應的“send gift”活動。

    數據層

    數據層中也一定存在變化點。由于組合應用程序可能具有不同的數據視圖,因此需要能夠在數據庫模式層提供數據可變性。例如,一家銀行可以捕獲其客戶的國籍,而另一家銀行則不會進行此操作。由于我們對兩家銀行使用了相同的組件實現,因此我們訪問的是相同的基礎數據庫模式。因此,我們需要在數據層中提供可變性,以便能夠為一家銀行存儲客戶國籍,但另一家銀行卻不需要如此。

    提供此功能的一個可能的方法是將數據屬性存儲在駐留于數據庫中的 XML 文件中。將數據屬性保存在 XML 中可以允許采用非常靈活的模式,能在不用更改邏輯數據庫模式的情況下添加或刪除屬性。由于數據庫將此 XML 文檔存儲在一個數據庫屬性中(DB2® V9 的一個特性),因此將不會更改數據庫模式,故而能實現此操作。

    下面的部分將說明 Jivaro 銀行組合應用程序的一些主要角色以及一些主要用例。

    角色

    讓我們簡要定義一下與我們的示例銀行應用程序相關的一些角色。

    銀行業務提供者

    這是向多個銀行提供承載非現場銀行業務的組織,通常為商業公司。此提供者的人員組成包括管理人員,即銀行業務提供者管理員 (Banking Provider Administrators),可以進一步劃分為操作管理員 (Operations Administrator)和服務管理員 (Service Administrator)角色。前者處理日常操作,而后者配置每個銀行所使用的服務。主管理員可以執行所有任務。圖 3 以 UML 關系圖的形式說明了所有這些關系。

    圖 3. 銀行業務提供者管理員角色

    銀行業務提供者管理員角色

    銀行業務管理員

    銀行業務管理員是使用提供者承載的服務的各個銀行(如 Bank A)的員工。他們的任務是為 Bank A 管理系統的實例??梢园凑张c提供者管理員角色相同的方式對此角色進行進一步劃分。


    共3頁: 1 [2] [3] 下一頁

    原文轉自: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>