本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

Service Registry Proxy

高水準API

Alfredo da Silva, Advisory Software Engineer, IBM
Alfredo da SilvaはIBMのソフトウェア開発者です。彼は、IBM Web Services Toolkit (WSTK) を担当するグループのメンバーです。Alfredoの連絡先は、afdasilv@us.ibm.com です。

概要: この記事では、Webサービス開発者のために追加ツールを提供することを目的として、アプリケーション開発中に抽象レベルを上げるのに役立ち、UDDIエレメントとWSDLエレメントとのシームレスな統合を促進する、新規API (Service Registry Proxy (SRP)) について説明します。

日付:  2001年 11月
レベル:  初級 この記事の原文:  英語
アクティビティー: 663 ビュー
お気軽にご意見・ご感想をお寄せください: 


UDDI4J API (UDDI4J APIの参考文献、およびこの記事で参照されているその他の参考文献へのリンクについては、参考文献を参照) がリリースされたことにより、UDDI対応アプリケーションの作成が可能になり、オープン・ソースのAPIからpublishunpublish、およびfind 操作を行なえるようになりました。

WSDL文書 (リンクについては、参考文献を参照) をこの環境の一部として使用できるようにするために、Service Registry Proxy (SRP) APIという、UDDI4Jの最上部に置かれる新規レイヤーが考案されました。

SRP APIエレメントは、UDDI4J API内にあるクラスと、WSDL4J APIによって定義されたいくつかのクラスをカプセル化し、UDDIレジストリーとインターフェースするための包括的なメソッドのセットを提供します。このモデルにより、抽象化のレベルが高まり、開発者はWebサービス・アーキテクチャー・ドメインに直接関係するエンティティーの作業に専念できるようになりますので、アプリケーションの開発が簡素化されます。

SRPをサポートするクラス

SRP APIは、図1に示すように、Service Provider (SP)、Service Definition (SD)、Service Implementation (SIMP)、およびService Interface (SITF) を主要なエレメントとして構成されています。


図1: SRP APIの主要エレメント
図1: SRP APIの主要エレメント
  • SP: Service Providerは、サービスを提供することのできるエンティティーを表します。これは、UDDI4JクラスBusinessEntity への参照をカプセル化します。
  • SD: Service Definitionは、サービスをインプリメンテーション (SIMP) とインプリメントされたインターフェースのリスト (SITF) の、2つの部分に分割して記述します。
  • SIMP: Service Implementationには2つの役割があります。関連するWSDLインプリメンテーション文書 (参考文献を参照) を公開することと、UDDI4JクラスBusinessService への参照を提供することです。
  • SINT: Service Interfaceも2つのエンティティー、すなわちWSDLインターフェース文書 (参考文献を参照) と、UDDI4JクラスTModel への参照をカプセル化します。

SIMPおよびSINTによって提供されるWSDL機能は、それらの親クラスであるWSDLServiceInfo から継承されます。

このように編成されていることにより、SRPはUDDIエレメントとWSDLエレメントを結び付け、またそれと同時にそれらの概念を抽象化することができますので、Webサービスの作成効率が向上します。


SRPのデータ構造

内部的には、SRPは表1 に示す主要属性を備えています。これらの属性は、UDDI4J APIとのインターフェースを処理し、関連するUDDIレジストリー接続情報を維持するものです。


表1: SRPの属性
属性 説明
protected int maxRowsReturned = 100;戻される最大行数
protected int numRowsToSearch = 100;検索される最大行数
protected String inquiryURL;Find操作で使用されるURL
protected String publishURL;Publish操作で使用されるURL
protected String userId;UDDIレジストリーに接続するためのユーザーID
protected String cred;UDDIレジストリーに接続するためのパスワード
protected UDDIProxy uddiProxy;UDDI4Jプロキシー・オブジェクト

API機能

SRP APIは、表2 に示すように、Publish、Unpublish、およびFindの各機能グループからなります。SRP APIの完全なjavadocについては、参考文献のリンクを参照してください。


表2: SRPの機能グループ
API サブAPI メソッド呼び出し 説明
Publish     ServiceProviders、ServiceDefinition、およびServiceInterfaceオブジェクトを公開する
       
    publish (ServiceProvider) : ServiceProvider  
    publish (ServiceProvider, ServiceDefinition) : ServiceDefinition  
    publish (ServiceInterface) : ServiceInterface  
       
Unpublish     ServiceProviders、ServiceDefinition、およびServiceInterfaceオブジェクトを公開停止する
       
    unpublish (ServiceProvider) : void  
    unpublish (ServiceInterface) : void  
    unpublish (ServiceProvider, ServiceDefinition) : void  
       
Find      
  Service Provider   特定の検索基準に基づいてServiceProviderオブジェクトを検索する
       
    findAllServiceProviders (FindQualifiers, boolean) : ServiceProvider[]  
    findServiceProvider (ServiceDefinition) : ServiceProvider  
    findServiceProvider (String) : ServiceProvider  
    findServiceProviders (FindQualifiers, DiscoveryURLs) : ServiceProvider[]  
    findServiceProviders (FindQualifiers, TModelBag) : ServiceProvider[]  
    findServiceProviders (String, boolean) : ServiceProvider[]  
    findServiceProviders (CategoryList) : ServiceProvider[]  
    findServiceProviders (IdentifierList) : ServiceProvider[]  
       
  Service Definition   特定の検索基準に基づいてServiceDefinitionオブジェクトを検索する
       
    findAllServices (FindQualifiers, boolean) : ServiceDefinition[]  
    findService (String) : ServiceDefinition  
    findService (FindQualifiers, ServiceProvider, ServiceImplementation) : ServiceDefinition  
    findServices (FindQualifiers, TModelBag) : ServiceDefinition[]  
    findServices (String, boolean) : ServiceDefinition[]  
    findServices (FindQualifiers, ServiceInterface) : ServiceDefinition[]  
    findServices (ServiceInterface, String) : ServiceDefinition[]  
    findServices (ServiceInterface, CategoryList) : ServiceDefinition[]  
    findServices (ServiceProvider, String) : ServiceDefinition[]  
    findServices (FindQualifiers, ServiceProvider) : ServiceDefinition[]  
    findServices (FindQualifiers, ServiceProvider, CategoryList) : ServiceDefinition[]  
    findServices (FindQualifiers, CategoryList) : ServiceDefinition[]  
    findServices (ServiceList) : ServiceDefinition[]  
       
  Service Interface   特定の検索基準に基づいてServiceInterfaceオブジェクトを検索する
       
    findAllServiceInterfaces (FindQualifiers, boolean) : ServiceInterface[]  
    findServiceInterface (String) : ServiceInterface  
    findServiceInterfaces (String, boolean) : ServiceInterface[]  
    findServiceInterfaces (FindQualifiers, IdentifierList) : ServiceInterface[]  
    findServiceInterfaces (FindQualifiers, CategoryList) : ServiceInterface[]  
    findServiceInterfaces (ServiceImplementation) : ServiceInterface[]  
    findServiceInterfaces (ServiceImplementation, String) : ServiceInterface[]  
    findServiceInterfaces (ServiceImplementation, IdentifierList) : ServiceInterface[]  
    findServiceInterfaces (ServiceImplementation, CategoryList) : ServiceInterface[]  

使用方法

この記事に含まれるデモでは、Service Providerエレメントを公開し、検索し、最後に公開停止して、SRP APIの機能を示しています。ソース・コードは、リスト12、および3 に示してあります。このコードを自由に使用し、ユーザー自身のプロジェクトに合わせて調整してください。

ServiceProviderPublishDemo は、初期化フェーズで、公開および照会の対象となる特定のURL、およびターゲットUDDIレジストリーに事前登録されているユーザーIDとパスワードを使用して、SRPオブジェクトを作成します。CategoryList クラスは、インスタンス化されServiceProviderの作成をサポートします。このServiceProviderには名前と説明も必要になります。

ServiceProviderが正常に作成されると、SRP公開メソッドが起動し、このオブジェクトを唯一のパラメーターとして受け取ります。このコードは実行中に、起こりうるエラー条件が発生しているかどうかを検査し、適切なメッセージを発行します。


リスト1: Service Provider公開のデモ
                
import com.ibm.wstk.service.provider.*;
     import com.ibm.wstk.service.registry.*;
     import com.ibm.wstk.service.util.*;
     import com.ibm.wstk.uddi.*;

     public class ServiceProviderPublishDemo
     {
       public static String UDDI_TEST_REGISTRY_INQUIRY
     = "http://www-3.ibm.com/services/uddi/testregistry/inquiryapi";
       public static String UDDI_TEST_REGISTRY_PUBLISH
     = "https://www-3.ibm.com/services/uddi/testregistry/protect/publishapi";
       public static String UDDI_USER = "srpuser";
       public static String UDDI_PASSWD = "srppwd";
       public static String SERVICE_PROVIDER_NAME = "demo provider";
       public static String SERVICE_PROVIDER_DESC = "SRP provider demo";
       public static String TMODEL_KEY = "NAICS";
       public static String KEY_NAME = "Greeting Card Publishers";
       public static String KEY_VALUE = "511191";

       public static void main(String args[])
       {
         try
         {
           //////////////////// INITIALIZATION
     /////////////////////////////////
           // Create Service Registry Proxy
           ServiceRegistryProxy srp =
             new ServiceRegistryProxy(UDDI_TEST_REGISTRY_INQUIRY,
                                      UDDI_TEST_REGISTRY_PUBLISH,
                                      UDDI_USER, UDDI_PASSWD);
           // Create category list
           CategoryList categoryList =
             new CategoryList(TModelKeyTable.getTModelKey(TMODEL_KEY),
                              KEY_NAME, KEY_VALUE);
           // Create service provider
           ServiceProvider serviceProvider =
             new ServiceProvider(SERVICE_PROVIDER_NAME,
                                 SERVICE_PROVIDER_DESC,
                                 categoryList);
           //////////////////// PUBLISH
     ////////////////////////////////////////
           // Publish the service provider
           srp.publish(serviceProvider);
           // Display publish completed message
           System.out.println("Service provider " + "\"" +
                              SERVICE_PROVIDER_NAME + "\"" + " was published.");
         }
         catch (ServiceRegistryProxyException e)
         {
           System.out.println("ServiceRegistryProxyException: " + e.getMessage());
         }
         catch (InvalidCategoryException e)
         {
           System.out.println("InvalidCategoryException: " + e.getMessage());
         }
       }
     }

ServiceProviderを検索するデモは、前のデモで使用されたものと同じパラメーターを使用してSRPインスタンスを作成します。

そして、SRP検索メソッドの1つを使用して、前に公開されたServiceProviderが検出され、実行中に適切なメッセージが生成されます。


リスト2: Service Provider検索のデモ
                
     import com.ibm.wstk.service.provider.*;
     import com.ibm.wstk.service.registry.*;
     import com.ibm.wstk.service.util.*;
     import com.ibm.wstk.uddi.*;

     public class ServiceProviderFindDemo
     {
       public static String UDDI_TEST_REGISTRY_INQUIRY
     = "http://www-3.ibm.com/services/uddi/testregistry/inquiryapi";
       public static String UDDI_TEST_REGISTRY_PUBLISH
     = "https://www-3.ibm.com/services/uddi/testregistry/protect/publishapi";
       public static String UDDI_USER = "srpuser";
       public static String UDDI_PASSWD = "srppwd";
       public static String SERVICE_PROVIDER_NAME = "demo provider";

       public static void main(String args[])
       {
         try
         {
           //////////////////// INITIALIZATION
     /////////////////////////////////
           // Create Service Registry Proxy
           ServiceRegistryProxy srp =
             new ServiceRegistryProxy(UDDI_TEST_REGISTRY_INQUIRY,
                                      UDDI_TEST_REGISTRY_PUBLISH,
                                      UDDI_USER, UDDI_PASSWD);
           //////////////////// FIND
     ///////////////////////////////////////////
           // Find the published service provider
           ServiceProvider[] serviceProviderList =
             srp.findServiceProviders(SERVICE_PROVIDER_NAME, true);
           // Display find completed message
           if (serviceProviderList == null)
             System.out.println("Service provider " + "\"" +
     SERVICE_PROVIDER_NAME
                                + "\"" + " was not found.");
           else
           {
             System.out.println("Service Provider Name: " +
                                  serviceProviderList[0].getBusinessEntity
     ().getNameString());
             System.out.println(" Description: " +
                                serviceProviderList[0].getBusinessEntity
     ().getDefaultDescriptionString());
           }
         }
         catch (ServiceRegistryProxyException e)
         {
           System.out.println("ServiceRegistryProxyException: " + e.getMessage());
         }
       }
     }

最後に、公開停止を行います。初期化の方法は、前の場合と同じです。そして、該当のSRP公開停止メソッドによって、ターゲットのServiceProviderが検索され、公開停止になります。この場合も、エラーがモニターされ、報告されます。



リスト3: Service Provider公開停止のデモ
                
     import com.ibm.wstk.service.provider.*;
     import com.ibm.wstk.service.registry.*;
     import com.ibm.wstk.service.util.*;
     import com.ibm.wstk.uddi.*;

     public class ServiceProviderUnpublishDemo
     {
       public static String UDDI_TEST_REGISTRY_INQUIRY
     = "http://www-3.ibm.com/services/uddi/testregistry/inquiryapi";
       public static String UDDI_TEST_REGISTRY_PUBLISH
     = "https://www-3.ibm.com/services/uddi/testregistry/protect/publishapi";
       public static String UDDI_USER = "srpuser";
       public static String UDDI_PASSWD = "srppwd";
       public static String SERVICE_PROVIDER_NAME = "demo provider";

       public static void main(String args[])
       {
         try
         {
           //////////////////// INITIALIZATION
     /////////////////////////////////
           // Create Service Registry Proxy
           ServiceRegistryProxy srp =
             new ServiceRegistryProxy(UDDI_TEST_REGISTRY_INQUIRY,
                                      UDDI_TEST_REGISTRY_PUBLISH,
                                      UDDI_USER, UDDI_PASSWD);
           //////////////////// UNPUBLISH
     //////////////////////////////////////
           // Find the published service provider
           ServiceProvider[] serviceProviderList =
             srp.findServiceProviders(SERVICE_PROVIDER_NAME, true);
           if (serviceProviderList != null)
           {
             // Unpublish the service provider
             srp.unpublish(serviceProviderList[0]);
             // Display unpublish completed message
             System.out.println("Service provider " + "\"" +
                                SERVICE_PROVIDER_NAME + "\"" + " was unpublished.");
           }
           else
             // Display error message
             System.out.println("Service provider " + "\"" +
                                SERVICE_PROVIDER_NAME + "\"" + " not found.");
         }
         catch (ServiceRegistryProxyException e)
         {
           System.out.println("ServiceRegistryProxyException: " + e.getMessage());
         }
       }
     }

これらのデモは、IBM UDDIテスト・レジストリーを使用して対話を行ないます。テスト・レジストリーには、定義済みのログインおよびパスワードがすでに登録されています。

SRP、UDDI4J、およびWSDL4Jは、IBM Web Services Toolkit (WSTK) の一部としても使用することができます (参考文献のリンクを参照)。WSTKをインストールおよび構成した後で、以下の手順に従って、Microsoft Windows 2000環境でService Providerをコンパイルし、実行してください (LinuxまたはUnixとの違いは、コードのコンパイルおよび実行に使用するコマンドの構文だけです)。


コンパイル

シェル・ウィンドウをオープンし、デモがあるディレクトリーに移動して、プロンプトから次のように入力します。
 %WSTK_HOME%\bin\wstkenv.bat
 javac -classpath .;%WSTK_CP%;%WSTK_HOME%\uddi4j\lib\uddi4j.jar
 *.java


実行

同じシェル・ウィンドウで、次のように入力します。
 java -cp .;%WSTK_CP%;%WSTK_HOME%\uddi4j\lib\uddi4j.jar
 ServiceProviderXXXDemo

(このXXXは、Publish、Find、またはUnpublishです。)

これらのデモが正常に実行されると、表3 に示す出力が得られます。


表3: デモの出力
デモ 出力
ServiceProviderPublishDemoService provider "demo provider" was published
ServiceProviderFindDemoService Provider Name: demo provider
Description: SRP provider demo
ServiceProviderUnpublishDemoService provider "demo provider" was unpublished

要約

これでSRPは習得しました。このツールが便利だと感じていただければ幸いです。ここで紹介したコードは、読者の作業に自由に使用してください。また、読者の役に立つと思われる、他のタイプの記事やツールがありましたら、Web Servicesチームにぜひお知らせください。下記の参考文献セクションには、WSTKページ (およびプロジェクト・チームについてのフィードバック・フォーム) へのリンクが記載されています。


参考文献

著者について

Alfredo da Silva

Alfredo da SilvaはIBMのソフトウェア開発者です。彼は、IBM Web Services Toolkit (WSTK) を担当するグループのメンバーです。Alfredoの連絡先は、afdasilv@us.ibm.com です。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and Web services
ArticleID=241869
ArticleTitle=Service Registry Proxy
publish-date=112001
author1-email=afdasilv@us.ibm.com
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。