入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会 2006年3月7日 松江工業高等専門学校 情報工学科 越田高志
1.はじめに Webサービスとは Webサービスの基本技術 Webサービス実用化の問題点 データアクセスプロトコルとしてSOAPを用い,XML形式でデータ交換を行う分散処理プログラムのこと. Webサービスの基本技術 SOAP,UDDI,WSDLである. Webサービス実用化の問題点 1.必要とする適切なWebサービスを検出・連携し,目的と する処理を実行する適切な手段が存在しないこと, 2.ユーザ側でWebサービスの実行を制御するスタブを開発しなければならないこと,及び, 3.入力データ型が複合型であるWebサービスを利用できないこと.
その問題点の解決 プリミティブWebサービスの提案[1,2] 本論文で解決手法を提案する.
2.Webサービスの問題点 Webサービスの入出力データ型について WSのデータ型は大きく2種類ある. 基本型と複合型(基本型を複数個組み合わせたもの) 出力データ型に依存しない,自動化・統合化されたWS動的実行システムは開発済み. 出力データも自動処理可能となった. 現在WSの入力データ型は,全て基本型である. (何故なら,複合型にすると,実行時にユーザ側で複合型に対応したJavaBeansクラスを用意しなければならない. ⇒ユーザへの負荷が大きい
入力データ型が複数の基本型パラメータをまとめた複合型であれば, 1つのオブジェクトとして操作できるので,コードが シンプルになり,開発と処理操作が容易になる利点があり, 入出力データ型の一元化も可能になる. public class GoodsService6{ // (A) 基本型入力データ public SData6 getStocks(String btype, Stirng id, String gcode, int quantity, int price) throws Exception{ public class GoodsService6{ // (B) 複合型入力データ public SData6 getStocks(GData6 details) throws Exception{
Webサービス実行の流れ UDDIレジストリ Webサービス提供者 ユーザ クライアント・プログラムの作成と③,④を自動化した. WSDLファイル Webサービスに関する情報 ・Webサービス,WSDLのアドレス Webサービスの登録 ②情報 ①検索 ④結果 ユーザ ③実行 クライアント・プログラムの作成 クライアント・プログラムの作成と③,④を自動化した.
3.入出力データ型に依存しないWebサービス動的実行システム
3.1 プリミティブWebサービス(PWS) Webサービスに関して,その名称,機能説明,入出力IFに関する規約などはなく,全て提供者に委ねられている. 従って, ユーザは利用するWS個々に機能,入出力データの確認と理解が必要である. 標準化することによって,理解と確認を容易にする.
定義 様々なビジネス分野で,共通に利用可能な一意に統一された名称,機能,入出力IFをもつ標準化されたWebサービスとして定義する. WSに対する曖昧さ,不確定性が無くなる. 一度,それについて理解すれば良い. 任意のビジネスプロセスに対しても,ユーザ主体で PWSの組合せとして処理できる.
入力データ部分 出力データ部分 <wsdl:types> <schema > <complexType name="Dat1"> <sequence> <element name="name" nillable="true" type="xsd:string"/> <element name="tel" nillable="true" type="xsd:string"/> </sequence> </complexType> <element name="Dat1" nillable="true" type="tns1:Dat1"/> <complexType name="CDat1"> <sequence> <element name="address" nillable="true" type="xsd:string"/> <element name="credit" nillable="true" type="xsd:string"/> <element name="head" nillable="true" type="xsd:string"/> </sequence> </complexType> <element name="CDat1" nillable="true" type="tns1:CDat1"/> </schema> </wsdl:types> 出力データ部分
複合型WSのWSDL記述の一部 <wsdl:types> <schema targetNamespace="http://10.70.51.20:8080/axis/services" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> <complexType name="GData6"> <sequence> <element name="beertype" nillable="true" type="xsd:string" /> <element name="quantity" type="xsd:int" /> </sequence> </complexType> <element name="GData6" nillable="true" type="tns1:GData6" /> <complexType name="SData6"> <sequence> <element name="beercode" nillable="true" type="xsd:string" /> <element name="beername" nillable="true" type="xsd:string" /> <element name="casevalue" type="xsd:int" /> <element name="totalcost" type="xsd:int" /> <element name="unitvalue" type="xsd:int" /> <element name="SData6" nillable="true" type="tns1:SData6" /> </schema> </wsdl:types> <wsdl:message name="getStocksRequest"> <wsdl:part name="in0" type="tns1:GData6" /> </wsdl:message> <wsdl:message name="getStocksResponse"> <wsdl:part name="getStocksReturn" type="tns1:SData6" /> </wsdl:message>
基本型と複合型の比較 基本型 複合型 そのままデータをWSに送付・実行できる. 実行時に,入力順番を常に確認する必要がある. 全ての入力データ名を指定するので,プログラミングが煩雑になる. 複合型 その複合型データに対応したJavaBeansクラスを用意する必要がある. 実行時に,全ての入力データをJavaBeansクラスのオブジェクトとしてまとめて扱える(入力順番を気にする必要はない.)
基本型の場合 複合型の場合 public class GoodsService6{ public SData6 getStocks(String beertype, int quantity) throws Exception{ public SData6 getStocks(GData6 details) throws Exception{ 複合型の場合 GData6クラスを共通に定義すれば良い.
複合型の利点 WSの連携がシンプルになる. 入力データのカプセル化 あるWSの出力を次のWSの入力とする場合など,同じJavaBeansクラスのオブジェクトを利用できる. 入力データのカプセル化 ユーザは入力データの意味さえ分かればよい.その変数名や入力順番などを気にしなくてよい.プログラミングが簡略化される. WSメソッドのシグニチャ(メソッド名と引数)は同じ,でも引数の内容が異なるWSも可能.
3,2 システムの機能
Webサービスの検出 Webサービスの結合 ユーザが必要とする最適なWebサービスを如何に効率良く,検出するか. その機能,出力タイプ,入力パラメータの数とそのタイプをユーザに伝えること. Webサービスの結合 複数のWebサービスをどう結びつけるか? セマンテックWeb.
3.3 実験結果
4.おわりに 本システムを利用することにより, 複合型入力データをもつWebサービスに対しても,動的実行が可能になる.これにより,Webサービス提供側でも複合型入力データをもつWebサービスが提供可能となり,提供側のWebサービス開発工数と処理効率の向上が期待できる.Webサービスメソッドの入力IFの統一が容易になる. 従って,基本的なビジネスプロセスに対応した,一意に定義されたWebサービス名,メソッド名,入力IFをもつWebサービス標準化が実現でき,またWebサービスの動的連携も容易になると考えられる.