第7章 UDDI アノテーション

7.1. はじめに

従来、管理者が GUI を使って手動で、サービス (BusinessService) とエンドポイント (BindingTemplates) を UDDI Registry に登録していました。残念ながら、こうすると、Registry 内のデータが静的、つまり時間が経つと陳腐化してしまいます。
jUDDI Registry をより動的にするには、デプロイするたびに各エンドポイントを登録すると理にかなうはずです。UDDI アノテーションは、これを行うためだけに設計されています。アプリケーションサーバーにデプロイされる際にサービスを登録します。
アノテーションには UDDIServiceUDDIServiceBinding の 2 種類があります。エンドポイントを登録するには、上記の両方を使用する必要があります。
サービスをアンデプロイすると、エンドポイントは UDDI Registry から削除されますが、サービス情報は残ります (エンドポイントがなくてもサービスがあるため、後に確認するよう指示を出すことができるため、Registry にサービスレベルの情報を残すのは理にかなっています)。

注記

サービス情報を削除したい場合、手動で削除する必要があります。

注記

アノテーションは juddi-client ライブラリを使用します。つまり、これらのアノテーションを使用して、UDDI バージョン 3 レジストリに登録できるということです。

7.2. UDDIService アノテーション

UDDIService アノテーションを使用して、Registry 内にすでにあるビジネスにサービスを登録します。アノテーションは、Java クラスのクラスレベルに追加してください。

表7.1 UDDIService 属性

属性 説明 必須
serviceName サービス名。デフォルトでは、クラークが WebService アノテーションで指定された名前を使用します。 いいえ
description 人間が解読できるようなサービスの説明 はい
serviceKey サービスの UDDI v3 キー はい
businessKey サービスを所有すべきビジネスの UDDI v3 キー (ビジネスは、登録時に Registry に存在している必要があります)。 はい
lang これは、名前や説明で利用される言語ロケール (省略するとデフォルトの "en" に設定されます)。 いいえ
categoryBag CategoryBag の定義 いいえ

7.3. UDDIServiceBinding アノテーション

UDDIServiceBinding アノテーションを使用して、UDDI Registry に BindingTemplate を登録します (このアノテーションのみでの使用はできません。UDDIService アノテーション内で使用する必要があります)。

表7.2 UDDIServiceBinding 属性

属性 説明 必須
bindingKey ServiceBinding の UDDI v3 キー はい
description 人間が解読できるようなサービスの説明 はい
accessPointType UDDI v3 の AccessPointType (省略するとデフォルトの wsdlDeployment になります) いいえ
accessPoint エンドポイント参照 はい
lang これは、名前や説明で利用される言語ロケール (省略するとデフォルトの "en" に設定されます)。 いいえ
tModelKeys コンマ区切りの tModelKeys キー参照 いいえ
categoryBag CategoryBag の定義 いいえ

7.4. WebService の例

サービスを定義するクラスにアノテーションを使用することができます。ここでは、WebService に追加されています (POJO に JAX-WS 'WebService' アノテーションがついています)。
package org.apache.juddi.samples;

import javax.jws.WebService;
import org.apache.juddi.v3.annotations.UDDIService;
import org.apache.juddi.v3.annotations.UDDIServiceBinding;

@UDDIService(
		businessKey="uddi:myBusinessKey",
		serviceKey="uddi:myServiceKey", 
		description = "Hello World test service")
@UDDIServiceBinding(
		bindingKey="uddi:myServiceBindingKey",
	    description="WSDL endpoint for the helloWorld Service. This service is used for "
				  + "testing the jUDDI annotation functionality",
	    accessPointType="wsdlDeployment",
	    accessPoint="http://localhost:8080/juddiv3-samples/services/helloworld?wsdl")
@WebService(
		endpointInterface = "org.apache.juddi.samples.HelloWorld",
        serviceName = "HelloWorld")

public class HelloWorldImpl implements HelloWorld {
    public String sayHi(String text) {
        System.out.println("sayHi called");
        return "Hello " + text;
    }
}
この WebService をデプロイすると、juddi-client コードは、UDDI アノテーションに対してこのクラスをスキャンし、登録プロセスを担当します。
clerk のセクションでは、org.apache.juddi.samples.HelloWorldImpl サービスクラスに参照する必要があります。
            <clerk name="BobCratchit" node="default" publisher="sales" password="sales"> 
                 <class>org.apache.juddi.samples.HelloWorldImpl</class>  
            </clerk>
このコードは、ボブが default という名前のノードの接続設定を使用しており、sales publisher (このパスワードは sales) を使用する予定であると記述しています。

注記

データソースの定義方法に似ています。

7.5. CategoryBag 属性

CategoryBag 属性を使用して、tModels を参照します。以下に CategoryBag の例を示しています。
        <categoryBag>
           <keyedReference tModelKey="uddi:uddi.org:categorization:types" 
            keyName="uddi-org:types:wsdl" keyValue="wsdlDeployment" /> 
           <keyedReference tModelKey="uddi:uddi.org:categorization:types" 
            keyName="uddi-org:types:wsdl2" keyValue="wsdlDeployment2" />
        </categoryBag>
以下のように追加できます。
categoryBag="keyedReference=keyName=uddi-org:types:wsdl;keyValue=wsdlDeployment;" +
                     "tModelKey=uddi:uddi.org:categorization:types," +  
                     "keyedReference=keyName=uddi-org:types:wsdl2;keyValue=wsdlDeployment2;" +
                     "tModelKey=uddi:uddi.org:categorization:types2",