欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用Globus Toolkit 4構建WEB服務(wù) - [Matrix - 與 Java 共舞]
用Globus Toolkit 4(GT4)構建WEB服務(wù)

作者:Birali Hakizumwami

譯者:xzzhouhu






版權聲明:任何獲得Matrix授權的網(wǎng)站,轉載時(shí)請務(wù)必以超鏈接形式標明文章原始出處和作者信息及本聲明
作者:Birali Hakizumwami;xzzhouhu
原文地址:http://www.onjava.com/pub/a/onjava/2005/10/19/constructing-web-services-with-globus-toolkit.html
中文地址:http://www.matrix.org.cn/resource/article/44/44032_Globus_Toolkit.html
關(guān)鍵詞: Globus Toolkit

摘要:
本文主要介紹了通過(guò)一種新的方法來(lái)構建企業(yè)軟件,即通過(guò)調整Globus Toolkit 4實(shí)現的網(wǎng)格計算的概念來(lái)實(shí)現。GT4是一種可以通過(guò)開(kāi)放網(wǎng)格服務(wù)架構(OGSI)來(lái)實(shí)施的開(kāi)放資源。這種實(shí)施主要目的是為網(wǎng)格服務(wù)架構提供了依據,同時(shí)也可以為別的網(wǎng)格服務(wù)架構實(shí)施提供參考。本文詳細介紹了GT4中JAVA的核心服務(wù),這些服務(wù)具備提供代管網(wǎng)格服務(wù)實(shí)時(shí)運行環(huán)境的能力,當然這些網(wǎng)格服務(wù)都是由JAVA寫(xiě)的。實(shí)時(shí)運行環(huán)境在網(wǎng)格服務(wù)的應用和網(wǎng)絡(luò )承載之間和傳輸協(xié)議引擎之間起到了協(xié)調的作用。


一.網(wǎng)格的定義

網(wǎng)格的定義:
網(wǎng)格就是將收集網(wǎng)絡(luò )上所有可用的分布式計算資源提供給最終用戶(hù)或組建成一個(gè)巨大的計算系統。網(wǎng)格計算給分布式計算提供了一種全新的方法,不僅在跨地區而且在跨組織,機器結構和軟件限制,給連接到網(wǎng)格的每個(gè)用戶(hù)提供更多的資源,計算機之間的協(xié)作和信息訪(fǎng)問(wèn)。分布式資源,像計算周期,存儲和信息,可以在網(wǎng)格中的任何地區訪(fǎng)問(wèn),同時(shí)也可以在網(wǎng)格中提供這些服務(wù)供其他用戶(hù)訪(fǎng)問(wèn)。這就要通過(guò)在每個(gè)獨立的組織或資源之間進(jìn)行安全的協(xié)調資源共享,共同建立一個(gè)動(dòng)態(tài)虛擬組織機構。


二.Globus Toolkit Version 4

在本文中,我們主要討論GT4中JAVA的核心服務(wù)。(如圖1),這些服裉峁┝舜芡穹袷凳痹誦謝肪車(chē)哪芰ΑJ凳痹誦謝肪吃謨沒(méi)Фㄒ宓撓τ梅窈虶T4的核心服務(wù)之間,網(wǎng)絡(luò )承載和傳輸協(xié)議引擎之間起到了協(xié)調的作用。GT4核心服務(wù)還提供了程序開(kāi)發(fā)支持的功能,包括開(kāi)放式開(kāi)發(fā)模式和訪(fǎng)問(wèn)網(wǎng)格服務(wù)的實(shí)現,像GRAM(Grid Resource Allocation Management,網(wǎng)格資源管理)。應用GT4強有力的理由就是因為它是建立在現有的WEB服務(wù)標準和技術(shù)的基礎上,像SOAP和WSDL。網(wǎng)格服務(wù)提供的接口都是通過(guò)WSDL來(lái)描述的。GT4提供了一個(gè)軟件倉庫,像安全支持,軟件的探索,軟件的資源管理,軟件的調用,軟件之間的通信,異常處理和數據管理等。


                   (圖1)

圖1主要描述了在服務(wù)器端的GT4中的主要組件結構。這只是GT4所提供功能的一部分,我們只是認為它很適合本文。GT4結構由一個(gè)網(wǎng)格容器組成,網(wǎng)格容器主要用來(lái)管理所有部署的WEB服務(wù),貫穿于每個(gè)WEB服務(wù)的運行周期。GT4使用apache的axis作為它的WEB服務(wù)的引擎來(lái)處理所有的SOAP消息,JAX-RPC (Java API for XML-Based RPC)處理和WEB服務(wù)的配置。


三.貸款償還例子:

我們列舉這樣一個(gè)例子,主要想向大家展示在企業(yè)內部如何通過(guò)Globus Toolkit 來(lái)解決不同類(lèi)操作系統之間進(jìn)行融合。在企業(yè)內部,有些應用可能是原來(lái)主機遺留下來(lái)的,技術(shù)比較落后,有些應用已經(jīng)采用了現代技術(shù),像J2EE。甚至我們采用最先進(jìn)的技術(shù)在一個(gè)企業(yè)內部的應用之間進(jìn)行信息共享也要面臨巨大的挑戰。圖2給出了這樣一個(gè)例子,在一個(gè)抵押機構內,在貸款償還信息處理和會(huì )計部門(mén)信息處理之間的交互,


                (圖2)

會(huì )計部門(mén)使用申請貸款處理服務(wù)來(lái)申請貸款。

為了創(chuàng )建和部署網(wǎng)格服務(wù),我們需要:
*通過(guò)創(chuàng )建WSDL文件來(lái)定義服務(wù)的接口
*用JAVA來(lái)實(shí)現
*通過(guò)創(chuàng )建WSDD文件來(lái)定義服務(wù)的部署參數
*使用ANT編譯源代碼并生成GAR文件
*用GT4分發(fā)工具部署GAR文件
我們必須使用從上往下的方法來(lái)創(chuàng )建網(wǎng)格服務(wù),(圖3)

這種方法首先從提供WSDL文件開(kāi)始,在WSDL文件中包括對WEB服務(wù)的抽象定義,包括服務(wù)類(lèi)型,消息類(lèi)型和端口類(lèi)型。從WSDL文檔開(kāi)始并根據WSDL文檔創(chuàng )建了JAVA模型,從而導致與其他系統更好交互。



  我們使用GT4 toolkit自帶的工具來(lái)進(jìn)行服務(wù)的綁定和產(chǎn)生客戶(hù)段需要的根類(lèi)。這種方法的下一步就是提供接口的實(shí)現。

貸款償還服務(wù)處理定義:
對于貸款償還服務(wù)處理的例子的接口類(lèi)型我們定義為loan.wsdl,它描述了貸款償還服務(wù)所提供的三個(gè)部分的操作(申請貸款,貸款處理和獲得貸款)。首先我們描述貸款償還服務(wù)的請求和響應:

<types>

  <xsd:element name="createLoan">
    <xsd:complexType>
      <xsd:sequence>
          <xsd:element name="loanNumber" type="xsd:int"/>
        <xsd:element name="amountUPB" type="xsd:double"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="createLoanResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="returnValue" type="xsd:int"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="processLoanPayment">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="loanNumber" type="xsd:int"/>
        <xsd:element name="amount" type="xsd:double"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="processLoanPaymentResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="returnValue" type="xsd:int"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="getLoan">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="loanNumber" type="xsd:int"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="getLoanResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="returnValue" type="tns:LoanType"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</types>


我們在文件 loan.xsd.中定義了貸款的數據類(lèi)型,我們通過(guò)使用“ import <xsd:import schemaLocation="loan.xsd"/> ”可以直接將loan.xsd.文件導入到文件loan.wsdl 中,并且用它作為獲得貸款操作返回的類(lèi)型

<complexType name="LoanType">
    <sequence>
        <element name="loanNumber" type="int"/>
        <element name="UPB" type="double"/>
        <element name="status" type="string"/>
        <element name="createDate" type="string"/>
    </sequence>
</complexType>


下一步,我們要定義所有的消息服務(wù)。一條消息元素可能由一個(gè)或多個(gè)部分組成,消息元素的每個(gè)部分對應一個(gè)參數,并且還有一個(gè)類(lèi)型屬性。消息既可以是一個(gè)請求消息(輸入消息),也可以是一個(gè)響應消息(輸出消息)。

<message name="CreateLoanInputMessage">
  <part name="parameters" element="tns:createLoan"/>
</message>
<message name="CreateLoanOutputMessage">
  <part name="parameters" element="tns:createLoanResponse"/>
</message>

<message name="ProcessLoanPaymentInputMessage">
  <part name="parameters" element="tns:processLoanPayment"/>
</message>
<message name="ProcessLoanPaymentOutputMessage">
  <part name="parameters"
    element="tns:processLoanPaymentResponse"/>
</message>

<message name="GetLoanInputMessage">
  <part name="parameters" element="tns:getLoan"/>
</message>
<message name="GetLoanOutputMessage">
  <part name="parameters" element="tns:getLoanResponse"/>
</message>


最后我們定義所有的端口類(lèi)型,每個(gè)接口類(lèi)型定義了一個(gè)或多個(gè)操作來(lái)使用當前的操作元素,每個(gè)獨立的操作元素又定義了一個(gè)操作和與操作有聯(lián)系的消息的輸入輸出。在一個(gè)端口類(lèi)型內操作元素定義了端口類(lèi)型內所有調用方法的語(yǔ)法。

<portType name="LoanPortType">
  <operation name="createLoan">
    <input message="tns:CreateLoanInputMessage"/>
    <output message="tns:CreateLoanOutputMessage"/>
    <fault name="Fault" message="ogsi:FaultMessage"/>
  </operation>
  <operation name="processLoanPayment">
    <input message="tns:ProcessLoanPaymentInputMessage"/>
    <output message="tns:ProcessLoanPaymentOutputMessage"/>
    <fault name="Fault" message="ogsi:FaultMessage"/>
  </operation>
  <operation name="getLoan">
    <input message="tns:GetLoanInputMessage"/>
    <output message="tns:GetLoanOutputMessage"/>
    <fault name="Fault" message="ogsi:FaultMessage"/>
  </operation>
</portType>


服務(wù)的實(shí)現:
  在前面的步驟中,終端貸款端口類(lèi)型的接口已經(jīng)產(chǎn)生,在定義這些端口類(lèi)型的接口時(shí),所有的遠程操作都要設為public,并且拋出java.rmi.RemoteException。在本文中給出了LoanServiceImpl類(lèi),主要實(shí)現貸款端口類(lèi)型的接口,這些實(shí)現要用到前面所講到的用loan.wsdl文件所生成的根類(lèi)。

public class LoanServiceImpl implements LoanPortType


其中LoanServiceImpl 所實(shí)現的方法定義在LoanPortType接口中,createLoan方法在產(chǎn)生一個(gè)createLoan對象的構造器中要獲取一個(gè)貸款數字作為它的參數。

public CreateLoanResponse createLoan(CreateLoan cl)
throws java.rmi.RemoteException
public ProcessLoanPaymentResponse processLoanPayment(ProcessLoanPayment plp)
throws java.rmi.RemoteException
public GetLoanResponse getLoan(GetLoan gl) throws java.rmi.RemoteException


請參考完整代碼詳細描述方法的實(shí)現。

編譯并創(chuàng )建貸款/償還處理的WEB服務(wù):
下面我們介紹通過(guò)以下步驟來(lái)創(chuàng )建易部署的GT4打包文檔。Ant在編譯本文所提供文件時(shí)所產(chǎn)生的build.xml中包含了ant的執行任務(wù)的步驟。在build.xml中ant的執行任務(wù)調用GT4中的ant任務(wù),這些任務(wù)伴隨著(zhù)GT4的發(fā)布可以在編譯文件中找到。

%GLOBUS_LOCATION%/share/globus_wsrf_common/build-packages.xml
%GLOBUS_LOCATION%/share/globus_wsrf_tools/build-stubs.xml
%GLOBUS_LOCATION%/share/schema


編譯GT4中易部署的GAR文件
   為了創(chuàng )建易部署的網(wǎng)格打包文件,loan.gar,我們通過(guò)以下步驟來(lái)實(shí)現:(這些步驟與builder.xml中的ant任務(wù)是一致的):
·        與WSDL文件綁定
·        通過(guò)WSDL        文件生成一個(gè)根類(lèi),在安裝時(shí),提供一個(gè)特殊文件來(lái)對不同的命名空間和包之間進(jìn)行映射,這些包與表格中的目錄結構一致。
·        編譯根類(lèi)
·        編譯接口類(lèi)
·        用JAR壓縮接口類(lèi),和根類(lèi)一樣(loan.jar and loan_stubs.jar).
·        通過(guò)創(chuàng )建部署描述文件deploy-server.wsdd.來(lái)生成易部署的GAR文件,loan.gar
請參考源代碼中完整的build.xml文件,通過(guò)以上步驟來(lái)實(shí)現一系列的ant編譯任務(wù)。GT4描述我們的WEB服務(wù)文件deploy-server.wsdd就想這樣:

<service name="loan/impl/LoanService" provider="Handler"
use="literal" style="document">
    <parameter name="className" value="loan.impl.LoanServiceImpl"/>
    <wsdlFile>share/schema/loan/Loan_service.wsdl</wsdlFile>
    <parameter name="allowedMethods" value="*"/>
    <parameter name="handlerClass"
    value="org.globus.axis.providers.RPCProvider"/>
    <parameter name="scope" value="Application"/>
    <parameter name="providers" value="GetRPProvider"/>
    <parameter name="loadOnStartup" value="true"/>
</service>


讓我們來(lái)介紹一下deploy-server.wsdd中的一些參數:
服務(wù)名稱(chēng):指定我們所提供的WEB服務(wù)的路徑,我們將它與WEB服務(wù)容器的地址相結合起來(lái),我們會(huì )得到WEB服務(wù)的完整的URL。為了便于測試,使用獨立的GT4容器,URL就像這樣:

http://localhost:8080/wsrf/services/loan/impl/LoanService

類(lèi)名:指實(shí)現服務(wù)接口的類(lèi)(LoanServiceImpl).
WSDL文件:告訴GT4中的WEB服務(wù)容器對于當前的WEB服務(wù)的WSDL文件在那里可以找到。WSDL文件Loan_service.wsdl是在GT4 從loan.wsdl進(jìn)行ANT時(shí)自動(dòng)產(chǎn)生的。
啟動(dòng)時(shí)裝載:如果我們需要服務(wù)在WEB服務(wù)容器啟動(dòng)時(shí)就開(kāi)始裝載,允許我們控制服務(wù)的裝載。

部署GAR文件:
GAR文件loan.gar包含了所有的文件和WEB服務(wù)器需要的部署信息,我們使用GT4部署工具:

%GLOBUS_LOCATION%/bin/globus-deploy-gar $PROJECT_HOME/loan.gar

拷貝文檔文件(loan.wsdl,編譯的根類(lèi),編譯的接口實(shí)現,loan.wsdd)到GT4容器的目錄下適當位置。

測試借貸款處理實(shí)例

在圖1描述了如何將貸款方的子系統和貸款結算子系統作為借貸款的WEB服務(wù)的客戶(hù)端,現在我們就在GT4網(wǎng)格服務(wù)容器中創(chuàng )建和部署WEB服務(wù),我們需要用一個(gè)客戶(hù)端進(jìn)行測試,測試用例模擬一個(gè)貸款事件,一個(gè)貸款月度償還事件和一個(gè)貸款還清事件。作為客戶(hù)端來(lái)說(shuō),他們希望WEB服務(wù)的URI(統一資源標識符)能夠作為客戶(hù)端訪(fǎng)問(wèn)WEB服務(wù)的依據??蛻?hù)端的程序要獨立的進(jìn)行編譯,下面來(lái)描述客戶(hù)端訪(fǎng)問(wèn)WEB服務(wù)的主要步驟:

創(chuàng )建一終端引用類(lèi)型對象,來(lái)代表終端引用的貸款服務(wù)。我們的終端引用只需要服務(wù)的URI:
EndpointReferenceType endpoint = new EndpointReferenceType();
endpoint.setAddress(new Address(serviceURI));

下一步,我們要獲得引用服務(wù)的端口類(lèi)型,這需要一個(gè)根類(lèi)調用LoanServiceAddressingLocator, LoanServiceAddressingLocator主要是用來(lái)維持客戶(hù)端與WEB服務(wù)之間的通信和獲得引用貸款端口的類(lèi)型。
LoanServiceAddressingLocator locator = new LoanServiceAddressingLocator();
LoanPortType loanPT = locator.getLoanPortTypePort(endpoint);


一旦我們獲得這個(gè)引用,我們可以作為本地對象來(lái)操作WEB服務(wù)。例如,調用遠程的創(chuàng )建操作,我們僅僅需要在貸款端口類(lèi)型中使用創(chuàng )建方法。
CreateLoanResponse clr = loanPT.createLoan(new CreateLoan(amount, loanNumber));

請參考附件中完整的客戶(hù)端代碼。在編譯客戶(hù)端之前,請保證運行下面的腳本,以便于GT4的發(fā)布:
%GLOBUS_LOCATION%/etc/globus-devel-env.bat

globus-devel-env.bat文件主要是將Globus的類(lèi)庫注冊到系統的classpath中,因為客戶(hù)端是作為獨立的應用來(lái)編譯的,同樣,要保證在編譯客戶(hù)端的目錄中所放置的已編譯的根類(lèi)時(shí)能通過(guò)classpath找到,因此我們的客戶(hù)端可以訪(fǎng)問(wèn)服務(wù)器端的根類(lèi),像LoanServiceAddressingLocator。

啟動(dòng)網(wǎng)格容器
使用下面的命令來(lái)啟動(dòng)網(wǎng)格容器:

%GLOBUS_LOCATION%/bin/globus-start-container –nosec

-nosec參數主要是為了簡(jiǎn)化測試,略去安全設置。如果網(wǎng)格容器啟動(dòng)成功,你將會(huì )看到已部署的服務(wù)的URI列表,如果LoanService正確的部署,在已部署的服務(wù)的列表中有下面的一行:

[13]: http://localhost:8080/wsrf/services/loan/impl/LoanService

測試借貸款處理的WEB服務(wù)
通過(guò)客戶(hù)端進(jìn)行測試,我們假設有以下操作:申請貸款,償還貸款,還清貸款。

·        創(chuàng )建一個(gè)初始化貸款編號為100并且還有12000未還        
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService createLoan 100 120000
Loan 100 created successfully.


·        假定兩個(gè)月償還,每個(gè)月還$1100(本例不考慮利息的計算)
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 1100
Loan 100 processed successfully.
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 1100
Loan 100 processed successfully.


·        查看貸款的狀態(tài)
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService getLoanData 100
Loan Data
Create Date Mon Jun 06 16:41:06 EDT 2005
Unpaid Principal Balance 117800.0
Status ACTIVE


·        第三個(gè)月還清余款($117,800)
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 117800
Loan 100 processed successfully


·        查看貸款狀態(tài)
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService getLoanData 100
Loan Data
Create Date Mon Jun 06 16:41:06 EDT 2005
Unpaid Principal Balance 0.0
Status PAIDOFF


結束語(yǔ):

本文主要描述了在基于現有的WEB服務(wù)標準的基礎上,如何調整GT4網(wǎng)格結構來(lái)創(chuàng )建一個(gè)網(wǎng)格服務(wù)應用。盡管GT4已經(jīng)主要的應用在大型的科學(xué)計算問(wèn)題上,但是在一個(gè)企業(yè)內部它可以作為實(shí)現面向服務(wù)結構(SOA)的一種方法。本文主要是通過(guò)一個(gè)簡(jiǎn)單的實(shí)例來(lái)描述如何使用GT4中的JAVA核心服務(wù)來(lái)創(chuàng )建和部署一個(gè)網(wǎng)格服務(wù),但是并沒(méi)有覆蓋到更多的其他的更先進(jìn)的關(guān)于如何使用網(wǎng)格服務(wù)概念,向網(wǎng)格服務(wù)的分配和管理,文件傳輸的可靠性,網(wǎng)格異常和安全。

資源
·本文的示例代碼
·Matrix-Java開(kāi)發(fā)者社區:http://www.matrix.org.cn
·onjava.com:onjava.com
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
WebServiceWSDL結構分析
WSDL文件簡(jiǎn)介(附例子)
用tomcat和axis開(kāi)發(fā)web服務(wù)
InfoQ: Java與.NET的SOA互操作簡(jiǎn)易教程
JAX-RPC vs JAX-WS(二):
網(wǎng)格基礎概念
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久