Custody(管理)  目次

Oracle Service Registryのデモは、レジストリのApplication Programming Interface(API)機能およびこのAPIの使用方法のデモンストレーションを行うために使用します。

Oracle Service RegistryのCustody(管理)デモでは、UDDI Version 3.01 Specificationの管理転送の側面を扱います。ここでは、管理転送トークンを生成し、選択した構造の所有権を別のユーザーに転送する方法について学習します。

このパッケージには、CustodyDemoという名前のデモが1つ入っています。選択したUDDI鍵の転送トークンを生成する方法、およびこのトークンを使用して、UDDI鍵で識別される構造の管理を別のユーザーに転送する方法のデモンストレーションを行います。

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

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

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

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

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

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

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

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

名前デフォルト値説明
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.custodyhttp://localhost:8888/registry/uddi/custody管理Webサービス・ポートのURL
uddi.demos.url.securityhttp://localhost:8888/registry/uddi/securityセキュリティWebサービス・ポートのURL

プレゼンテーションおよび機能プレゼンテーション  目次

この項では、Custody(管理)デモのプログラミング・パターンについて説明します。ソース・コードは次のファイルにあります。

Windows: %REGISTRY_HOME%¥demos¥advanced¥custody¥src¥demo¥uddi¥custody¥CustodyDemo.java
UNIX: $REGISTRY_HOME/demos/advanced/custody/src/demo/uddi/custody/CustodyDemo.java

デモの使用を容易にするために、ファイルには2つのユースケースが含まれています。1つ目のユースケースでは、UDDI構造の所有者が自分のUDDI構造を他のユーザーに転送する必要のある場合について示します。2つ目のユースケースでは、その同じ構造を2人目のユーザーが自分の管理に転送します。1つ目のユースケースから始めます。

初めにユーザー入力を収集する必要があります。ユーザーの資格証明およびユーザーが所有する構造の鍵を読み取る必要があります。デフォルト値を使用する場合は、ユーザーdemo_johnがsystinet.com:departmentID tModelの管理をユーザーdemo_janeに転送します。ユーザーはログインし、任意のUDDI鍵の転送トークンを生成します。この転送トークンには、レジストリ、有効期限および秘密のopaqueTokenに関する情報が含まれています。これらのデータを知っているユーザーは、この転送トークンで保護される構造を転送できます。

String user = UserInput.readString("Enter first user name",
	           DemoProperties.getProperty(USER_JOHN_NAME));
String password = UserInput.readString("Enter password",
                   DemoProperties.getProperty(USER_JOHN_PASSWORD));
String uddiKey = UserInput.readString("Enter UDDI key",
                                       "uddi:systinet.com:demo:departmentID");
System.out.println();

UDDI_Security_PortType security = getSecurityStub();
String authInfo = getAuthInfo(user, password, security);
Get_transferToken get = createGetTransferToken(uddiKey, authInfo);
TransferToken token = getTransferToken(get);
printTransferToken(token);
discardAuthInfo(authInfo, security);

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

public static UDDI_CustodyTransfer_PortType getCustodyStub() throws SOAPException {
    // you can specify your own URL in property - uddi.demos.url.custody
    String url = DemoProperties.getProperty(URL_CUSTODY, "http://localhost:8888/registry/uddi/custody");
    System.out.print("Using Custody at url " + url + " ..");
    UDDI_CustodyTransfer_PortType custody = UDDICustodyStub.getInstance(url);
    System.out.println(" done");
    return custody;
}

createGetTransferToken()メソッドを使用して、このUDDIコールのパラメータをカプセル化するGet_transferTokenオブジェクトを作成します。この例では、authInfoと、2人目のユーザーの管理に転送されるUDDI構造の単一鍵を設定します。

public static Get_transferToken createGetTransferToken(String uddiKey, String authInfo)
  throws InvalidParameterException {
    System.out.println("uddiKey = " + uddiKey);
    Get_transferToken get = new Get_transferToken();
    get.addKey(uddiKey);
    get.setAuthInfo(authInfo);
    return get;
}

次に、get_transferToken UDDIコールを起動して、結果を取得します。この結果が転送トークンになります。

public static TransferToken getTransferToken(Get_transferToken get)
  throws UDDIException, SOAPException {
    UDDI_CustodyTransfer_PortType custody = getCustodyStub();
    System.out.print("Get in progress ...");
    TransferToken token = custody.get_transferToken(get);
    System.out.println(" done");
    return token;
}

この時点で、1人目のユーザーであるJohn Demoによって、転送トークンが生成されています。John Demoは、この転送トークンを破棄することも、2人目のユーザーであるJane Demoに転送して、Jane Demoがエンティティを自分の管理に転送できるようにすることもできます。この転送トークンは秘密にしておく必要があります。そのため、暗号化されていない電子メールなどプレーン・テキストでの転送は、この目的には適しません。Jane Demoはすでに転送トークンを受信していると想定します。Jane Demoはログインし、Transfer_entitiesオブジェクトを作成して、UDDIコールtransfer_entitiesを起動します。

user = UserInput.readString("Enter second user name",
	                                DemoProperties.getProperty(USER_JANE_NAME));
password = UserInput.readString("Enter password", DemoProperties.getProperty(USER_JANE_PASSWORD));
System.out.println();

authInfo = getAuthInfo(user, password, security);
Transfer_entities transfer = createTransferEntities(uddiKey, token, authInfo);
transferEntities(transfer);
discardAuthInfo(authInfo, security);

createTransferEntities()メソッドを使用して、同じ名前のUDDIコールのパラメータをカプセル化するTransfer_entitiesオブジェクトを作成します。この例では、JaneのauthInfo、転送するUDDI鍵、およびJohnが生成したTransferTokenを設定します。

public static Transfer_entities createTransferEntities(String uddiKey,
	                                                          TransferToken token, String authInfo)
  throws InvalidParameterException {
    Transfer_entities transfer = new Transfer_entities();
    transfer.addKey(uddiKey);
    transfer.setTransferToken(token);
    transfer.setAuthInfo(authInfo);
    return transfer;
}

最後に、transfer_entities UDDIコールを行います。正常に応答が返されると、2人目のユーザー(Jane)がUDDI構造systinet.com:demo:departmentIDの所有者になります。

public static void transferEntities(Transfer_entities transfer)
  throws UDDIException, SOAPException {
    UDDI_CustodyTransfer_PortType custody = getCustodyStub();
    System.out.print("Transfer in progress ...");
    custody.transfer_entities(transfer);
    System.out.println(" done");
}

デモのビルドと実行  目次

この項では、Oracle Service RegistryのCustody(管理)デモをビルドして実行する方法を示します。

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

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

    Windows: %REGISTRY_HOME%¥demos¥advanced¥custody
    UNIX: $REGISTRY_HOME/demos/advanced/custody

  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コマンドのパラメータにデモの名前を指定して実行します。CustodyDemoを実行するには、次のように起動します。

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

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

    Running CustodyDemo demo...
    
    Getting transfer token where
    Enter first user name [demo_john]:
    Enter password [demo_john]:
    Enter UDDI key [uddi:systinet.org:demo:departmentID]:
    
    Using Security at url https://mycomp.com:8443/registry/uddi/security .. done
    Logging in .. done
    uddiKey = uddi:systinet.org:demo:departmentID
    Using Custody at url https://mycomp.com:8443/registry/uddi/custody .. done
    Get in progress ... done
    
    TransferToken
    <transferToken xmlns="urn:uddi-org:custody_v3">
    <nodeID xmlns="urn:uddi-org:api_v3">Systinet</nodeID>
    <expirationTime>2004-05-17T12:32:51.236+02:00</expirationTime>
    <opaqueToken>ZmZmZmZmZmZlMDVmZGEzNg==</opaqueToken>
    </transferToken>
    
    Logging out .. done
    
    Transfering custody where
    Enter second user name [demo_jane]:
    Enter password [demo_jane]:
    
    Logging in .. done
    Using Custody at url https://mycomp.com:8443/registry/uddi/custody .. done
    Transfer in progress ... done
    Logging out .. done
  6. デモを再ビルドするには、run.bat clean./run.sh clean)を実行してclassesディレクトリを削除し、run.bat make./run.sh make)を実行してデモ・クラスを再ビルドします。