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