レベル: 中級 Dan Jemiolo (danjemiolo@us.ibm.com), Advisory Software Engineer, IBM
2007年 4月 24日 WS-ResourceProperties 仕様は、Webサービス・インターフェースの一部として厳密に型定義のされたプロパティーを宣言するための標準を定めていますが、許可、検証、およびその他の重要なトピックに関しては何ら定めていません。幸い、WS-ResourceFramework の作成者は、標準的な方法でこれらの問題に対処できる WS-ResourceMetadata という新しい仕様を提供しています。Apache Muse プロジェクトでは、これら双方の仕様を実装でき、小規模な XML ファイルしか持たないリソース・プロパティーとメタデータを関連付けます。この記事では、メタデータを使用してプロパティーを保護し、検証する方法、およびさまざまなメタデータ設定をテストする方法について説明します。
許可、検証、およびその他の重要トピックなど、Web サービス・インターフェースの一部として厳密に型定義のされたプロパティーの宣言を取り巻く問題に、どのように対処しますか。一世を風靡した WS-ResourceFramework の作成者が提供する新しい仕様 WS-ResourceMetadata (WSRM) は、小規模な XML ファイルしか持たないリソース・プロパティーとメタデータとの関連付けを支援します。Apache Muse プロジェクトが実装する WSRM と WSRFの 双方を使い、メタデータを使用してプロパティーを保護し、検証する方法、およびメタデータ設定をテストする方法を説明します。
このチュートリアルを受講する方は、Apache Muse を使用した Web サービス・エンドポイントの作成に精通していることが望まれます。また、WS-ResourceProperties (WSRP) の基礎を理解している必要があります。さらに、WSRP 文書の作成、および Muse フレームワークを使用してそれらの文書を操作した経験があることが必要です。事前に WSRP および Muse の背景について詳細をお知りになりたい場合は、「参考文献」セクションにある記事およびチュートリアルを参照してください。
WSRP 文書の作成
メタデータを WSRP 文書に適用する方法を実証するには、まず WSRP 文書が必要です。リスト 1 の XML フラグメントは、4 つのリソース・プロパティー、すなわち WSDM ID 機能 (muws1:ResourceId) の 1 つ、および WSDM 記述機能 (muws2:Caption、 muws2:Description、および muws2:Version) の 3 つを持つ WSRP 文書を示しています。これらのプロパティーは、さまざまな意味構造を持っており、メタデータの使用のための最適なテスト・ベッドです。フラグメントの最終要素 <wsdl:portType/> は、WSRP 文書がどのように Web サービスのインターフェースに関連付けられているかを示す覚書であり、メタデータを作成した後、WSRP 文書にリンクさせる場合に重要になります。
リスト 1. WSRP 文書の4 つのリソース・プロパティー
<wsdl:types>
...
<xsd:schema targetNamespace="http://example.com/test/metadata">
<xsd:element name="MyResourceProperties">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="muws1:ResourceId"/>
<xsd:element ref="muws2:Caption" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="muws2:Description" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="muws2:Version"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
...
<wsdl:portType name="MyPortType"
wsrf-rp:ResourceProperties="tns:MyResourceProperties">
...
</wsdl:portType>
|
WSDM 仕様によれば、muws1:ResourceId プロパティーは各リソース・インスタンスに固有であり、リソース存続期間を通して変更されることはありません。muws2:Caption および muws2:Description のプロパティーは、リソース存続期間中に変更される可能性があり、リモート・クライアントが WSRP のSetResourceProperties オペレーションを使用して変更することもできます。muws2:Version プロパティーも変更が可能ですが、構成が変更されている場合はリモート・クライアントによる変更はできず、リソース自体による変更のみ可能です。
上記にかかわらず、WSDL と WSRP 文書のいずれも、これらのプロパティーに制限があることを示していません。そればかりか、有効な WSRP メッセージを使用して一定のタスクを実行することができない理由の特定に取り組んでいるクライアントに対して、何の支援も提供していません。プロパティーの意味付けを行うだけでなく、それをユーザーの目に明らかな方法で行うメタデータによって、ディスクリプターを拡張する必要があります。
WS-ResourceMetadata 文書の作成
WS-ResourceFramework は、WSRP 文書に適用できるメタデータの種類、およびリソース・メタデータ文書 (RMD) 用フォーマットを記述する WS-ResourceMetadata という仕様を含んでいます。RMD のもっとも重要な 2 つの側面について説明します。
WSRP 文書への許可の追加
RMD 作成の第 1 ステップは、WS-ResourceMetadata スキーマの基本要件を満たす (すなわちゼロ以上の <Property/> 要素を囲む <MetadataDescriptor/> 要素がある) XML ファイルを作成することです。リスト 2 の XML フラグメントは、この記事で説明するシナリオのテストに使用できる RMD の開始点を含みます。
リスト 2. テスト対象となる RMD の開始点
<?xml version="1.0"?>
<Definitions xmlns="http://docs.oasis-open.org/wsrf/rmd-1"
xmlns:muws1="http://docs.oasis-open.org/wsdm/muws1-2.xsd"
xmlns:muws2="http://docs.oasis-open.org/wsdm/muws2-2.xsd"
xmlns:myns="http://example.com/test/metadata">
<MetadataDescriptor name="MyMetadata"
interface="myns:MyPortType"
wsdlLocation="http://example.com/test/metadata MyResource.wsdl">
<Property name="muws1:ResourceId"
modifiability="read-only"
mutability="constant"/>
<Property name="muws2:Caption"
modifiability="read-write"
mutability="mutable"/>
<Property name="muws2:Description"
modifiability="read-write"
mutability="mutable"/>
<Property name="muws2:Version"
modifiability="read-only"
mutability="mutable"/>
</MetadataDescriptor>
</Definitions>
|
この RMD から以下のことが分かります。
- WSRP 文書に定義された各リソース・プロパティーには、それぞれ 1 つの
<Property/> 要素があります。
- 各プロパティー定義には、2 つの属性 (更新性と変異性) があります。更新性は、リモート・クライアントがプロパティー値 (読み取り専用または読み取り書き込み) を変更できるかを示し、変異性は、リソース自体がプロパティー値 (固定または変更可能) を変更できるかを示します。
muws2:Version に示されているように、プロパティーは変更可能であると同時に読み取り専用にもなる場合があります。これは、変更者が誰であるのかに関わっています。
-
<MetadataDescriptor/> 要素は、RMD 仕様に必要な多数の属性を含んでおり、その属性により、WSRP 文書が定義される WSDL にリンクされます。この記事の後半で、WSDL から RMD に同様のリンクを作成します。
WSRP 文書への検証の追加
RMD のもう 1 つの優れた機能は、有効な値を定義して、クライアントがプロパティーの性質を推測し (列挙型の場合)、プロパティー値の小さなエラー (1.40 と 1.4.0 など) に関連するエラーを防げる点です。有効値は、<ValidValueRange/> 要素または <ValidValues/> 要素のいずれかを使用して指定できます。<ValidValueRange/> 要素では、整数、辞書編集文字列などの単純なタイプを使用して、値の範囲を設定できます。<ValidValues/> 要素では、プロパティーのすべての有効値を明示的に提示できます。
RMD 検証の使用法を示すため、有効値をmuws2:Version プロパティーに追加して、どのバージョンのリソースが使用可能か、どのような動作がサポートされているのか、クライアントが分かるようにします。リスト 3 では、lowerBound および upperBound 属性を使用し、<ValidValueRange/> で 1.4 から 1.5 の間にバージョン番号を制限します。属性を使用して値を記述するため、値の範囲を記述するのに単純なタイプしか使用できませんので、ご了承ください。
リスト 3. バージョン番号の制限
<Property name="muws2:Version"
modifiability="read-only"
mutability="mutable">
<ValidValueRange lowerBound="1.4" upperBound="1.5"/>
</Property>
|
値の範囲は便利なものですが、この例では完全に正確というわけではありません。1.4 から 1.5 という範囲を設けたことで、より詳細なバージョン番号 (1.4.2 などは、有効な浮動小数点番号ではない) を指定できず、また存在はしないが数値上は範囲内にあるバージョン (1.4.9 など) を除外できないからです。リスト4 では、<ValidValues/> を使用して、リソースの WSRP 文書に記載される可能性のある正確なバージョン番号を定義します。
リスト 4. 正確なバージョン番号の定義
<Property name="muws2:Version"
modifiability="read-only"
mutability="mutable">
<ValidValues>
<muws2:Version>1.4.0</muws2:Version>
<muws2:Version>1.4.1</muws2:Version>
<muws2:Version>1.4.2</muws2:Version>
<muws2:Version>1.5.0</muws2:Version>
<muws2:Version>1.5.1</muws2:Version>
</ValidValues>
</Property>
|
<ValidValues/> を使用して有効値を明示的に指定するとき、リソース・プロパティーのスキーマに準拠したインスタンスを組み込む必要があります。これは、値をカプセル化するためには、プロパティーの名前を持つ XML 要素が最低限必要であるということです。これは、リスト 4 で確認できます。各バージョン番号は、<muws2:Version/> 要素の一部になっています。
Muse ベースのアプリケーションへの RMD の追加
RMD ファイルを入手したら、Muse が認識できるよう、RMD ファイルを Web サービスのインターフェースに関連付ける必要があります。WSRP 文書を RMD にリンクするには、まず RMD を WSDL と同じディレクトリーに保存します。Muse WSDL2Java ツールによって生成されたプロジェクトについては、/WEB-INF/classes/wsdl 内のプロジェクト・ディレクトリーに保存されます。例として、RMD ファイルを MyMetadata.rmd とします。ここで、次のような属性 (太字表示) を追加して、WSDL を編集する必要があります。
リスト 5. WSDL の編集
<?xml version="1.0">
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:rmd="http://docs.oasis-open.org/wsrf/rmd-1"
... >
...
<wsdl:portType name="MyPortType"
wsrf-rp:ResourceProperties="tns:MyResourceproperties"
rmd:DescriptorLocation="MyMetadata.rmd"
rmd:Descriptor="MyMetadata" >
...
</wsdl:portType>
...
</wsdl:definitions>
|
第 1 の属性は RMD ファイルの名前を指定し、第 2 の属性はリソースのメタデータを含む <MetadataDescriptor/> の名前を指定します。Muse ベースのアプリケーションが起動し、リソースが作成されると、Muse のWSRP インプリメンテーションはこれらの属性を使用して RMD ファイルを検索および解析し、構成要素を取り込みます。クライアントが RMD で概要が定められている許可に反する WSRP オペレーションを実施しようとすると、Muse はそれを予防し、エラー・メッセージを記録して、エラーのタイプ (許可または検証) と有効な操作または値を詳細に記述します。
まとめ
1 つの単純な文書を使用して、不適切な場所からの変更 (muws2:Version での WSRP Update など) や不適切な意味付け(muws1:ResourceId への変更など) のブロックを行うようApache Muse を構成することができます。また Muse ランタイムは、無効値を監視し、リソースの WSRP 文書に従わない変更を防止します。これらすべては自動的に実行されるため、Java™ コーディングの必要がありません。これにより、新しいメタデータ構成を試すことが、XML ファイルの変更や Muse ベースのアプリケーションの再起動と同じくらい簡単にできるのです。
参考文献 学ぶために
製品や技術を入手するために
議論するために
著者について  | 
|  | Dan Jemiolo は、ノースカロライナ州リサーチ・トライアングル・パークにある IBM Autonomic Computing チームの Advisory Software Engineer です。彼は Apache Muse 2.0 の設計および開発を指揮し、現在も引き続きこのプロジェクトに取り組んでいます。また、Dan は WS-RF TC に WS-ResourceMetadata 仕様のエディターとして参加しており、Web サービス標準の採用を促進する IBM の戦略に携わっています。彼はわずか 2 年前に、Rensselaer Polytechnic Institute で Computer Science を専攻し理学修士の学位を取得した後、IBM に入社しました。 |
記事の評価
|