第9章 サブスクリプション

9.1. はじめに

レジストリが複数ある環境では、サブスクリプションは便利です。企業内で、複数の UDDI Registry を実行するように決定したとします。例えば、独自の UDDI ノードに登録されたシステムへのみアクセスできるように、各部署ごとにレジストリを設定するように決めたとします。しかし、ある時点で、部署間でサービスの共有をする必要があると判明するかもしれません。そのような場合は、subscription API を使用してサービスを複数レジストリ間で登録して、親 UDDI のレジストリ情報が変更すると通知を送信することで、最新の情報に保ちます。
サブスクリプションには 2 種類あります。別の通知システムがそれぞれに存在します。
非同期
こちらは、サブスクリプションを保存して、設定したスケジュールで更新を受け取ることができます。
同期
こちらは、サブスクリプションを保存して、get_Subscription を呼び出すことで同期の返答を取得することができます。
非同期バージョンは、リスナーサービスを通知の送信先となるノードにインストールする必要があります。

9.2. 2 ノードの例:Sales と Marketing

この例では、salesmarketing のノードを設定します。これには、2 種のサービスに jUDDI Registry をデプロイして、システムが正しく設定されるように 2 つのプロシージャーに従う必要があります。

手順9.1 ノード 1 の設定: Sales

  1. juddi_custom_install_data を作成します。
    cd juddiv3/WEB-INF/classes
    mv RENAME4SALES_juddi_custom_install_data juddi_custom_install_data
  2. juddiv3.properties を編集し、以下のプロパティ値を設定します。sales はサーバーの DNS 名となります。
    juddi.server.name=sales
    juddi.server.port=8080
  3. サーバーを起動します。jUDDI が初めて起動される場合は、UDDI シードデータが読み込まれます。
    bin/startup.sh
  4. Web ブラウザーを開き、http://sales:8080/juddiv3 のアドレスに移動します。ノードに関する情報を含むメッセージが表示されます。

手順9.2 ノード 2 の設定: Marketing

  1. juddi_custom_install_data を作成します。
    cd juddiv3/WEB-INF/classes
    mv RENAME4MARKETING_juddi_custom_install_data juddi_custom_install_data
  2. juddiv3.properties を編集し、以下のプロパティ値を設定します。marketing はサーバーの DNS 名となります。
    juddi.server.name=marketing
    juddi.server.port=8080
  3. サーバーを起動します。jUDDI が初めて起動される場合は、UDDI シードデータが読み込まれます。
    bin/startup.sh
  4. Web ブラウザーを開き、http://sales:8080/juddiv3 に移動します。また、問題なく実行された旨、またノード情報を含むメッセージが表示されます。

注記

営業部もマーケティング部も同社内に位置しているため、root パーティションは同じように保たれていますが、 Node Id Name で各ノードが別の部門に所属することがわかります。
次に sales サーバーの uddi-portlets.war/WEB-INF/classes/META-INF/uddi.xml ファイルを、 uddi-portlets.war/WEB-INF/classes/META-INF/uddi.xml.sales で置き換えます。
そして、以下のプロパティを設定し、uddi-portlets.war/WEB-INF/classes/META-INF/uddi.xml ファイルを編集します。
<name>default</name>
<properties>
    <property name="serverName" value="sales"/>
    <property name="serverPort" value="8080"/>
    <property name="rmiPort" value="1099"/>
</properties>
Web ブラウザーを起動して http://sales:8080/pluto のアドレスに移動します。
ユーザー名、パスワードともに sales でログインします。以下が画面に表示されます。
Sales Services

図9.1 Sales サービス

マーケティングポータルにログインする前に、マーケティングの uddi-portlet.war/WEB-INF/classes/META-INF/uddi.xml ファイルを udd-portlet.war/WEB-INF/classes/META-INF/uddi.xml.marketing で置き換えます。
そして、以下のプロパティを設定し、uddi-portlet.war/WEB-INF/classes/META_INF/uddi.xml ファイルを編集します。
<name>default</name>
<properties>
    <property name="serverName" value="marketing"/>
    <property name="serverPort" value="8080"/>
    <property name="rmiPort" value="1099"/>
</properties>
Web ブラウザーを起動して http://marketing:8080/pluto のアドレスに移動します。
ユーザー名、パスワードともに sales でログインします。以下が画面に表示されます。
Marketing Services

図9.2 Marketing サービス

注記

Root Marketing ノードではなく、Marketing ノードビジネスが subscriptionlistener を所有します。Marketing Node Business は marketing publisher が管理します。

9.3. HellowSales サービスのデプロイ

次のサービス例は HelloSales と呼ばれます。HelloSales サービスは、juddiv3-samples.war アーカイブファイルにあり、アノテーションがついているため自動的に登録されます。
アーカイブをデプロイする前に、sales にプロパティ値を設定するように juddiv3-samples.war/WEB-INF/classes/META-INF/uddi.xml ファイルを編集します。以下のようになります。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<uddi>
    <reloadDelay>5000</reloadDelay>
    <manager name="example-manager">
        <nodes>
            <node>
                <name>default</name>
                <description>Sales jUDDI node</description>  
                <properties>
                    <property name="serverName"  value="sales"/>
                    <property name="serverPort"  value="8080"/>
                    <property name="keyDomain"   value="sales.apache.org"/>
                    <property name="department"  value="sales" />
                </properties>
                <proxyTransport>
                    org.apache.juddi.v3.client.transport.InVMTransport
                </proxyTransport>
                <custodyTransferUrl>
                    org.apache.juddi.api.impl.UDDICustodyTransferImpl
                </custodyTransferUrl>
                <inquiryUrl>org.apache.juddi.api.impl.UDDIInquiryImpl</inquiryUrl>
                <publishUrl>org.apache.juddi.api.impl.UDDIPublicationImpl</publishUrl>
                <securityUrl>org.apache.juddi.api.impl.UDDISecurityImpl</securityUrl>
                <subscriptionUrl>
                    org.apache.juddi.api.impl.UDDISubscriptionImpl
                </subscriptionUrl>
                <subscriptionListenerUrl>
                    org.apache.juddi.api.impl.UDDISubscriptionListenerImpl
                </subscriptionListenerUrl>
                <juddiApiUrl>org.apache.juddi.api.impl.JUDDIApiImpl</juddiApiUrl>
            </node>
        </nodes>
    </manager>
</uddi>
juddiv3-samples.war をビルド、デプロイすることで sales レジストリノードにデプロイします。
HelloWorld サービスは自動でデプロイされるはずです。
次に、Marketing UDDI ノードから Sales UDDI ノードの HelloWord サービスにサブスクライブしてください。

9.4. ユーザーがサブスクリプションを作成ができるように許可

サブスクリプションを作成し保存するには、sales ノードと marketing ノードに対して有効な "publisher" ログイン権限がないといけません。また、marketing publisher が marketing ノードにレジストリオブジェクトを作成する場合、marketing publisher は、sales keygenerator tModel を所有する必要があります (この件についての詳細は、Marketing ノードと sales ノードの両方のルートシードデータで marketing_*.xml ファイルを確認してください。)
マーケティングレジストリの marketing publisher が以下の tModels を所有することを理解してください。
<save_tModel xmlns="urn:uddi-org:api_v3">

    <tModel tModelKey="uddi:marketing.apache.org:keygenerator" xmlns="urn:uddi-org:api_v3">
        <name>marketing-apache-org:keyGenerator</name>
        <description>Marketing domain key generator</description>
        <overviewDoc>
            <overviewURL useType="text">
                http://uddi.org/pubs/uddi_v3.htm#keyGen
            </overviewURL>
        </overviewDoc>
        <categoryBag>
            <keyedReference tModelKey="uddi:uddi.org:categorization:types" 
                keyName="uddi-org:types:keyGenerator"
                keyValue="keyGenerator" />
        </categoryBag>
    </tModel>
    
    <tModel tModelKey="uddi:marketing.apache.org:subscription:keygenerator" 
        xmlns="urn:uddi-org:api_v3">
        <name>marketing-apache-org:subscription:keyGenerator</name>
        <description>Marketing Subscriptions domain key generator</description>
        <overviewDoc>
            <overviewURL useType="text">
                http://uddi.org/pubs/uddi_v3.htm#keyGen
            </overviewURL>
        </overviewDoc>
        <categoryBag>
            <keyedReference tModelKey="uddi:uddi.org:categorization:types" 
                keyName="uddi-org:types:keyGenerator"
                keyValue="keyGenerator" />
        </categoryBag>
    </tModel>

    <tModel tModelKey="uddi:sales.apache.org:keygenerator" xmlns="urn:uddi-org:api_v3">
        <name>sales-apache-org:keyGenerator</name>
        <description>Sales Root domain key generator</description>
        <overviewDoc>
            <overviewURL useType="text">
                http://uddi.org/pubs/uddi_v3.htm#keyGen
            </overviewURL>
        </overviewDoc>
        <categoryBag>
            <keyedReference tModelKey="uddi:uddi.org:categorization:types" 
                keyName="uddi-org:types:keyGenerator"
                keyValue="keyGenerator" />
        </categoryBag>
    </tModel>
</save_tModel>
marketing publisher を使用して sales レジストリの更新をサブスクライブする場合、このパブリッシャーに 2 つのクラークを提供する必要があります。方法は、uddi-portlet.waruddi.xml ファイルに追加します。
<clerks registerOnStartup="false">
    <clerk  name="MarketingCratchit"    node="default" 
            publisher="marketing"       password="marketing"/>

    <clerk  name="SalesCratchit"        node="sales-ws"   
            publisher="marketing"       password="marketing"/>
    <!--  optional 
    <xregister>
        <servicebinding 
            entityKey="uddi:marketing.apache.org:servicebindings-subscriptionlistener-ws" 
            fromClerk="MarketingCratchit" toClerk="SalesCratchit"/>
    </xregister>
    -->
</clerks>
上記のコードでは、このパブリッシャに MarketingCratchitSalesCratchit のクラークを 2 つ作成しました。こうすることで、パブリッシャーが所有する 2 つのシステム 内でサブスクリプションをチェックします。

9.5. 同期通知

マーケティングポータルに marketing publisher でログインして、UDDISubscription Portlet を選択します。
両ノードが緑になると、(ツールバーにある) new subscription アイコンをクリックします。これは、同期サブスクリプションであるため、Binding KeyNotification Interval のみを残します。
Save アイコンをクリックしてサブスクリプションを保存します。
サブスクリプションキーが marketing publisher の keyGenerator ルールを使うようにしてください。 sales-ws UDDI ノードの下にオレンジのサブスクリプションアイコンが表示されるはずです。
同期サブスクリプションを呼び出すには、Green Arrows アイコンをクリックします。これにより、対象期間を設定することができます。
Green Arrows アイコンを再度クリックして、同期サブクリぷしょんリクエストを呼び出します。ファインダーリクエストの例では、HelloWorld サービスに更新がないか Sales ノードを検索します。ロー XML レスポンスが UDDISubscriptionNotification ポートレットに掲示されます。
The raw XML response to the synchronous subscription request

図9.3 同期サブスクリプションリクエストへのロー XML レスポンス

レスポンスは marketing ノードで処理されます。このノードは、HelloWorld サブスクリプションの情報と sales business をインポートします。正常に同期されると、マーケティングノードのブラウザーポートレットに 3 つのビジネスが表示されます。