コンテンツ・チェッカの作成  目次

この項では、コンテンツ・チェッカの作成方法について説明します。コンテンツ・チェッカによって、データをプログラムでチェックする承認機能が承認者に提供されます。この項では、承認プロセスについて十分理解していることが前提となります。承認プロセスについては、次の項を参照してください。

次に、コンテンツ・チェッカを作成してデプロイする方法の例を示します。この例では、各ビジネス・エンティティ名を接頭辞org_で開始するというルールが承認者によって設定されます。このルールを満たしていないデータを承認(検出レジストリにコピー)することはできません。 コンテンツ・チェッカは、Oracle Service Registryコンソールの「Approve request」ページで、承認者が「Approve」ボタンを押すと実行されます。

このオプションのコンテンツ・チェックを設定するには、次の手順を実行します。

  1. クラスorg.systinet.uddi.approval.checker.v3.CheckerApiを実装するクラスを作成します。

  2. 実装クラスをOracle Service Registryにデプロイします。

  3. コンテンツ・チェッカ・クラスの実装をOracle Service Registryデータに登録します。

次に、各手順の詳細について説明します。

  1. org.systinet.uddi.approval.checker.v3.CheckerApiを実装するクラスを作成します。

    1. 例15に示すように、コンテンツ・チェッカ・クラスを作成します。

    2. CheckerApiImpl.javaをコンパイルし、jarをディレクトリPUBLICATION_REGISTRY_HOME/distからクラス・パスに追加します。

  2. 実装クラスをOracle Service Registryにデプロイします。

    注意注意

    アプリケーション・サーバーにデプロイする場合は、これらが使用される場所に変更を加える必要があります。 これは、インストール・ディレクトリ内ではなく、アプリケーション・サーバーでレジストリが解凍されるレジストリ・ディレクトリ内である場合があります。 レジストリはデプロイされていないが、WAR/EARファイルが使用できる場合は、まずWAR/EARファイルを変更してからデプロイします。 ファイルの相対パスは同じですが、PUBLICATION_REGISTRY_HOMEは異なります。

    1. CheckerApiImpl.classを、jarファイルの内部のフォルダcom/systinet/uddi/approval/v3/approverのファイルPUBLICATION_REGISTRY_HOME/app/uddi/services/WASP-INF/lib/approval_staging_v3.jarにコピーします。

    2. Publication Registryを停止しPUBLICATION_REGISTRY_HOME/workディレクトリを削除して、公開レジストリを再起動します。

  3. Oracle Service Registryデータにコンテンツ・チェッカ・クラスの実装を登録します。

    1. 公開レジストリに承認者としてログオンします。コンテンツ・チェッカは、次の手順を実行する承認者に適用されます。

    2. チェッカ・サービスのWSDLドキュメントを公開します。

      新規または既存のビジネス・エンティティに対して、http://<host_name>:<http_port>/uddi/doc/wsdl/approval_checker.wsdlにあるWSDLドキュメントを公開します。Advanced publishingモードを使用し、既存のWSDL portType(tModel名: CheckerApi、tModelのキー: uddi:systinet.com:uddi:service:porttype:approvalchecker)を再使用します。WSDLサービスapproval_checker_SoapServiceが、ビジネス・エンティティに公開されます。

    3. approval_checker_SoapServiceサービスの下にある新しいバインディング・テンプレートのアクセス・ポイントでチェッカを指定します。

      class:接頭辞で始まるアクセス・ポイントの値を入力し、その後に完全修飾クラス名を入力します。たとえば、class:com.systinet.uddi.approval.v3.approver.CheckerApiImplと入力します。

例15 コンテンツ・チェッカの実装

package com.systinet.uddi.approval.v3.approver;

import org.systinet.uddi.InvalidParameterException;
import org.systinet.uddi.approval.checker.v3.CheckerApi;
import org.systinet.uddi.approval.checker.v3.struct.CheckRequest;
import org.systinet.uddi.approval.v3.ApprovalErrorCodes;
import org.systinet.uddi.approval.v3.ApprovalException;
import org.systinet.uddi.approval.v3.struct.ApprovalEntitiesDetail;
import org.systinet.uddi.approval.v3.struct.EntitiesDetail;
import org.systinet.uddi.client.v3.struct.*;

/**
 * Checks if a BE starts with org_
 */
public class CheckerApiImpl implements CheckerApi {


    public DispositionReport checkRequest(CheckRequest checkRequest)
            throws ApprovalException {

        try {
            ResultArrayList resultArrayList = new ResultArrayList();

            ApprovalEntitiesDetail approvalEntitiesDetail =
                checkRequest.getApprovalEntitiesDetail();
            if (approvalEntitiesDetail != null) {
                EntitiesDetail entitiesDetail4Saving =
                    approvalEntitiesDetail.getEntitiesDetail4Saving();
                BusinessEntityArrayList businessEntityArrayList =
                    entitiesDetail4Saving.getBusinessEntityArrayList();
                if (businessEntityArrayList != null) {
                    for (int i = 0; i < businessEntityArrayList.size(); i++) {
                        BusinessEntity businessEntity = businessEntityArrayList.get(i);
                        if (businessEntity != null) {
                            NameArrayList nameArrayList =
                                businessEntity.getNameArrayList();
                            for (int j = 0; j < nameArrayList.size(); j++) {
                                Name name = nameArrayList.get(j);
                                if (name != null && !name.getValue().startsWith("org_")) {
                                  resultArrayList.add(
                                      new Result(ApprovalErrorCodes.INVALID_DATA,
                                            new ErrInfo(ApprovalErrorCodes.getCode(
                                      ApprovalErrorCodes.INVALID_DATA),
                                      "Only business entities whose name start with the " +
                                      "prefix \"org_\" are allowed" +
                                      " (BE [key: " + businessEntity.getBusinessKey() +
                                      ", name: " + name.getValue() + "])"),
                                            KeyType.businessKey));
                                }
                            }
                        }
                    }
                }
            }

            if (resultArrayList.size() > 0) {
                return new DispositionReport(resultArrayList);
            } else {
                return DispositionReport.DISPOSITION_REPORT_SUCCESS;
            }
        } catch (InvalidParameterException e) {
            // should not occur
            throw new ApprovalException(ApprovalErrorCodes.FATAL_ERROR, e.getMessage());
        }

    }
}