UDDIの実装
■現在利用可能なUDDIレジストリは?
UDDIは、このような規約を作っただけでなく、IBM、Microsoft、Aribaの3社がそれぞれ実装を作ってインターネットに公開している。これは、初期公開βテスト(initial public beta testing)と呼ばれるもので、レジストリを実際にインターネットに公開して、テストを行っているという状況である(筆者注:最近、Ariba がUDDI運営計画を破棄し、ヒューレット・パッカード社が 引き継ぐというニュースが流れた)。
3社のレジストリは、それぞれがレプリケーションをとっており、同一の内容が登録されている。UDDIのページへ行き、右上の方にある
のリンクをクリックすると、3社のリストが出るので、選択して「Go」のボタンを押せば、それぞれのサイトに行くことができる。
これら3つのサイトは、UDDIの(運営者という意味で)オペレータと呼ばれている。
ビジネス(企業)の登録は、現在のところ無料で行える。将来は、認証などとともに有料にすることも必要であろう、ということもいわれている(ネット上のニュースによれば、今年の中ごろに正式なレジストリを立ち上げる予定であるということである)。
このサイトから、UDDI Findのリンクに進めば、現在UDDIビジネスレジストリに登録されているサービスを検索することができる。例えば、「Business Name」に「IBM」と入力して「Find」ボタンを押してみよう。IBMが登録した幾つかのビジネスが表示される。「IBM Corporation」を選択して「View Services」を押すと、8つのサービスが登録されていることが分かる。
面白いのは、UDDI PublishやUDDI Inquiryもここに登録されていることだ。UDDIの発行や検索のインターフェイスは当然のことながら、HTTPであり、SOAPをベースにしたXML形式のやりとりでアクセスできる機能であるから、これもWebサービスの一種と考えることができる。
UDDI Inquiryサービスは、この検索サービス自体(Web)と、XMLでのアクセス(servlet)の2種類が登録されていることになる。
ここで、誤解しないでいただきたいのは、UDDIとは、正しくはこのように「人間がブラウザでアクセスして検索する」ためのものではない、ということだ。UDDIレジストリは、ソフトウェアなどが、機械的にアクセスするための道具として位置付けられている(とはいっても、人間が見て接続先を探すということも、もちろんあるだろう)。
■UDDI for Java
UDDIのトップページを見ると、IBMがUDDIアクセスの実装をオープンソースにしたというニュースが出ている(IBM open sources technology for accessing UDDI Business Registry)。それがUDDI for Java(以下UDDI4J)である。UDDI4Jは、Javaプログラムが簡単にUDDIビジネスレジストリにアクセスできるようにするためのAPIクラスライブラリであり、UDDIプログラマーAPIのJavaへのマッピングである。
UDDI4Jは、UDDI4J Projectのページからダウンロードできる。
■UDDI4Jの利用
UDDI4Jを稼働させるには、前提として次のものが必要である。
- Apache SOAP 2.1以上
- Java activation framework
- Java Mail
- Java Secure Sockets Extension(JSSE:HTTPSを使うとき)
- Xerces
- TomcatなどのHTTPおよびWebサーバ
- Java2 1.2.2 以上
導入方法は、ダウンロードしたアーカイブの中のReleaseNotes.htmlからdocs/index.htmlを開くとそこに記述されているが、要は、すべての必要なjarファイルをクラスパスに含めるということだ。
UDDIにアクセスするコードは、以下のようなものになる。
// Construct a UDDIProxy object. Enables SSL support UDDIProxy proxy = new UDDIProxy(); try { // Select the desired UDDI server node proxy.setInquiryURL( "http://localhost/services/uddi/testregistry/inquiryapi"); } catch (Exception e) { e.printStackTrace(); } try { // Find businesses who's name starts with IBM BusinessList bl = proxy.find_business("IBM", null, 0); Vector businessInfoVector = bl.getBusinessInfos().getBusinessInfoVector(); for (int i = 0; i < businessInfoVector.size(); i++) { BusinessInfo businessInfo = (BusinessInfo)businessInfoVector.elementAt(i); // Print name for each business System.out.println(businessInfo.getNameString()); } // Handle possible errors } catch (UDDIException e) { DispositionReport dr = e.getDispositionReport(); if (dr!=null) { System.out.println("UDDIException faultCode:" + e.getFaultCode() + "\n operator:" + dr.getOperator() + "\n generic:" + dr.getGeneric() + "\n errno:" + dr.getErrno() + "\n errCode:" + dr.getErrCode() + "\n errInfoText:" + dr.getErrInfoText()); } e.printStackTrace(); // Catch any other exception that may occur } catch (Exception e) { e.printStackTrace(); }
このプログラムをインターネットにアクセスした状態で実行すると、リスト2のようなHTTPリクエストが飛ぶ(見やすいように多少改行を修正してある)。
POST /services/uddi/testregistry/inquiryapi HTTP/1.0 Host: localhost:80 Content-Type: text/xml; charset=utf-8 Content-Length: 360 SOAPAction: "" <?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <find_business generic="1.0" xmlns="urn:uddi-org:api"> <name>IBM</name> </find_business> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
これは、Apache-SOAPに付属してくる、トンネル/モニタによって見ることができる。レスポンスは、非常に長いので割愛させていただく。
UDDIを使うことによって、さまざまな規約でルール付けられているサービスが統合しやすくなることが、お分かりいただけただろうか。
SOAP/UDDIとくれば、次はWSDLである。次回は、WSDLの概要と、UDDIとの連携について紹介することとする。
Copyright © ITmedia, Inc. All Rights Reserved.