この項では、Oracle Service Registryの機能をカスタム・モジュールで拡張する方法について説明します。 図8に示すように、Oracle Service Registryにカスタム・モジュールを追加することができます。
レジストリ・モジュールを作成およびデプロイするには、次の手順を実行します。
org.systinet.uddi.module.Moduleを実装するクラスを作成します。
モジュール実装クラスをREGISTRY_HOME/app/uddi/services/WASP-INF/classesにコピーします。
モジュールの構成ファイルをREGISTRY_HOME/app/uddi/confに作成します。
Oracle Service Registryを停止し、REGISTRY_HOME/workディレクトリを削除して、レジストリを再起動します。
カスタム・モジュールのメイン・クラスでは、次のメソッドがあるorg.systinet.uddi.module.Moduleインタフェースを実装する必要があります。
load()は、モジュールの最初のメソッドとして起動されます。構成ファイルの読取りは、ここに配置することができます。
init()は、load()メソッドの後に起動されます。モジュールのコア実装は、ここに配置します。非ブロッキング・コードを記述するか、または新しいスレッドを開始します。
destroy()は、Oracle Service Registryを停止する直前に起動されます。
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.InquireSoap | com.systinet.uddi.inquiry.v1.InquiryApiImpl |
org.systinet.uddi.client.v1.PublishSoap | com.systinet.uddi.publishing.v1.PublishingApiImpl |
org.systinet.uddi.client.v2.Publish | com.systinet.uddi.publishing.v2.PublishingApiImpl |
org.systinet.uddi.client.v2.Inquire | com.systinet.uddi.inquiry.v2.InquiryApiImpl |
org.systinet.uddi.client.v3.UDDI_Security_PortType | com.systinet.uddi.v3.SecurityApiImpl |
org.systinet.uddi.client.v3.UDDI_Publication_PortType | com.systinet.uddi.publishing.v3.PublishingApiImpl |
org.systinet.uddi.client.v3.UDDI_Inquiry_PortType | com.systinet.uddi.inquiry.v3.InquiryApiImpl |
org.systinet.uddi.client.subscription.v3.UDDI_Subscription_PortType | com.systinet.uddi.subscription.v3.SubscriptionApiImpl |
org.systinet.uddi.client.custody.v3.UDDI_CustodyTransfer_PortType | com.systinet.uddi.custody.v3.CustodyApiImpl |
org.systinet.uddi.replication.v3.ReplicationApi | com.systinet.uddi.replication.v3.ReplicationApiImpl |
org.systinet.uddi.client.wsdl2uddi.v3.Wsdl2uddiApi | com.systinet.uddi.wsdl2uddi.v3.Wsdl2uddiApiImpl |
org.systinet.uddi.client.wsdl2uddi.v2.Wsdl2uddiApi | com.systinet.uddi.wsdl2uddi.v2.Wsdl2uddiApiImpl |
org.systinet.uddi.client.category.v3.CategoryApi | com.systinet.uddi.category.v3.CategoryApiImpl |
org.systinet.uddi.client.taxonomy.v3.TaxonomyApi | com.systinet.uddi.taxonomy.v3.TaxonomyApiImpl |
org.systinet.uddi.statistics.StatisticsApi | com.systinet.uddi.statistics.StatisticsApiImpl |
org.systinet.uddi.admin.AdministrationUtilsApi | com.systinet.uddi.admin.AdministrationUtilsApiImpl |
org.systinet.uddi.permission.PermissionApi | com.systinet.uddi.permission.PermissionApiImpl |
org.systinet.uddi.group.GroupApi | com.systinet.uddi.group.GroupApiImpl |
org.systinet.uddi.account.AccountApi | com.systinet.uddi.account.AccountApiImpl |
org.systinet.uddi.configurator.ConfiguratorApi | com.systinet.uddi.configurator.cluster.ConfiguratorApiImpl |
この項では、Oracle Service Registryの再起動回数をカウントし、結果を構成ファイルに保存するレジストリ・モジュールを作成する方法について説明します。
次の手順を実行します。
例6に示すように、JavaファイルExampleModule.javaを作成します。
java -classpath "%REGISTRY_HOME%¥app¥uddi¥services¥WASP-INF¥lib¥application_ core.jar; %REGISTRY_HOME%¥lib¥wasp.jar" ExampleModule.javaを使用して、モジュールをコンパイルします。
すべてのモジュール・クラス(ExampleModule.class、ExampleModule$RestartConfig$Counter.class、ExampleModule$RestartConfig.class)を、REGISTRY_HOME/app/uddi/services/WASP-INF/classes/com/systinet/example/moduleディレクトリにコピーします。
構成ファイルmymodule.xmlをREGISTRY_HOME/app/uddi/confフォルダに作成します。 詳細は、例7を参照してください。
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() { } }