Oracle Service RegistryのBasicのPublishingデモ・セットでは、Oracle Service RegistryのApplication Programming Interface(API)の機能のデモンストレーションを行い、このAPIを使用してUDDIレジストリに対する基本的な公開コールを実行する方法を学習します。
Oracle Service RegistryのBasicのPublishingデモでは、UDDI Version 2 Specificationの公開の側面を扱います。 Oracle Service RegistryのクライアントAPIを使用して、SOAPインタフェース経由でUDDIレジストリの情報を公開する方法を学習します。add_publisherAssertionからget_registeredInfo、save_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.sh(run.bat)が格納されているディレクトリ内のファイルenv.propertiesを編集してください。Basic/Publishingデモのローカル・レベルのプロパティは、次のファイルからロードされます。
| Windows: | %REGISTRY_HOME%¥demos¥basic¥publishing¥v2¥env.properties |
| UNIX: | $REGISTRY_HOME/demos/basic/publishing/v2/env.properties |
表4 デモで使用されるプロパティ
| 名前 | デフォルト値 | 説明 |
|---|---|---|
| uddi.demos.user.john.name | demo_john | 1人目のユーザーの名前 |
| uddi.demos.user.john.password | demo_john | 1人目のユーザーのパスワード |
| uddi.demos.user.jane.name | demo_jane | 2人目のユーザーの名前 |
| uddi.demos.user.jane.password | demo_jane | 2人目のユーザーのパスワード |
| uddi.demos.url.publishing | http://localhost:8888/registry/uddi/publishing | 公開Webサービス・ポートのURL |
| uddi.demos.url.security | http://localhost:8888/registry/uddi/security | セキュリティWebサービス・ポートのURL |
この項では、すべてのデモで使用されるプログラミング・パターンを、SaveBusinessデモを例にして説明します。このデモのソース・コードは次のファイルにあります。
| Windows: | %REGISTRY_HOME%¥demos¥basic¥publishing¥src¥demo¥uddi¥v2¥publishing¥SaveBusiness.java |
| UNIX: | $REGISTRY_HOME/demos/basic/publishing/src/demo/uddi/v2/publishing/SaveBusiness.java |
mainメソッドはわかりやすいものです。初めにユーザーの入力を収集します。具体的には、パブリッシャが任意に割り当てたbusinessKey、ビジネス・エンティティ名とその言語コードの配列、最後にビジネスの説明です。
次に、Securityスタブを取得し、ユーザーを認可します。結果として得られるauthInfo文字列は、すべてのリクエストで渡される秘密鍵です。
次に、Save_businessオブジェクトを作成して入力し、saveBusinessメソッドにパラメータとして渡します。
正常に処理されると、UDDIレジストリからBusinessDetailオブジェクトが返されて出力されます。 最後に、authInfo文字列を廃棄します。これにより、この文字列を利用してユーザーのアカウントの安全性を損なうことができなくなります。
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 DispositionReport discardAuthInfo(String authInfo,
UDDI_Security_PortType security)
throws InvalidParameterException, UDDIException {
System.out.print("Logging out ..");
DispositionReport dispositionReport = security.discard_authToken(new Discard_authToken(authInfo));
System.out.println(" done");
return dispositionReport;
}
createSaveBusiness()メソッドを使用して、Save_businessクラスの新規インスタンスを作成し、各パラメータからの値で初期化します。
public static Save_business createSaveBusiness(String[] names,
String[] nameLangCodes, String description, String authInfo)
throws InvalidParameterException {
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();
businessEntity.setBusinessKey("");
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);
save.setGeneric(Constants.GENERIC_2_0);
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デモを使用します。
デモが適切に構成され、Oracle Service Registryが実行中であることを確認してください。
次のディレクトリに移動します。
| Windows: | %REGISTRY_HOME%¥demos¥basic¥publishing¥v2 |
| UNIX: | $REGISTRY_HOME/demos/basic/publishing/v2 |
次のコマンドを使用して、すべてのデモをビルドします。
| Windows: | run.bat make |
| UNIX: | ./run.sh make |
![]() | 注意 |
|---|---|
|
Windowsプラットフォームでデモをコンパイルすると、次のテキストが表示されることがあります。 A subdirectory or file ..\..\common\.\build\classes already exists. これは予想される現象であり、問題を示すものではありません。 | |
利用可能なすべてのデモのリストを表示するには、次のコマンドを実行します。
| Windows: | run.bat help |
| UNIX: | ./run.sh help |
選択したデモを実行するには、runコマンドのパラメータにデモの名前を指定して実行します。たとえば、SaveBusinessデモを実行するには、次のように起動します。
| Windows: | run.bat SaveBusiness |
| UNIX: | ./run.sh SaveBusiness |
このデモの出力は次のようになります。
Running SaveBusiness demo...
Saving business entity where
Enter count of names [1]:
Enter language code []:
Enter name in language [Marketing]:
Enter description [Saved by SaveBusiness demo]:
Using Publishing at url https://mycomp.com:8443/registry/uddi/publishing .. done
Logging in .. done
lang = null, name = Marketing
description = Saved by SaveBusiness demo
Save in progress ... done
Business 1 : c9e8be50-a5a5-11d8-91cd-5c1d367091cd
<businessEntity businessKey="c9e8be50-a5a5-11d8-91cd-5c1d367091cd" operator="Demo Operator"
authorizedName="demo_john" xmlns="urn:uddi-org:api_v2">
<name>Marketing</name>
<description>Saved by SaveBusiness demo</description>
</businessEntity>
********************************************************
Logging out .. doneデモを再ビルドするには、run.bat clean(./run.sh clean)を実行してclassesディレクトリを削除し、run.bat make(./run.sh make)を実行してデモ・クラスを再ビルドします。