麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

用Globus Toolkit 4(GT4)構建WEB服務

2019-11-18 12:47:13
字體:
來源:轉載
供稿:網友

  一.網格的定義
  
  網格的定義:
  
  網格就是將收集網絡上所有可用的分布式計算資源提供給最終用戶或組建成一個巨大的計算系統。網格計算給分布式計算提供了一種全新的方法,不僅在跨地區而且在跨組織,機器結構和軟件限制,給連接到網格的每個用戶提供更多的資源,計算機之間的協作和信息訪問。分布式資源,像計算周期,存儲和信息,可以在網格中的任何地區訪問,同時也可以在網格中提供這些服務供其他用戶訪問。這就要通過在每個獨立的組織或資源之間進行安全的協調資源共享,共同建立一個動態虛擬組織機構。
  
  二.Globus Toolkit Version 4
  
  在本文中,我們主要討論GT4中java的核心服務。(如圖1),這些服裉峁┝舜芡穹袷凳痹誦謝肪車哪芰ΑJ凳痹誦謝肪吃謨沒Фㄒ宓撓τ梅窈虶T4的核心服務之間,網絡承載和傳輸協議引擎之間起到了協調的作用。GT4核心服務還提供了程序開發支持的功能,包括開放式開發模式和訪問網格服務的實現,像GRAM(Grid Resource Allocation Management,網格資源治理)。應用GT4強有力的理由就是因為它是建立在現有的WEB服務標準和技術的基礎上,像SOAP和WSDL。網格服務提供的接口都是通過WSDL來描述的。GT4提供了一個軟件倉庫,像安全支持,軟件的探索,軟件的資源治理,軟件的調用,軟件之間的通信,異常處理和數據治理等。
  
 用Globus Toolkit 4(GT4)構建WEB服務(圖一)
  (圖1)

  
  圖1主要描述了在服務器端的GT4中的主要組件結構。這只是GT4所提供功能的一部分,我們只是認為它很適合本文。GT4結構由一個網格容器組成,網格容器主要用來治理所有部署的WEB服務,貫穿于每個WEB服務的運行周期。GT4使用apache的axis作為它的WEB服務的引擎來處理所有的SOAP消息,JAX-RPC (Java API for xml-Based RPC)處理和WEB服務的配置。
  
  三.貸款償還例子:
  
  我們列舉這樣一個例子,主要想向大家展示在企業內部如何通過Globus Toolkit 來解決不同類操作系統之間進行融合。在企業內部,有些應用可能是原來主機遺留下來的,技術比較落后,有些應用已經采用了現代技術,像J2EE。甚至我們采用最先進的技術在一個企業內部的應用之間進行信息共享也要面臨巨大的挑戰。圖2給出了這樣一個例子,在一個抵押機構內,在貸款償還信息處理和會計部門信息處理之間的交互,
  
 用Globus Toolkit 4(GT4)構建WEB服務(圖二)
  (圖2)

  
  會計部門使用申請貸款處理服務來申請貸款。
  
  為了創建和部署網格服務,我們需要:
  *通過創建WSDL文件來定義服務的接口
  *用JAVA來實現
  *通過創建WSDD文件來定義服務的部署參數
  *使用ANT編譯源代碼并生成GAR文件
  *用GT4分發工具部署GAR文件
  我們必須使用從上往下的方法來創建網格服務,(圖3)
  
  這種方法首先從提供WSDL文件開始,在WSDL文件中包括對WEB服務的抽象定義,包括服務類型,消息類型和端口類型。從WSDL文檔開始并根據WSDL文檔創建了JAVA模型,從而導致與其他系統更好交互。
  
 用Globus Toolkit 4(GT4)構建WEB服務(圖三)
  (圖3)

  
  我們使用GT4 toolkit自帶的工具來進行服務的綁定和產生客戶段需要的根類。這種方法的下一步就是提供接口的實現。
  
  貸款償還服務處理定義:
  
  對于貸款償還服務處理的例子的接口類型我們定義為loan.wsdl,它描述了貸款償還服務所提供的三個部分的操作(申請貸款,貸款處理和獲得貸款)。首先我們描述貸款償還服務的請求和響應:
  
  <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.中定義了貸款的數據類型,我們通過使用“ import <xsd:import schemaLocation="loan.xsd"/> ”可以直接將loan.xsd.文件導入到文件loan.wsdl 中,并且用它作為獲得貸款操作返回的類型
  
  <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>
  
  下一步,我們要定義所有的消息服務。一條消息元素可能由一個或多個部分組成,消息元素的每個部分對應一個參數,并且還有一個類型屬性。消息既可以是一個請求消息(輸入消息),也可以是一個響應消息(輸出消息)。
  
  <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>
  
  最后我們定義所有的端口類型,每個接口類型定義了一個或多個操作來使用當前的操作元素,每個獨立的操作元素又定義了一個操作和與操作有聯系的消息的輸入輸出。在一個端口類型內操作元素定義了端口類型內所有調用方法的語法。
  
  <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>
  
  服務的實現:
  
  在前面的步驟中,終端貸款端口類型的接口已經產生,在定義這些端口類型的接口時,所有的遠程操作都要設為public,并且拋出java.rmi.RemoteException。在本文中給出了LoanServiceImpl類,主要實現貸款端口類型的接口,這些實現要用到前面所講到的用loan.wsdl文件所生成的根類。
  
  public class LoanServiceImpl implements LoanPortType
  
  其中LoanServiceImpl 所實現的方法定義在LoanPortType接口中,createLoan方法在產生一個createLoan對象的構造器中要獲取一個貸款數字作為它的參數。
  
  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
  
  請參考完整代碼具體描述方法的實現。
  
  編譯并創建貸款/償還處理的WEB服務:
  
  下面我們介紹通過以下步驟來創建易部署的GT4打包文檔。Ant在編譯本文所提供文件時所產生的build.xml中包含了ant的執行任務的步驟。在build.xml中ant的執行任務調用GT4中的ant任務,這些任務伴隨著GT4的發布可以在編譯文件中找到。
  
  %GLOBUS_LOCATION%/share/globus_wsrf_common/build-packages.xml%GLOBUS_LOCATION%/share/globus_wsrf_tools/build-stubs.xml%GLOBUS_LOCATION%/share/schema
  
  編譯GT4中易部署的GAR文件
  
  為了創建易部署的網格打包文件,loan.gar,我們通過以下步驟來實現:(這些步驟與builder.xml中的ant任務是一致的):
  ·    與WSDL文件綁定
  ·    通過WSDL    文件生成一個根類,在安裝時,提供一個非凡文件來對不同的命名空間和包之間進行映射,這些包與表格中的目錄結構一致。
  ·    編譯根類
  ·    編譯接口類
  ·    用JAR壓縮接口類,和根類一樣(loan.jar and loan_stubs.jar).
  ·    通過創建部署描述文件deploy-server.wsdd.來生成易部署的GAR文件,loan.gar
  請參考源代碼中完整的build.xml文件,通過以上步驟來實現一系列的ant編譯任務。GT4描述我們的WEB服務文件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>
  
  讓我們來介紹一下deploy-server.wsdd中的一些參數:
  
  服務名稱:指定我們所提供的WEB服務的路徑,我們將它與WEB服務容器的地址相結合起來,我們會得到WEB服務的完整的URL。為了便于測試,使用獨立的GT4容器,URL就像這樣:
  
  http://localhost:8080/wsrf/services/loan/impl/LoanService
  
  類名:指實現服務接口的類(LoanServiceImpl).
  
  WSDL文件:告訴GT4中的WEB服務容器對于當前的WEB服務的WSDL文件在那里可以找到。WSDL文件Loan_service.wsdl是在GT4 從loan.wsdl進行ANT時自動產生的。
  
  啟動時裝載:假如我們需要服務在WEB服務容器啟動時就開始裝載,答應我們控制服務的裝載。
  
  部署GAR文件:
  
  GAR文件loan.gar包含了所有的文件和WEB服務器需要的部署信息,我們使用GT4部署工具:
  
  %GLOBUS_LOCATION%/bin/globus-deploy-gar $PROJECT_HOME/loan.gar
  
  拷貝文檔文件(loan.wsdl,編譯的根類,編譯的接口實現,loan.wsdd)到GT4容器的目錄下適當位置。
  
  測試借貸款處理實例
  
  在圖1描述了如何將貸款方的子系統和貸款結算子系統作為借貸款的WEB服務的客戶端,現在我們就在GT4網格服務容器中創建和部署WEB服務,我們需要用一個客戶端進行測試,測試用例模擬一個貸款事件,一個貸款月度償還事件和一個貸款還清事件。作為客戶端來說,他們希望WEB服務的URI(統一資源標識符)能夠作為客戶端訪問WEB服務的依據。客戶端的程序要獨立的進行編譯,下面來描述客戶端訪問WEB服務的主要步驟:
  
  創建一終端引用類型對象,來代表終端引用的貸款服務。我們的終端引用只需要服務的URI:
  EndpointReferenceType endpoint = new EndpointReferenceType();
  endpoint.setAddress(new Address(serviceURI));
  
  下一步,我們要獲得引用服務的端口類型,這需要一個根類調用LoanServiceAddressingLocator, LoanServiceAddressingLocator主要是用來維持客戶端與WEB服務之間的通信和獲得引用貸款端口的類型。
  LoanServiceAddressingLocator locator = new LoanServiceAddressingLocator();
  LoanPortType loanPT = locator.getLoanPortTypePort(endpoint);
  
  一旦我們獲得這個引用,我們可以作為本地對象來操作WEB服務。例如,調用遠程的創建操作,我們僅僅需要在貸款端口類型中使用創建方法。
  CreateLoanResponse clr = loanPT.createLoan(new CreateLoan(amount, loanNumber));
  
  請參考附件中完整的客戶端代碼。在編譯客戶端之前,請保證運行下面的腳本,以便于GT4的發布:
  %GLOBUS_LOCATION%/etc/globus-devel-env.bat
  
  globus-devel-env.bat文件主要是將Globus的類庫注冊到系統的classpath中,因為客戶端是作為獨立的應用來編譯的,同樣,要保證在編譯客戶端的目錄中所放置的已編譯的根類時能通過classpath找到,因此我們的客戶端可以訪問服務器端的根類,像LoanServiceAddressingLocator。
  
  啟動網格容器
  
  使用下面的命令來啟動網格容器:
  
  %GLOBUS_LOCATION%/bin/globus-start-container –nosec
  
  -nosec參數主要是為了簡化測試,略去安全設置。假如網格容器啟動成功,你將會看到已部署的服務的URI列表,假如LoanService正確的部署,在已部署的服務的列表中有下面的一行:
  
  [13]: http://localhost:8080/wsrf/services/loan/impl/LoanService
  
  測試借貸款處理的WEB服務
  
  通過客戶端進行測試,我們假設有以下操作:申請貸款,償還貸款,還清貸款。
  
  ·    創建一個初始化貸款編號為100并且還有12000未還
  java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService createLoan 100 120000
  Loan 100 created sUCcessfully.
  
  ·    假定兩個月償還,每個月還$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.
  
  ·    查看貸款的狀態
  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
  
  ·    第三個月還清余款($117,800)
  java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 117800
  Loan 100 processed successfully
  
  ·    查看貸款狀態
  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
  
  結束語:
  
  本文主要描述了在基于現有的WEB服務標準的基礎上,如何調整GT4網格結構來創建一個網格服務應用。盡管GT4已經主要的應用在大型的科學計算問題上,但是在一個企業內部它可以作為實現面向服務結構(SOA)的一種方法。本文主要是通過一個簡單的實例來描述如何使用GT4中的JAVA核心服務來創建和部署一個網格服務,但是并沒有覆蓋到更多的其他的更先進的關于如何使用網格服務概念,向網格服務的分配和治理,文件傳輸的可靠性,網格異常和安全。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久亚洲精品久久国产一区二区 | 成年人网站国产 | 精品国产91久久久久久久 | 美女av在线免费观看 | 亚洲电影在线观看高清免费 | 免费一级毛片免费播放 | 成片免费观看视频大全 | 草逼一区 | 国产成年人小视频 | 一级做a爱片性色毛片 | 欧美日韩电影 | 亚洲性在线视频 | 激情在线免费观看 | 精品国产一区二区三区免费 | 国产日韩成人 | 羞羞的小视频 | 日韩精品一区二区三区中文 | 国产精品观看在线亚洲人成网 | a视频在线播放 | 男女生羞羞视频网站在线观看 | 色人阁五月天 | 亚洲一区成人在线 | 国产精品一区二区三区在线 | 在线观看免费毛片视频 | 国产资源在线观看视频 | 午夜神马福利视频 | 亚洲国产成人久久一区www妖精 | 国产精品久久久久一区二区 | 叉逼视频 | 欧美性色黄大片www 成人免费网站在线观看 | 中国精品久久 | 久久免费观看一级毛片 | 日韩在线播放一区二区 | 香蕉国产片 | 毛片在线视频在线播放 | 亚洲一区二区在线视频 | 91精品国产91热久久久做人人 | 国产一区二区三区四 | 美女污污在线观看 | 国产 日韩 亚洲 欧美 | 免看黄大片aa |