Grid Computing 演習 1~6 Globus Toolkit Version 4 (Java WS Core) 演習: WS-Resourceの生成と機能拡張 Grid Computing 目標:GT4 Java Core 、WSRF基本仕様のサポート確認 サーバー側の実装方法 – サービス – リソース – 各種設定ファイル (クライアントの実装方法) – 最低限 WSRFの標準的な機能は、GT4に含まれる標準クライアントで利用可能 GT4標準クライアントの利用方法 – wsrf-get-property – wsrf-update-property – wsrf-destroy – wsrf-set-termination-time Grid Computing 概要 0.Borja Sotomayor,”The Globus Toolkit 4 Programmer‘s Tutorial” が基本 – http://gdp.globus.org/gt4-tutorial/ “Chapter 5. Multiple Resources”に修正を加え、その効果を逐次確認する 1.WS-Coreの導入 2.標準的なWS-Resourceパターンの確認 – サービス及びリソースの構築、デプロイ、アクセス確認 3.リソース・プロパティに対するアクセス手段の追加 (オペレーション・プロバイダの活用) – 実装は修正せず、WSDL, WSDDファイルの変更のみで実現 4.リソース・プロパティのコードにおける表現方法を変更 (サービス/リソース実装の変更) – サービス/リソースの実装のみを変更 5.WS-ResorceLifeTimeへの対応:Immediate Destruction – WSDL, WSDDファイルの変更のみで実現 6. WS-ResorceLifeTimeへの対応:Scheduled Destruction – WSDL/WSDD、リソース実装の修正。サービス実装は変更なし オプション:JNDIのデプロイファイルの修正(破棄時刻をより正確にするため) Grid Computing WS-Resourceの拡張(本日の演習) wsrfdestroy カスタム クライアント wsrf-getproperty wsrf-setterminationtime wsrf-updateproperty WS-Resource WS-Resource WS-Resource WS-Resource Custom method (Get Property) Custom method Get Property Set Property Custom method Get Property Set Property Immediate Destruction Custom method Get Property Set Property Immediate Destruction Scheduled Destruction 2 3,4 5 6 Grid Computing インター フェース 2.標準的なWS-Resourceパターンの確認(主要ファイルの み) Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java リソース deploy-server.wsdd epr.txt MathResource.java インター フェース クライアント Webサービス ClientAdd.java Math.wsdl MathService.java Grid Computing インター フェース ClientCreate.java(無修正で使用) Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java – WS-Resourceが生成される クライアント Webサービス ClientAdd.java Math.wsdl MathService.java MathQNames.java … 演習を通じて、修正無しで使用する // Get factory portType factoryEPR = new EndpointReferenceType(); factoryEPR.setAddress(new Address(factoryURI)); mathFactory = factoryLocator.getFactoryPortTypePort(factoryEPR); // Create resource and get endpoint reference of WS-Resource CreateResourceResponse createResponse = mathFactory.createResource(new CreateResource()); instanceEPR = createResponse.getEndpointReference(); // Write endpoint reference to file ….. リソース MathResource.java MathQNames.java インター フェース MathFactoryServiceを呼び出し、 End Point Reference (EPR)を取得する MathResourceHome.java deploy-jndi-config.xml deploy-server.wsdd epr.txt Grid Computing インター フェース ClientAdd.java (無修正で使用) Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java deploy-server.wsdd epr.txt クライアント Webサービス ClientAdd.java Math.wsdl MathService.java MathQNames.java 演習を通じて、修正無しで使用する … // Get endpoint reference of WS-Resource from file FileInputStream fis = new FileInputStream(eprFile); instanceEPR = (EndpointReferenceType) ObjectDeserializer.deserialize( new InputSource(fis),EndpointReferenceType.class); fis.close(); … // Get PortType MathPortType math = instanceLocator.getMathPortTypePort(instanceEPR); // Perform addition math.add(value); ….. リソース MathResource.java MathQNames.java インター フェース EPRで示されたWS-Resource (MathService + MathResource)に 加算を依頼、結果を受け取る MathResourceHome.java deploy-jndi-config.xml Grid Computing インター フェース その他のファイル(無修正で使用) Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java MathQNames.java(図中省略) deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml – 名前空間の扱いを簡易にするための補助ファイル MathResource.java MathQNames.java クライアント インター フェース MathResourceHome.java(図中省略) – リソース・ホーム リソース Webサービス ClientAdd.java MathFactoryService.java Math.wsdl MathService.java MathQNames.java – ファクトリー・サービス … ctx = ResourceContext.getResourceContext(); home = (MathResourceHome) ctx.getResourceHome(); key = home.create(); String instanceService = (String) MessageContext.getCurrentContext().getService().getOption("instance"); String instanceURI = baseURL.toString() + instanceService; epr = AddressingUtils.createEndpointReference(instanceURI, key); Grid Computing インター フェース MathService.java (修正あり) Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java リソース MathResource.java MathQNames.java クライアント インター フェース WS-Resourceを形成するサービスの実装 リソース・プロパティの実装方法変更に あわせ、演習3で修正 MathResourceHome.java deploy-jndi-config.xml deploy-server.wsdd epr.txt Webサービス ClientAdd.java – 簡便な方法から、よりWSRFの特徴が見える方法へ Math.wsdl MathService.java MathQNames.java … resource = ResourceContext.getResourceContext().getResource(); MathResource mathResource = (MathResource) resource; … mathResource.setValue(mathResource.getValue() + a); //初期状態 mathResource.setLastOp("ADDITION"); … ResourceProperty valueRP = mathResource //修正後 .getResourcePropertySet() .get(MathQNames.RP_VALUE); Integer value = (Integer) valueRP.get(0); value = new Integer(value.intValue()+a); valueRP.set(0, value); Grid Computing インター フェース MathResource.java (1,修正あり) Webサービス クライアント Factory.wsdl deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml リソース MathResource.java MathQNames.java クライアント インター フェース WS-Resourceを形成するリソースの実装 演習3、5で修正 演習5まで終了したファイルから抜粋 MathFactoryService.java ClientCreate.java MathQNames.java Webサービス ClientAdd.java … public class MathResource implements Resource, ResourceIdentifier, ResourceProperties, ResourceLifetime { … private Calendar terminationTime; … public Object initialize() throws Exception { this.key = new Integer(hashCode()); this.propSet = new SimpleResourcePropertySet( MathQNames.RESOURCE_PROPERTIES); valueRP = new SimpleResourceProperty(MathQNames.RP_VALUE); valueRP.add (new Integer(0)); this.propSet.add(valueRP); … return key; } Math.wsdl MathService.java MathQNames.java Grid Computing インター フェース MathResource.java (2,修正あり) Webサービス クライアント … Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java epr.txt クライアント deploy-server.wsdd MathResourceHome.java deploy-jndi-config.xml Webサービス ClientAdd.java … /* Required by interface ResourceProperties */ public ResourcePropertySet getResourcePropertySet() { return this.propSet; } /* Required by interface ResourceIdentifier */ public Object getID() { return this.key; } } リソース MathResource.java MathQNames.java インター フェース /* Required by interface ResourceLifetime */ public Calendar getCurrentTime() { return Calendar.getInstance(); } public Calendar getTerminationTime() { return this.terminationTime; } public void setTerminationTime(Calendar terminationTime) { this.terminationTime=terminationTime; } Math.wsdl MathService.java MathQNames.java Grid Computing インター フェース Math.wsdl (修正あり) Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java インターフェースを記述 deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml そのままデプロイされるわけではない WSDLプリプロセッサー(GTが提供) 演習2,4,5で修正 MathResource.java MathQNames.java クライアント インター フェース –全部を書かなくても良い リソース Webサービス ClientAdd.java Math.wsdl MathService.java MathQNames.java Grid Computing インター フェース deploy-server.wsdd (修正あり) Webサービス クライアント Factory.wsdl デプロイの構成を行う deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml リソース MathResource.java MathQNames.java クライアント インター フェース – サービスのURI、使用するクラスの指定 – WSDLファイルの指定 GT4のツールを使用する場合は、後ろに _serviceを追加した形で指定する – オペレーション・プロバイダの指定 MathFactoryService.java ClientCreate.java MathQNames.java Webサービス ClientAdd.java Math.wsdl MathService.java MathQNames.java 演習 2,4,5で修正 <!-- Instance service --> <service name="examples/core/factory/MathService" provider="Handler" use="literal“ style="document"> <parameter name="className“ value="org.globus.examples.services.core.factory.impl.MathService"/> <wsdlFile>share/schema/examples/MathService_instance/Math_service.wsdl</wsdlFile> … <parameter name="providers" value="GetRPProvider SetRPProvider DestroyProvider SetTerminationTimeProvider SubscribeProvider GetCurrentMessageProvider"/> </service> *注:このリストは、WS-Notification対応を含みます Grid Computing インター フェース その他の設定ファイル Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java リソース MathResource.java MathQNames.java クライアント インター フェース Factory.wsdl (修正なし) –ファクトリーサービスのインターフェースを 記述 MathResourceHome.java deploy-jndi-config.xml deploy-server.wsdd epr.txt Webサービス ClientAdd.java Math.wsdl MathService.java MathQNames.java deploy-jndi-config.xml (図中省略、修正ありÆなしにする) –リソースホームに関連 –演習5で修正 修正しなくても動作するが、リソース破棄の検知に時間がかかる。 Grid Computing インター フェース epr.txt Webサービス クライアント Factory.wsdl deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml リソース MathResource.java MathQNames.java インター フェース WS-ResourceのEnd Point Referenceを示す テキストファイル ClientCreateによって生成される 他のクライアントに使用される MathFactoryService.java ClientCreate.java MathQNames.java クライアント Webサービス ClientAdd.java <ns1:MathResourceReference xsi:type="ns2:EndpointReferenceType" xmlns:ns1="http://www.globus.org/namespaces/examples/core/MathService_instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://schemas.xmlsoap.org/ws/2004/03/addressing"> Math.wsdl MathService.java MathQNames.java <ns2:Address xsi:type="ns2:AttributedURI"> http://192.168.1.1:8080/wsrf/services/examples/core/factory/MathService </ns2:Address> <ns2:ReferenceProperties xsi:type="ns2:ReferencePropertiesType"> <ns1:MathResourceKey>23578083</ns1:MathResourceKey> </ns2:ReferenceProperties> <ns2:ReferenceParameters xsi:type="ns2:ReferenceParametersType"/> </ns1:MathResourceReference> Grid Computing インター フェース in.xml Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java deploy-server.wsdd epr.txt リソース MathResource.java MathQNames.java インター フェース 演習2で使用 クライアント –wsrf-update-propertyコマンドの入力ファイル MathResourceHome.java deploy-jndi-config.xml Webサービス ClientAdd.java Math.wsdl MathService.java MathQNames.java in.xml <?xml version="1.0" encoding="UTF-8"?> <doc> <ns1:LastOp xmlns:ns1="http://www.globus.org/namespaces/examples/core/MathService_instance"> WSRF_UPDATE_PROPERTY </ns1:LastOp> </doc> Grid Computing 参考:globus-build-service チュートリアルに含まれているが、独立したプロジェクトとしても公開されて いる(GT4標準添付ではない) – http://gsbt.sourceforge.net/content/view/14/31/ GT4を用いたWSRF Webサービスの構築を容易にする – 特定のディレクトリ構造に従ってファイルを用意する事が必要 関連ファイル – globus-build-service.py build.mappings build.xml C:¥ws-core-4.0.2¥share¥globus_wsrf_tools¥build-stubs.xml – flatten, generateBindings, generateStubs, mergePackageMapping, .. C:¥ws-core-4.0.2¥share¥globus_wsrf_common¥build-packages.xml – makeGar, deployGar, undeployGar, .. namespace2package.mappings Grid Computing 3.リソース・プロパティに対するアクセス手段の追加 インター フェース Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml リソース MathResource.java MathQNames.java インター フェース クライアント Webサービス ClientAdd.java (wsrf-get-property) (wsrf-update-property) Math.wsdl in.xml MathService.java MathQNames.java Grid Computing 4.リソース・プロパティの表現方法を変更 インター フェース Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml リソース MathResource.java MathQNames.java インター フェース クライアント ClientAdd.java (wsrf-get-property) (wsrf-update-property) Webサービス Math.wsdl in.xml MathService.java MathQNames.java Grid Computing 5.WS-ResorceLifeTimeへの対応:Immediate Destruction インター フェース Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml リソース MathResource.java MathQNames.java インター フェース クライアント ClientAdd.java (wsrf-get-property) (wsrf-update-property) (wsrf-destroy) Webサービス Math.wsdl in.xml MathService.java MathQNames.java Grid Computing 6.WS-ResorceLifeTimeへの対応:Scheduled Destruction インター フェース Webサービス クライアント Factory.wsdl MathFactoryService.java ClientCreate.java MathQNames.java deploy-server.wsdd epr.txt MathResourceHome.java deploy-jndi-config.xml リソース MathResource.java MathQNames.java インター フェース クライアント ClientAdd.java (wsrf-get-property) (wsrf-update-property) (wsrf-destroy) (wsrf-set-termination-time) Webサービス Math.wsdl in.xml MathService.java MathQNames.java
© Copyright 2024 Paperzz