配布資料1pdf 441KB

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