アットマーク・アイティ @IT@IT自分戦略研究所QA@ITイベントカレンダー+ログ
 @IT > Webサービスを実現するhp netaction > 第2回 Simple Webサービス実現のプラットフォーム
 
@IT[FYI]

 


Webサービスを先取りするHPからの提案
連載 Webサービスを実現するhp netaction(2)

2002/1/22

第2回 Simple Webサービス実現のプラットフォーム

 Web Services Platform(以下WSP)とはWebサービスを実現するためのコアとなるプラットフォームであり、第1回で解説したHP Web Services Transactionの前提となるソフトウェアだ。

 また、WSPはJ2EEプラットフォーム上で稼動するアプリケーションだ。したがって、WSPの動作には、J2EE対応のアプリケーション・サーバが必要になる。

 HPでは、J2EEアプリケーション・サーバとして、HP Application Server 8.0(以下HP-AS)を用意しているが、WSPはJ2EE標準であれば、どのアプリケーション・サーバにも対応する。

WSPのアーキテクチャ

 WSPはXMLベースのメッセージのやりとりを効率良く行えるように設計されている。アーキテクチャとしては、ヘッダー部分の処理とボディ部分の処理を行うコンポーネント群から構成されている。また、SOAPメッセージ処理は「Apache Cocoon2」フレームワークを採用している。Webサービスでのメッセージ処理は、すでに標準として規定されている以下のコンポーネント、およびプロトコルを使用する。

(1)SOAP
(2)UDDI
(3)WSDL

(1)SOAP(Simple Object Accessing Protocol)
 XMLメッセージをやりとりするための軽量なプロトコルであり、Webサービスの基本的なプロトコルの1つである。SOAPメッセージは一般的にRPC型のメッセージとDOC交換型のメッセージの2つに分類される。

(2)UDDI(Universal Description, Discovery and Integration)
 Webサービスのためのレジストリデータベースである。UDDI4JのAPIを使用してアクセスすることができる。

(3)WSDL(Web Services Description Language)
 Webサービスの実体を定義するための言語。WSPではサービスの実体としてJavaクラスファイル、EJBを前提にしている。これらのファイルからWSDLを生成するためのツールが提供される。


メッセージフレームワーク

 WSPの現バージョンではHTTPプロトコルのみをサポートしているが、今後はSMTPなどのHTTP以外のプロトコルもサポートする予定だ。SOAPの実装としては、これから主流になると思われるJAXMを実装している。

HP SOAP Server

 WSPのコアとなるHP SOAP Serverは、以下の4種類のアダプタを持っている。

(1)RPC Javaアダプタ
(2)RPC EJBアダプタ
(3)ドキュメント交換アダプタ
(4)ヘッダ処理アダプタ

 また、上記のアダプタに加えてユーザー独自のアダプタを開発することも可能である。HP SOAP Serverの基本的な構成は下図のようになっている。


HP SOAP Serverの構成

 HP SOAP Serverは、基本的に2つのパイプラインステージを持っている。1つは「ヘッダ処理」であり、もう1つは「SOAPペイロード処理」である。共にJAXMのAPIでアクセスできるので、必要に応じて機能を柔軟に追加できるが。HP SOAP Server自体はJ2EEのWARファイルフォーマットでデプロイが可能であり、カスタマイズした後に任意のデプロイツールを使用して再配置することが容易にできる。

●ヘッダ処理
 Simple Webサービスを拡張してトランザクション機能を追加する場合、またはセキュリティを考慮し認証機能を追加するという場合にヘッダ処理の拡張が必要となる。この場合は、JAXMのAPIを使った拡張が可能だ。

 HP SOAP Serverではヘッダ処理をheader-adapter.xconfというコンフィグファイルに設定するようになっており、以下の4つのパーツごとに設定ができる。

(1) Global SOAP Actor 全てのWebサービスに共通する設定
(2) Header Group ヘッダーグループに関する設定
(3) Header Blocks ヘッダーグループの子エレメントに関する設定
(4) Service Specific Config 特定のサービスに対応する設定

●SOAPペイロード処理
 SOAPのヘッダ処理の後にBODYの部分、つまりペイロード処理を行うわけだが、HP SOAP ServerではRPC型およびDOC交換型のリクエストを処理できる。処理をするためのアダプタとしてEJB、JavaClass、DocExchange型の3種類を標準で持っている。

WSPのコンフィグとサービスの配置

 ここでは、実際にWSPを使用してどのようにサービスを配備するのか、またWSPの基本的な設定方法について解説する。

 サービスの配備手順は以下の通りである。

(1)公開するサービスに対するユニークな名前を決定する
(2)サービスディスクリプションファイル(<WebServiceName>.wsdl)を作成する
(3)サービスコンフィグファイル(<WebServiceName>.xml)を作成する
(4)上記ファイルおよびサービス本体(EJB またはJava Class)を配備する

 WSPではWebサービスコンフィグファイル(XMLファイル)とサービスディスクリプションファイル(WSDLファイル)はWSPが提供するツールによって簡単に作成することができる。

 これらのファイルは、以下のディレクトリ下に置くことが決まっている。

<WSPルートディレクトリ>/WebApps/hpws/webservices/<WebServiceName>

 また、HP SOAP Server自体はサーブレットで実装されているので、hpws/WEB-INF/web.xmlファイルにてサーブレットとしての基本的な振る舞いを設定することができる。

標準的なweb.xmlファイル
<web-app>
   <servlet>
   <servlet-name>JAXMRPCInbox</servlet-name>
   <servlet-class>com.hp.soap.JAXMRPCInbox</servlet-class>
   <init-param>
      <param-name>web-service-descriptor-path</param-name>
      <param-value>/webservices</param-value>
   </init-param>
   </servlet>
   <servlet-mapping>
   <servlet-name>JAXMRPCInbox</servlet-name>
   <url-pattern>/soap/*</url-pattern>
   </servlet-mapping>
</web-app>

●呼び出し例

http://hostname/hpws/soap/MathService

 上記のURLを指定することで指定したhostnameのSOAPサーブレットを呼び出し、MathServiceという名前で公開されているWebサービスを呼び出すことができる。

(1)サービスコンフィグファイル(<WebServiceName>.xml)

 以下の例に示すとおり、サービスコンフィグファイルにて使用するアダプタ(rpc-java、 ejb-java、 doc-handler)の指定およびルックアップに使用する名前を指定する。

<WebServiceName>.xml
<?xml version="1.0"?>
<service-descriptor version="1.0">
<webservice adapter="rpc-java"  wsdl-validation="false">
<param name = "lookup-name" value = "com.hp.mw.soap.samples.rpc.MathService"/>
</webservice>
</service-descriptor>

(2)サービスディスクリプションファイル(<WebServiceName>.wsdl)

 以下の例はアダプタタイプがrpc-javaの例である。簡単な計算をするサンプルのサービスの例でwsdlファイル自体は70行程度の大きさである。しかし、WSPの提供するツール(ClassToWebService.bat)を使用することで上記の2つのファイルを自動的に生成することができる。もちろん、その他のアダプタタイプ(EJB、DOC交換)にも対応したツールが用意されている。

<WebServiceName>.wsdl
<?xml version="1.0" encoding="UTF-8" ?>
<definitions name="MathService"
 targetNamespace="http://tempuri.org/"
 xmlns="http://schemas.xmlsoap.org/wsdl/"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:s0="http://tempuri.org/"
 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<types>
<xsd:schema attributeFormDefault="qualified"
 elementFormDefault="qualified"
 targetNamespace="http://tempuri.org/"/>
</types>
<message name="addInput1">
<part name="arg1" type="xsd:string"/>
<part name="arg2" type="xsd:string"/>
</message>
<message name="addOutput1">
<part name="return" type="xsd:int"/>
</message>
<message name="addInput2">
<part name="arg1" type="xsd:int"/>
<part name="arg2" type="xsd:int"/>
<part name="arg3" type="xsd:int"/>
</message>

メッセージフレームワーク Cocoon2

 ここまでで、WSPの基本的なところは説明した。内容的にはサービスを公開する側の機能を中心に説明をした。

 一方、サービスを利用する側の機能としてXMLメッセージを効率的に処理するという目的でCocoon2というフレームワークを使用することができる。Java、JSP、Servletを駆使することでサービスを利用する側のプログラムを開発することは可能ではあるがよりCocoon2を使うことでより効率的に開発・メンテナンスができる。

 簡単にCocoon2について説明をしておく。Cocoon2はApache XMLプロジェクトが提供しているソフトウェアである。Java/XMLを取り巻く環境において多数のフレームワークが存在するがCocoon2はその中でも特にXMLの処理に特化したフレームワークである。

 XMLファイルにXSLTファイルでフォーマット情報を与えることで様々なフォーマットに変換することができる。Webサービスのツールとして使う場合にはHTMLに変換することになる。ここまでの機能では単なるパブリッシングツールであるが、さらにXSPというファイルを加えることでロジックを追加することができる。

 これにより、コンテンツ(XML)、スタイル(XSLT)、ロジック(XSP)を効率良く管理することができる。また、Cocoon2の持つキャッシング機能によってパフォーマンス面でも効果がある。Cocoon2の詳細については(http://xml.apache.org/Cocoon)を参照して欲しい。

 Webサービスでの処理は基本的にXMLをベースとしたメッセージ交換で行われる。例えば、ドキュメント交換型のサービスを利用する場合にはXMLドキュメントの形式で受け取ったリクエストをパースして、処理に必要な引数をWebサービスの実体としてのJavaプログラムに渡す。結果を再びXMLドキュメント形式に変換し、リクエスト発行元に返す。プロトコルとしてのSOAPは非常にシンプルであり、引数としてはプリミティブ型とプリミティブ型の1次元配列のみしか許していない。

 WebサービスをRPC型で実装しようとすると、1伝票に複数の明細があるような構造を持ったデータの表現ができないことになる。つまり、RPC型では単純なショッピングサイトすら実現できない。このような場合にはXMLの柔軟性を生かすべくDoc交換型の処理を利用することで解決することができる。

 構造を持ったデータの交換(B-to-Bの場合のほとんどがそうであると思われる)をするためにはDoc交換型を利用することになる。

 このようなXMLをベースにしたシステムを構築する場合に、Cocoonというフレームワークを利用することで、以下の要求に対応することができる。

ブラウザではXMLファイルを表示できない XSLTによりXMLからHTMLへの変換処理を効率的に行える
ロジックも記述したい XSPファイルにより簡単なjavaプログラムを記述することができる
コンテンツ(XML)と表示形式を分離して管理したい 分離可能

主要ツールの紹介

 ここでは、HP-SOAPを使用してサービスを作成およびディプロイするのに必要となるコマンドラインベースのツールについて紹介する。代表的なツールとしては以下の5種類のツールが用意されている。

  • ClassToWebService
  • EJBToWebService
  • HandlerToWebService
  • WSDLToClientProxy
  • ClassToWSDL

・ClassToWebService

 既存のJava ClassファイルをWebServiceとして公開するためのディプロイメントディスクリプタを生成するツール。

 Java ClassファイルおよびWebServiceを公開するURL、Service名を指定し実行する。生成されたxmlファイルを規定のディレクトリに配置する。

・EJBToWebService

 既存のEJB(stateless Session Beans)をWebServiceとして公開するためのディプロイメントディスクリプタを生成するツール。

・HandlerToWebService

 ドキュメントハンドラーをWebServiceとして公開するためのディプロイメントディスクリプタを生成するツール。

・WSDLToClientProxy

 WSDL(WebServiceの定義ファイル)を読み込み、proxyクライアントのJavaソースファイルを生成する。

・ClassToWSDL

 Java ClassファイルからWSDLを生成するツール。出力としてWSDLファイルが生成される。

最後に

 WSPの紹介ということで、限られたスペースの中で機能的な部分を中心に紹介した。現時点ではWSPは大きく2つのバージョンが存在する。

1.hp web services platform developer edition
2.hp soap server for hp-as (early access release)

 今回の解説では基本的にhp soap server for hp-asをベースに行った。UDDIに関する機能の面でhp web services platform developer editionに比べると機能不足の面があるが、より汎用的な製品という位置付けになっている。今後この製品をベースに機能拡張を行う予定である。ここからダウンロードできるので、是非、実際に評価していただきたい。


●WSPの動作環境
OS Windows 2000、RedHat Linux 7.1、HP-UX11.00
JDK JDK1.3
対応DB HSQL1.6、Oracle8.1.6






●WSPを構成するソフトウェアコンポーネントおよびAPI仕様
HP-SOAP:SOAP1.1
UDDI v2
Cocoon2
XML Digital Signature
WSDL1.1










 
連載 Webサービスを実現するhp netaction
  第1回 [総論]
Webサービスの課題とその解決を探る

「Webサービスのためのミドルウェアhp netaction」
(2001/12/19)
第2回 [プロダクトレビュー]
Simple Webサービス実現のプラットフォーム

「HP Web Services Platform」
(2002/1/22)
  第3回 [プロダクトレビュー]
Webサービスのビジネスロジックを容易に構築

「HP Process Manager interactive」
(2002/2/16)
  第4回 [プロダクトレビュー]
BTPによるトランザクションの実現

「HP Web Services Transaction」
(2002/3/23)

 

 



HPがアプリケーション・サーバを無償提供、その狙いは?

HP、アプリサーバ市場で勝負へ


.NETとJavaに対応が特徴、HPのECプラットフォーム

[hp world 2001開催]端末、インフラ、e-servicesで巻き返しを図るHP

e-servicesでサービス中心のコンピューティングを実現、HP

HPが初のappサーバを発表、Webサービス市場へ本格進出

Javaの先を見据えるWebアプリサーバベンダー


製品情報INDEX

HP-ASダウンロード

問合せ先


</comment> <tr> <td bgcolor="#EEEEEE"><font size="2"><a href="javascript:KeepIt();"> <img src="/club/keepoint/images/ico_kpt.gif" alt="kee&lt;p&gt;oint保存" border="0" align="absmiddle" width="24" height="18">kee&lt;p&gt;ointで保存</a></font></td> </tr> <comment>

 
@ITトップ@IT Special インデックス会議室利用規約プライバシーポリシーサイトマップ