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

將舊應(yīng)用改造成Web服務(wù)

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

AMTeam.org

將舊應(yīng)用改造成Web服務(wù)


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

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

2002 年 1 月

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

介紹

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

Web 服務(wù)體系結(jié)構(gòu)(Web services architecture(WSA))是將企業(yè)舊應(yīng)用集成到這一新領(lǐng)域的理想技術(shù)。這是為了啟用程序?qū)Τ绦蛲ㄐ哦鴦?chuàng)建與企業(yè)應(yīng)用交互的、基于 Web 瀏覽器的用戶界面的下一個步驟。這暗示著人們可以以一種更加自動化的方式和更有效的辦法來做相同的事情。

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

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

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

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

讓舊應(yīng)用重?zé)ɑ盍?/STRONG>

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

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

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

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

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

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

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

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

概念體系結(jié)構(gòu)

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

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

圖 1:通過 SOAP 訪問舊應(yīng)用的概念體系結(jié)構(gòu)


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

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

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

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

Web 服務(wù)適配器

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

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

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

事務(wù)管理

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

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

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

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

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

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

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

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

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

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


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

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

一個樣本實現(xiàn)

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

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

圖 3:啟用了SOAP的舊應(yīng)用樣本


用 WSDL 寫的 VAT SOAP 服務(wù)接口

<?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;

結(jié)束語

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

在這篇文章中,我們描述了如何通過應(yīng)用 Web 服務(wù)技術(shù)來使舊應(yīng)用成熟起來。我們已經(jīng)展示了怎樣能夠?qū)S薪涌诟脑斐蓜討B(tài)電子商務(wù)所需的基于開放標準的接口。

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

參考資料

  • 請單擊文章頂部或底部的討論參與本文的討論論壇。
  • 您可以學(xué)習(xí)一些 Web 服務(wù)體系結(jié)構(gòu)(WSA)、動態(tài)電子商務(wù)面向服務(wù)的體系結(jié)構(gòu)(SOA)的背景基礎(chǔ)知識。
  • 想了解關(guān)于大型機硬件和應(yīng)用的更多信息,您應(yīng)參閱 IBM 的 zSeries、Parallel Sysplex for zOS、IBM CICS Transaction ServerIMS、IBM Workload Manager WLMMQSeries InternetPassthru。



關(guān)于作者

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


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

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

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

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

咨詢:400-8352-114

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

QQ在線咨詢