監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關閉

將舊應用改造成Web服務

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

將舊應用改造成Web服務


 Dietmar Kuebler(dkuebler@de.ibm.com),高級軟件工程師,IBM 德國

Wolfgang Eibach(
eibachw@de.ibm.com),高級軟件架構設計師,IBM 德國

2002 年 1 月

隨著動態(tài)電子商務及其基于開放標準的支持技術的出現(xiàn),支持企業(yè)中的基本業(yè)務流程的有價值的舊應用將能夠加入到分布式計算的這一新領域中來。在這篇論文中,我們將概略論述如何使Web 服務技術能夠應用于舊的應用 ,然后用一個示例來說明概念體系結構在舊應用中的使用。

介紹

Web 服務是電子商務發(fā)展的下一個階段。Web 服務把一切都看作服務,這種服務可以通過在網(wǎng)絡上使用消息傳遞動態(tài)地被發(fā)現(xiàn)和組織。企業(yè)可以通過發(fā)布自己的 Web 服務來動態(tài)地出售它們的服務。

Web 服務體系結構(Web services architecture(WSA))是將企業(yè)舊應用集成到這一新領域的理想技術。這是為了啟用程序對程序通信而創(chuàng)建與企業(yè)應用交互的、基于 Web 瀏覽器的用戶界面的下一個步驟。這暗示著人們可以以一種更加自動化的方式和更有效的辦法來做相同的事情。

自電子交易出現(xiàn)以來,人們已經(jīng)開發(fā)了大量的應用來滿足日益增長的對在線購物系統(tǒng)的需求。這些系統(tǒng)大多使用專有實現(xiàn),通常是因為在進行開發(fā)的時候缺乏開放標準。不過,這些早期的專有應用所支持的業(yè)務流程在將來仍然是必需的。這可以從人們對這些電子商務應用已作的大量投資中得到證實。

這些舊應用比乍一想起來要更復雜。例如,增值稅(value added tax(VAT))計算 — 類似于美國的銷售稅計算 — 如果要支持帶有所有不得不處理的不同條件的全球貿(mào)易情況,那么就會變得復雜得多。

為了將舊應用融合到動態(tài)電子商務中,我們就需要應用 Web 服務技術,它將允許對服務進行定義,從而隱藏舊應用接口的一些復雜性。

一旦對舊應用做了技術上的改造,業(yè)務流程的自動化程度就可能變得更高,也更少需要人工干預。

讓舊應用重煥活力

Web 服務的概念和面向服務體系結構(service oriented architecture(SOA))方法為舊應用在 Web 上可用創(chuàng)造了機會。在這篇文章中,我們將展示如何將概念體系結構應用到當今的眾多舊應用中,這些舊應用在大型機和其它服務器上運行。這包括在大型機事務管理器(即 Customer Information Control System Transaction Server(CICS TS)或 Information Management System(IMS))控制之下的應用。(請參閱參考資料。)

這種概念有許多優(yōu)點:

它能夠使已認證的產(chǎn)品級應用作為 Web 服務可用。這允許為 Web 服務提供者的客戶快速部署穩(wěn)定的 Web 服務。

Web 服務的用戶在大型舊應用上的巨額投資將得到保護,同時未被修改的舊應用仍然可以作為服務器應用在大型機主機上運行。

它能夠給 Web 用戶帶來運行基于大型機的應用的優(yōu)點,例如:

高可擴展性:當一個 Web 服務被啟動時,使用該服務的潛在用戶的數(shù)量是未知的。基于大型機(如 zSeries Parallel Sysplex)群集的服務由 Workload Manager(WLM)動態(tài)管理,并且可以伸縮到非常高的程度。(請參閱參考資料。)

高可用性:Web 服務對于企業(yè)對消費者(business-to-consumer(B2C))和企業(yè)對企業(yè)(business-to-business(B2B))的用戶必須是全年全周全天候 99.99% 可用的。大型機群集可被設置成無單點失效,以確保這個級別的可用性。

持續(xù)運轉:大型機可以在不中斷在群集上運行的應用的情況下進行計劃內(nèi)的系統(tǒng)停機,以進行軟件或硬件升級。不必中斷運轉即可引入另外的系統(tǒng)。

概念體系結構

我們的論文將首先展示一個概念體系結構,可以把這個體系結構當作一個模板,用來把已經(jīng)投入生產(chǎn)的舊應用改造成作為 Web 服務可用的。圖 1 顯示了這個體系結構的結構,下面的描述將詳細解釋其中的各個組件。

在這篇論文的后面,我們將展示這一概念的一個實際實現(xiàn)的示例。

圖 1:通過 SOAP 訪問舊應用的概念體系結構


圖 1 所示的概念體系結構包括了一個 Web 服務的三個組件:服務提供者、服務請求者和服務中介者。服務請求者是 Web 服務的消費者,很可能是運行在企業(yè)客戶的服務器上的一個程序。服務提供者程序從 UDDI 庫即服務中介者處獲取關于可用服務的信息??捎玫?Web 服務是用 Web 服務描述語言(Web Services Description Language(WSDL))描述的,從而支持與平臺無關的通信。

當服務請求者選擇了一個服務時,它將使用 WSDL 描述來找出訪問該服務的方法。訪問該服務的方法一被找到,WSDL 描述便被用來生成發(fā)送給應用服務器的 SOAP 請求消息,應用服務器扮演服務提供者的角色。

在上述的示例中,SOAP 請求被作為一條 HTTP POST 請求發(fā)出。使用 HTTP 具有能夠穿過 Web 服務器上通常都存在的防火墻的優(yōu)點。如果要求比 HTTP 所提供的消息傳遞更可靠的消息傳遞,則您可以使用一個可靠的消息隊列系統(tǒng),例如:MQSeries Internet Passthrough(MQ IPT)或 Oracle 應用服務器。MQ IPT 也在 HTTP 協(xié)議上運行,因此能夠穿過防火墻(請參閱參考資料)。不過,它也具有 MQ 消息傳遞給應用帶來的所有優(yōu)點。

穿過防火墻后的 SOAP 請求消息由 HTTP 服務器處理。HTTP 服務器分析 HTTP 頭信息并找到 SOAP 路由器組件的名稱,該名稱是統(tǒng)一資源名(Uniform Resource Name(URN))的一部分。請求消息被傳遞到指定的 SOAP 路由器。SOAP 路由器分析 HTTP 頭并找到某個 Web 服務適配器(Web service adapter)的位置。然后,SOAP 路由器將把該請求傳遞到所請求的適配器。

Web 服務適配器

為了能夠使 Web 服務適配器可用于服務訪問,必須為每一個服務開發(fā) Web 服務適配器。Web 服務適配器通常是一個連接到后端服務器的 Java 應用程序。這個連接可以是后端服務器支持的任何通信連接,也就是說,它可以是運行在傳輸控制協(xié)議/網(wǎng)際協(xié)議(Transmission Control Protocol/Internet Protocol(TCP/IP))或高級程序對程序通信(Advanced Program to Program Communication(APPC))協(xié)議連接的本機 MQSeries 通道。連接到后端系統(tǒng)的其它選擇是使用 CICS TS 外部調用接口(External Call Interface(ECI)),如果后端系統(tǒng)使用的是 CICS TS 事務系統(tǒng)的話。

對于每個 SOAP 服務請求,Web 服務適配器調用一個后端應用。在一個 SOAP 請求會導致對一個或多個后端服務器系統(tǒng)的多個請求的情況下,生成復雜的 Web 服務也是可能的。后端請求的組合結果被合并成一個 SOAP 響應,這個 SOAP 響應接著被回傳給服務請求者。

Web 服務適配器隱藏了調用后端函數(shù)的復雜性,只要求您指定執(zhí)行一個服務時所絕對必需的參數(shù)子集。

事務管理

一個復雜的業(yè)務組件包含多個需要被執(zhí)行事務。這些事務請求可能向一個或多個后端系統(tǒng)發(fā)出。這其中有一個重要的業(yè)務要求就是,所有這些后端請求都必須屬于一個稱為邏輯工作單元(logical unit of work(LUW))的主事務。

LUW 必須符合為事務系統(tǒng)定義的要求,這些要求通常稱為 ACID 范例:

A 表示原子性(atomicity):事務是處理過程的原子單元;事務或者整個被執(zhí)行,或者根本不被執(zhí)行。

C 表示一致性(conistency):LUW 的一個正確執(zhí)行必須將所涉及的所有資源從這個一致狀態(tài)變成另一個一致狀態(tài)。

I 表示孤立性(isolation):在 LUW 被提交之前,在 LUW 中所做的所有更新都不應被其它事務看見。

D 表示持續(xù)性(durability):一旦在 LUW 中所做的更新被提交后,這些更改必須永遠不會因后來發(fā)生的故障而丟失。

最后,回滾也被看作是一個重要屬性,回滾能夠撤銷所有先前所執(zhí)行的調用。

可以在分布式系統(tǒng)的不同位置控制 LUW 的執(zhí)行。一種可能是把控制放在客戶機位置,客戶機在 Web 服務體系結構中就是服務請求者。這在現(xiàn)今是一個問題,因為通過網(wǎng)際連接來控制 LUW 還沒有解決方案。在本篇論文給出的所提議的概念體系結構中,LUW 的控制位于 Web 服務適配器。這個解決方案使用了企業(yè) JavaBean(Enterprise JavaBeans(EJB))的事務控制擴展,并且使用后端系統(tǒng)事務管理器來控制對屬于這些系統(tǒng)的資源所做的改動。

圖 2 顯示了前述概念體系結構的一個變體,這個變體使用了 Java 2 企業(yè)版(Java 2 Enterprise Edition(J2EE))和企業(yè) JavaBean(Enterprise JavaBeans(EJB))。此外,在后端服務器上添加了一個事務資源管理器。典型的大型機后端服務器事務管理器是 CICS TS 系統(tǒng)或 IMS。

圖 2:使用 Web 服務將事務組合成一個邏輯工作單元


通過利用 EJB 的事務協(xié)同功能,可以將對一個或多個后端服務器上的事務的許多單個請求的控制組合成一個邏輯工作單元。

如果 Web 服務適配器作為 EJB 會話 bean 實現(xiàn),則當它接收到對復雜服務的 SOAP 請求時,就將啟動一個工作單元。接著,后端系統(tǒng)上的事務通過發(fā)送中間件消息被調用。這些消息將被發(fā)出到一個或多個后端系統(tǒng)。如果有任何一個來自被調用的后端事務的響應以錯誤結束,那么會話 JavaBean 將對在不同系統(tǒng)上啟動了的所有事務發(fā)起回滾。這保證了 SOAP 服務請求或者得到完全執(zhí)行,或者保持該請求被發(fā)出之前的狀態(tài)。這避免了后端舊系統(tǒng)的數(shù)據(jù)庫的任何不一致狀態(tài)。

一個樣本實現(xiàn)

為了驗證這里所描述的體系結構,我們開發(fā)了一個樣本實現(xiàn)。它使用現(xiàn)有的在 IMS 事務管理器下運行的后端主機應用。這個系統(tǒng)通過專有接口為訂戶提供各種現(xiàn)今已有的服務。

作為一個示例,我們將歐洲所使用的 VAT 計算實現(xiàn)為一個服務。這個實現(xiàn)使用位于主機位置端的 SOAP 服務器。SOAP 客戶機通過應用服務訪問該服務,在這個例子中是通過在 Windows 2000 上運行的 WebSphere Application Server 來訪問服務。客戶機和主機“訪問”層之間的通信使用啟用了 SOAP 的 MQSeries,并且使用 HTTP 作為底層傳輸機制。為了讓消息能夠穿過主機防火墻,就需要 MQ IPT 包。圖 3 顯示啟用了 SOAP 的 VAT 服務的樣本實現(xiàn)的概略圖。

圖 3:啟用了SOAP的舊應用樣本


用 WSDL 寫的 VAT SOAP 服務接口

<?xml version="1.0" encoding="UTF-8"?>

<definitions name="VatSOAPService-interface"

  targetNamespace=

    "http://www.boeblingen.de.ibm.com/webservices/vat/vatsoapservice-interface"

  xmlns="http://schemas.xmlsoap.org/wsdl/"

  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

  xmlns:tns="http://www.boeblingen.de.ibm.com/webservices/vat/vatsoapservice"

  xmlns:xsd="http://www.w3.org/1999/XMLSchema">

<message name="IndoSimpleCalculationRequest">

  <part name="city"           type="xsd:string"/>

  <part name="zipCode"        type="xsd:string"/>

  <part name="county"         type="xsd:string"/>

  <part name="state"          type="xsd:string"/>

  <part name="country"        type="xsd:string"/>

  <part name="currency"       type="xsd:string"/>

  <part name="amountExponent" type="xsd:int"/>

  <part name="quantity"       type="xsd:int"/>

  <part name="unitPrice"      type="xsd:long"/>

  <part name="vatClass"       type="xsd:string"/>

</message&gt;

<message name="OutdoSimpleCalculationResponse">

  <part name="return" type="xsd:long"/>

</message&gt;

<message name="IndoComplexCalculationRequest">

  <part name="city"           type="xsd:string"/>

  <part name="zipCode"        type="xsd:string"/>

  <part name="county"         type="xsd:string"/>

  <part name="state"          type="xsd:string"/>

  <part name="country"        type="xsd:string"/>

  <part name="currency"       type="xsd:string"/>

  <part name="amountExponent" type="xsd:int"/>

  <part name="vssis"          type="ArrayOfItems"/>

</message&gt;

<message name="OutdoComplexCalculationResponse">

  <part name="return" type="ArrayOfVatSOAPServiceItem"/>

</message&gt;

<types&gt;

  <xsd:schema targetNamespace="urn:webservices-vat-service"

              xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:complexType name="item">

      <xsd:element name="quantity"      type="xsd:int"/>

      <xsd:element name="unitPrice"     type="xsd:long"/>

      <xsd:element name="net"           type="xsd:long"/>

      <xsd:element name="gross"         type="xsd:long"/>

      <xsd:element name="vatTaxAmount"  type="xsd:long"/>

      <xsd:element name="vatTaxPercent" type="xsd:long"/>

      <xsd:element name="vatClass"      type="xsd:string"/>

    </xsd:complexType&gt;

    <xsd:complexType name="ArrayOfItems">

      <xsd:complexContent mixed="false">

        <xsd:restriction base="soapenc:Array">

          <xsd:attribute n1:arrayType="item[]" ref="soapenc:arrayType" xmlns:n1

="http://schemas.xmlsoap.org/wsdl/" />

        </xsd:restriction&gt;

      </xsd:complexContent&gt;

    </xsd:complexType&gt;

  </xsd:schema&gt;

</types&gt;

<portType name="VatSOAPService">

  <operation name="doSimpleCalculation">

    <input  message="IndoSimpleCalculationRequest"/>

    <output message="OutdoSimpleCalculationResponse"/>

  </operation&gt;

    <operation name="doComplexCalculation">

    <input  message="IndoComplexCalculationRequest"/>

    <output message="OutdoComplexCalculationResponse"/>

  </operation&gt;

</portType&gt;

<binding name="VatSOAPServiceBinding" type="VatSOAPService">

  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

  <operation name="doSimpleCalculation">

    <soap:operation soapAction="urn:webservices-vat-service"/>

    <input&gt;

      <soap:body

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          namespace="urn:webservices-vat-service"

          use="encoded"/>

    </input&gt;

    <output&gt;

      <soap:body

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          namespace="urn:webservices-vat-service" use="encoded"/>

    </output&gt;

  </operation&gt;

  <operation name="doComplexCalculation">

    <soap:operation soapAction="urn:webservices-vat-service"/>

    <input&gt;

      <soap:body

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          namespace="urn:webservices-vat-service"

          use="encoded"/>

    </input&gt;

    <output&gt;

      <soap:body

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          namespace="urn:webservices-vat-service"

      use="encoded"/>

    </output&gt;

  </operation&gt;

</binding&gt;

</definitions&gt;

結束語

在應用開發(fā)上投資始終是企業(yè)的一個話題。當開放標準網(wǎng)絡化世界開始主宰 IT 世界時,對這些投資的保護可能要發(fā)生變化。今天,許多企業(yè)都在設法將它們的舊應用改造成面向組件的系統(tǒng)。便于這種改造的一個新的選擇可能是 Web 服務技術的使用。舊應用中的基本服務可以包裝成 Web 服務并組織成為具有更高價值的服務。

在這篇文章中,我們描述了如何通過應用 Web 服務技術來使舊應用成熟起來。我們已經(jīng)展示了怎樣能夠將專有接口改造成動態(tài)電子商務所需的基于開放標準的接口。

作為一個示例,我們已經(jīng)用一個使用來自電子交易領域的舊應用碰到的“實際”問題展示了如何完成這項工作。電子化市場的供應商或類似的企業(yè)需要特別用于付費和記帳目的的基本服務。它們也需要由大型機主機服務器提供的穩(wěn)定性、可擴展性和高可用性。我們也描述了如何可以不修改舊應用所使用的現(xiàn)有系統(tǒng)而對事務管理進行處理。

參考資料

  • 請單擊文章頂部或底部的討論參與本文的討論論壇。
  • 您可以學習一些 Web 服務體系結構(WSA)、動態(tài)電子商務面向服務的體系結構(SOA)的背景基礎知識。
  • 想了解關于大型機硬件和應用的更多信息,您應參閱 IBM 的 zSeriesParallel Sysplex for zOS、IBM CICS Transaction ServerIMS、IBM Workload Manager WLMMQSeries InternetPassthru



關于作者

Kuebler 是在 IBM Boeblingen Lab 工作的高級軟件工程師。自 1990 年進入 IBM 以來,他擔任過開發(fā)、技術營銷和項目管理等各種職務,具有在多環(huán)境下進行體系結構和軟件開發(fā)的廣泛經(jīng)驗。他的專業(yè)技術領域包括面向對象技術、VisualAge for Java、WebSphere 以及中間件技術。他目前的職責包括用于動態(tài)電子商務的電子公共設施(eUtility)的定義、體系結構和原型建立。他在德國 Stuttgart University 學習計算機科學,畢業(yè)于 1990 年。您可以通過
dkuebler@de.ibm.com 與他聯(lián)系。


Eibach 是在 IBM Boeblingen Lab 工作的高級軟件架構設計師。自 1968 年進入 IBM 以來,他擔任過區(qū)域支持、微碼和軟件開發(fā)等各種職務。他從事過不同環(huán)境下的架構設計工作。他的專業(yè)技術領域包括面向對象技術、大型系統(tǒng)服務器技術、網(wǎng)絡和中間件技術。他目前的職責包括用于動態(tài)電子商務的電子公共設施的定義、體系結構和原型建立。他在德國 Giessen University 學習射頻技術,畢業(yè)于 1968 年。您可以通過 eibachw@de.ibm.com 和他聯(lián)系。

發(fā)布:2007-03-25 13:29    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]
相關文章:
石家莊OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢