Publishing v3  目次

Oracle Service RegistryのBasicのPublishingデモ・セットでは、Oracle Service RegistryのApplication Programming Interface(API)の機能のデモンストレーションを行い、このAPIを使用してUDDIレジストリに対する基本的な公開コールを実行する方法を学習します。

Oracle Service RegistryのBasicのPublishingデモでは、UDDI Version 3 Specificationの公開の側面を扱います。 Oracle Service RegistryのクライアントAPIを使用して、SOAPインタフェース経由でUDDIレジストリの情報を公開する方法を学習します。add_publisherAssertionからget_registeredInfosave_businessまでの各UDDIコールに対して1つずつデモがあります。

Oracle Service RegistryのBasicのPublishingデモ・セットには、次のデモが含まれています。 これらは、Oracle Service RegistryのクライアントAPIの学習を支援するものです。

AddAssertion Add_publisherAssertionオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、add_publisherAssertionコールを実行する方法のデモンストレーションです。

DeleteAssertion Delete_publisherAssertionオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、delete_publisherAssertionコールを実行する方法のデモンストレーションです。

DeleteBinding Delete_bindingオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、delete_bindingコールを実行する方法のデモンストレーションです。

DeleteBusiness Delete_businessオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、delete_businessコールを実行する方法のデモンストレーションです。

DeleteService Delete_serviceオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、delete_serviceコールを実行する方法のデモンストレーションです。

DeleteTModel Delete_tModelオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、delete_tModelコールを実行する方法のデモンストレーションです。

GetAssertionStatusReport Get_assertionStatusReportオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、get_assertionStatusReportコールを実行する方法のデモンストレーションです。

GetPublisherAssertions Get_publisherAssertionsオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、get_publisherAssertionsコールを実行する方法のデモンストレーションです。

GetRegisteredInfo Get_registeredInfoオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、get_registeredInfoコールを実行する方法のデモンストレーションです。

SaveBinding Save_bindingオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、save_bindingコールを実行する方法のデモンストレーションです。

SaveBusiness Save_businessオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、save_businessコールを実行する方法のデモンストレーションです。

SaveService Save_serviceオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、save_serviceコールを実行する方法のデモンストレーションです。

SaveTModel Save_tModelオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、save_tModelコールを実行する方法のデモンストレーションです。

SetAssertions Set_publisherAssertionsオブジェクトをビルドして入力し、UDDIレジストリのPublishingスタブを取得し、authTokenを取得し、set_publisherAssertionsコールを実行する方法のデモンストレーションです。

前提条件および準備手順: コード  目次

Oracle Service Registryがすでにインストールされ、環境変数REGISTRY_HOMEにレジストリのインストール場所が設定されていることを想定しています。

Oracle Service Registryのデモを実行するには、レジストリが実行中である必要があります。

デモを構成する必要があります。構成システムには、グローバルとローカルの2つのレベルがあります。グローバル・レベルで定義されたプロパティは、ローカル・レベルで上書きできます。グローバル・プロパティは、次のファイルにあります。

Windows: %REGISTRY_HOME%¥demos¥env.properties
UNIX: $REGISTRY_HOME/demos/env.properties

Oracle Service Registryのインストール中に設定された値はそのまま使用でき、値の変更はすべてのデモに影響を与えます。単一のデモについて(つまりローカル・レベルで)プロパティの値を再定義する必要がある場合は、run.shrun.bat)が格納されているディレクトリ内のファイルenv.propertiesを編集してください。Basic/Publishingデモのローカル・レベルのプロパティは、次のファイルからロードされます。

Windows: %REGISTRY_HOME%¥demos¥basic¥publishing¥v3¥env.properties
UNIX: $REGISTRY_HOME/demos/basic/publishing/v3/env.properties

表6 デモで使用されるプロパティ

名前デフォルト値説明
uddi.demos.user.john.namedemo_john1人目のユーザーの名前
uddi.demos.user.john.passworddemo_john1人目のユーザーのパスワード
uddi.demos.user.jane.namedemo_jane2人目のユーザーの名前
uddi.demos.user.jane.passworddemo_jane2人目のユーザーのパスワード
uddi.demos.url.publishinghttp://localhost:8888/registry/uddi/publishing公開Webサービス・ポートのURL
uddi.demos.url.securityhttp://localhost:8888/registry/uddi/securityセキュリティWebサービス・ポートのURL
プレゼンテーションおよび機能プレゼンテーション  目次

この項では、すべてのデモで使用されるプログラミング・パターンを、SaveBusinessデモを例にして説明します。このデモのソース・コードは次のファイルにあります。

Windows: %REGISTRY_HOME%¥demos¥basic¥publishing¥src¥demo¥uddi¥v3¥publishing¥SaveBusiness.java
UNIX: $REGISTRY_HOME/demos/basic/publishing/src/demo/uddi/v3/publishing/SaveBusiness.java

mainメソッドはわかりやすいものです。始めにユーザーの入力(パブリッシャが任意に割り当てたbusinessKey、ビジネス・エンティティ名とその言語コードの可変長配列、およびビジネスの説明)を収集します。

次に、Securityスタブを取得し、ユーザーを認可します。結果として得られるauthInfo文字列は、すべてのリクエストで渡される秘密鍵です。

次に、Save_businessオブジェクトを作成して入力し、saveBusinessメソッドにパラメータとして渡します。

正常に処理されると、UDDIレジストリからBusinessDetailオブジェクトが返されて出力されます。最後に、authInfo文字列を廃棄します。これにより、悪質なユーザーがこの文字列を利用してユーザーのアカウントの安全性を損なうことができなくなります。

String businessKey = UserInput.readString("Enter (optional) businessKey", "");
int count = UserInput.readInt("Enter count of names", 1);
String[] names = new String[count];
String[] languageCodes = new String[count];
for (int i = 0; i < count; i++) {
    String tmp = UserInput.readString("Enter language code", "");
    languageCodes[i] = (tmp.length() > 0) ? tmp : null;
    names[i] = UserInput.readString("Enter name in language " + tmp, "Marketing");
}
String description = UserInput.readString("Enter description", "Saved by SaveBusiness demo");
System.out.println();

UDDI_Security_PortType security = getSecurityStub();
String authInfo = getAuthInfo(user, password, security);
Save_business save = createSaveBusiness(businessKey, names, languageCodes, description, authInfo);
BusinessDetail result = saveBusiness(save);
printBusinessDetail(result);
discardAuthInfo(authInfo, security);

ヘルパー・メソッドgetSecurityStub()によって、URL_SECURITYプロパティで指定されたURLでリスニングするWebサービスのUDDI Securityスタブが返ります。

public static UDDI_Security_PortType getSecurityStub()
 throws SOAPException {
    // you can specify your own URL in property - uddi.demos.url.security
    String url = DemoProperties.getProperty(URL_SECURITY, "http://localhost:8888/registry/uddi/security");
    System.out.print("Using Security at url " + url + " ..");
    UDDI_Security_PortType security = UDDISecurityStub.getInstance(url);
    System.out.println(" done");
    return security;
}

同様に、ヘルパー・メソッドgetPublishingStub()によって、URL_PUBLISHINGプロパティで指定されるURLでリスニングするWebサービスのUDDI Publicationスタブが返ります。

public static UDDI_Publication_PortType getPublishingStub()
 throws SOAPException {
    // you can specify your own URL in property - uddi.demos.url.publishing
    String url = DemoProperties.getProperty(URL_PUBLISHING, "http://localhost:8888/registry/uddi/publishing");
    System.out.print("Using Publishing at url " + url + " ..");
    UDDI_Publication_PortType inquiry = UDDIPublishStub.getInstance(url);
    System.out.println(" done");
    return inquiry;
}

getAuthInfo()メソッドを使用して、ユーザーをUDDIレジストリに対して認可し、秘密鍵authInfoを取得します。

public static String getAuthInfo(String userName, String password, UDDI_Security_PortType security)
  throws InvalidParameterException, UDDIException {
    System.out.print("Logging in ..");
    AuthToken authToken = security.get_authToken(new Get_authToken(userName, password));
    System.out.println(" done");
    return authToken.getAuthInfo();
}

discardAuthInfo()メソッドによって、秘密鍵authInfoが無効化され、使用できなくなります。

public static void discardAuthInfo(String authInfo, UDDI_Security_PortType security)
  throws InvalidParameterException, UDDIException {
    System.out.print("Logging out ..");
    security.discard_authToken(new Discard_authToken(authInfo));
    System.out.println(" done");
}

createSaveBusiness()メソッドを使用して、Save_businessクラスの新規インスタンスを作成し、各パラメータからの値で初期化します。

public static Save_business createSaveBusiness(String businessKey, String[] names,
  String[] nameLangCodes, String description, String authInfo)
  throws InvalidParameterException {
    System.out.println("businessKey = " + businessKey);
    for (int i = 0; i < names.length; i++) {
        System.out.println("lang = " + nameLangCodes[i] + ", name = " + names[i]);
    }
    System.out.println("description = " + description);

    BusinessEntity businessEntity = new BusinessEntity();
    if (businessKey!=null && businessKey.length()>0)
        businessEntity.setBusinessKey(businessKey);
    for (int i = 0; i < names.length; i++) {
        if (nameLangCodes[i] == null) {
            businessEntity.addName(new Name(names[i]));
        } else {
            businessEntity.addName(new Name(names[i], nameLangCodes[i]));
        }
    }
    businessEntity.addDescription(new Description(description));

    Save_business save = new Save_business();
    save.addBusinessEntity(businessEntity);
    save.setAuthInfo(authInfo);
    return save;
}

UDDI APIコールsave_businessが、saveBusiness()メソッドで次のように実行されます。

public static BusinessDetail saveBusiness(Save_business save)
  throws UDDIException, SOAPException {
    UDDI_Publication_PortType publishing = getPublishingStub();
    System.out.print("Save in progress ...");
    BusinessDetail businessDetail = publishing.save_business(save);
    System.out.println(" done");
    return businessDetail;
}

保存されたbusinessEntityは、printBusinessDetail()メソッドによって表示されます。 Oracle Service RegistryのクライアントAPIで重要な点は、それぞれのUDDIオブジェクトにtoXML()が含まれ、それによってそのXML表現が、判読可能な書式化されたリストで返されることです。

public static void printBusinessDetail(BusinessDetail businessDetail) {
    System.out.println();
    BusinessEntityArrayList businessEntityArrayList = businessDetail.getBusinessEntityArrayList();
    int position = 1;
    for (Iterator iterator = businessEntityArrayList.iterator(); iterator.hasNext();) {
        BusinessEntity entity = (BusinessEntity) iterator.next();
        System.out.println("Business " + position + " : " + entity.getBusinessKey());
        System.out.println(entity.toXML());
        System.out.println();
        System.out.println("********************************************************");
        position++;
    }
}
デモのビルドと実行  目次

この項では、Oracle Service RegistryのBasicのPublishingデモ・セットをビルドして実行する方法を示します。 引き続きSaveBusinessデモを使用します。

  1. デモが適切に構成され、Oracle Service Registryが実行中であることを確認してください。

  2. 次のディレクトリに移動します。

    Windows:%REGISTRY_HOME%¥demos¥basic¥publishing¥v3
    UNIX:$REGISTRY_HOME/demos/basic/publishing/v3

  3. 次のコマンドを使用して、すべてのデモをビルドします。

    Windows: run.bat make
    UNIX: ./run.sh make

    注意注意

    Windowsプラットフォームでデモをコンパイルすると、次のテキストが表示されることがあります。

    A subdirectory or file ..\..\common\.\build\classes already exists.

    これは予想される現象であり、問題を示すものではありません。

  4. 利用可能なすべてのデモのリストを表示するには、次のコマンドを実行します。

    Windows: run.bat help
    UNIX: ./run.sh help

  5. 選択したデモを実行するには、runコマンドのパラメータにデモの名前を指定して実行します。たとえば、SaveBusinessデモを実行するには、次のように起動します。

    Windows: run.bat SaveBusiness
    UNIX: ./run.sh SaveBusiness

    このデモの出力は次のようになります。

    Enter (optional) businessKey []: uddi:systinet.com:demo:marketing
    Enter count of names [1]: 1
    Enter language code []:
    Enter name in language  [Marketing]:
    Enter description [Saved by SaveBusiness demo]: Marketing department
    
    Using Security at url http://localhost:8888/registry/uddi/security .. done
    Logging in .. done
    businessKey = uddi:systinet.com:demo:marketing
    lang = null, name = Marketing
    description = Marketing department
    Using Publishing at url http://localhost:8888/registry/uddi/publishing .. done
    Save in progress ... done
    
    Business 1 : uddi:systinet.com:demo:marketing
    
    <businessEntity businessKey="uddi:systinet.com:demo:marketing" xmlns="urn:uddi-org:api_v3">
      <name>Marketing</name>
      <description>Marketing department</description>
    </businessEntity>
    
    ********************************************************
    Logging out .. done
  6. デモを再ビルドするには、run.bat clean./run.sh clean)を実行してclassesディレクトリを削除し、run.bat make./run.sh make)を実行してデモ・クラスを再ビルドします。