カスタム・レジストリ・モジュール  目次

この項では、Oracle Service Registryの機能をカスタム・モジュールで拡張する方法について説明します。 図8に示すように、Oracle Service Registryにカスタム・モジュールを追加することができます。

図8 カスタム・レジストリ・モジュール: アーキテクチャ・ビュー

カスタム・レジストリ・モジュール: アーキテクチャ・ビュー

レジストリ・モジュールを作成およびデプロイするには、次の手順を実行します。

  1. org.systinet.uddi.module.Moduleを実装するクラスを作成します。

  2. モジュール実装クラスをREGISTRY_HOME/app/uddi/services/WASP-INF/classesにコピーします。

  3. モジュールの構成ファイルをREGISTRY_HOME/app/uddi/confに作成します。

  4. Oracle Service Registryを停止し、REGISTRY_HOME/workディレクトリを削除して、レジストリを再起動します。

カスタム・モジュールのメイン・クラスでは、次のメソッドがあるorg.systinet.uddi.module.Moduleインタフェースを実装する必要があります。

Registry APIへのアクセス  目次

Oracle Service Registry APIにアクセスするには、API実装クラスのgetApiInstance()メソッドを使用して、APIスタブを取得する必要があります。たとえば、Statistics APIのスタブを取得するには、次のように入力します。

StatisticsApi statapi = StatisticsApiImpl.getApiInstance();
        

APIインタフェース・クラスと実装クラスとの間のマッピングは、REGISTRY_HOME/app/uddi/services/WASP-INF/package.xmlファイルに保存されています。詳細は、表53「APIインタフェースと実装クラスとの間のマッピング」を参照してください。

表53 APIインタフェースと実装クラスとの間のマッピング

インタフェース・クラス実装クラス
org.systinet.uddi.client.v1.InquireSoapcom.systinet.uddi.inquiry.v1.InquiryApiImpl
org.systinet.uddi.client.v1.PublishSoapcom.systinet.uddi.publishing.v1.PublishingApiImpl
org.systinet.uddi.client.v2.Publishcom.systinet.uddi.publishing.v2.PublishingApiImpl
org.systinet.uddi.client.v2.Inquirecom.systinet.uddi.inquiry.v2.InquiryApiImpl
org.systinet.uddi.client.v3.UDDI_Security_PortTypecom.systinet.uddi.v3.SecurityApiImpl
org.systinet.uddi.client.v3.UDDI_Publication_PortTypecom.systinet.uddi.publishing.v3.PublishingApiImpl
org.systinet.uddi.client.v3.UDDI_Inquiry_PortTypecom.systinet.uddi.inquiry.v3.InquiryApiImpl
org.systinet.uddi.client.subscription.v3.UDDI_Subscription_PortTypecom.systinet.uddi.subscription.v3.SubscriptionApiImpl
org.systinet.uddi.client.custody.v3.UDDI_CustodyTransfer_PortTypecom.systinet.uddi.custody.v3.CustodyApiImpl
org.systinet.uddi.replication.v3.ReplicationApicom.systinet.uddi.replication.v3.ReplicationApiImpl
org.systinet.uddi.client.wsdl2uddi.v3.Wsdl2uddiApicom.systinet.uddi.wsdl2uddi.v3.Wsdl2uddiApiImpl
org.systinet.uddi.client.wsdl2uddi.v2.Wsdl2uddiApicom.systinet.uddi.wsdl2uddi.v2.Wsdl2uddiApiImpl
org.systinet.uddi.client.category.v3.CategoryApicom.systinet.uddi.category.v3.CategoryApiImpl
org.systinet.uddi.client.taxonomy.v3.TaxonomyApicom.systinet.uddi.taxonomy.v3.TaxonomyApiImpl
org.systinet.uddi.statistics.StatisticsApicom.systinet.uddi.statistics.StatisticsApiImpl
org.systinet.uddi.admin.AdministrationUtilsApicom.systinet.uddi.admin.AdministrationUtilsApiImpl
org.systinet.uddi.permission.PermissionApicom.systinet.uddi.permission.PermissionApiImpl
org.systinet.uddi.group.GroupApicom.systinet.uddi.group.GroupApiImpl
org.systinet.uddi.account.AccountApicom.systinet.uddi.account.AccountApiImpl
org.systinet.uddi.configurator.ConfiguratorApicom.systinet.uddi.configurator.cluster.ConfiguratorApiImpl

カスタム・モジュールのサンプル  目次

この項では、Oracle Service Registryの再起動回数をカウントし、結果を構成ファイルに保存するレジストリ・モジュールを作成する方法について説明します。

次の手順を実行します。

  1. 例6に示すように、JavaファイルExampleModule.javaを作成します。

  2. java -classpath "%REGISTRY_HOME%¥app¥uddi¥services¥WASP-INF¥lib¥application_ core.jar; %REGISTRY_HOME%¥lib¥wasp.jar" ExampleModule.javaを使用して、モジュールをコンパイルします。

  3. すべてのモジュール・クラス(ExampleModule.classExampleModule$RestartConfig$Counter.classExampleModule$RestartConfig.class)を、REGISTRY_HOME/app/uddi/services/WASP-INF/classes/com/systinet/example/moduleディレクトリにコピーします。

  4. 構成ファイルmymodule.xmlREGISTRY_HOME/app/uddi/confフォルダに作成します。 詳細は、例7を参照してください。

  5. Oracle Service Registryを停止し、REGISTRY_HOME/workディレクトリを削除して、レジストリを再起動します。

再起動回数は、Oracle Service Registryを起動したウィンドウ・コンソールに出力されます。また、新しい要素counterが作成されたモジュールの構成ファイルも参照してください。

例6 ExampleModule.java

package com.systinet.example.module;

import org.idoox.config.Configurable;
import org.systinet.uddi.module.Module;

public class ExampleModule implements Module {
    private long restart = 0;
    private RestartConfig.Counter counter;

    interface RestartConfig {
        public Counter getCounter();
        public void setCounter(Counter counter);
        public Counter newCounter();
        interface Counter {
            public long getRestart();
            public void setRestart(long restart);
        }
    }

    public void load(Configurable config) {
        System.out.println("MY MODULE CONFIG READING");
        RestartConfig restartConfig = (RestartConfig) config.narrow(RestartConfig.class);
        if (restartConfig != null) {
            counter = restartConfig.getCounter();
            if (counter == null) {
                counter = restartConfig.newCounter();
                restartConfig.setCounter(counter);
            }
            try {
                restart = counter.getRestart();
            } catch (Exception e) {
                counter.setRestart(0);
            }
        }
    }

    public void init() {
        System.out.println("MY MODULE STARTED");
        counter.setRestart(++restart);
        System.out.println("UDDI REGISTRY: number of restarts = " + restart);
    }

    public void destroy() {
    }
}

例7 カスタム・モジュールの構成ファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<config name="myconf">
    <module loader="com.systinet.example.module.ExampleModule" name="MyModule">
    </module>
</config>