この項では、コンテンツ・チェッカの作成方法について説明します。コンテンツ・チェッカによって、データをプログラムでチェックする承認機能が承認者に提供されます。この項では、承認プロセスについて十分理解していることが前提となります。承認プロセスについては、次の項を参照してください。
「ユーザーズ・ガイド」の「Oracle Service Registryの承認プロセス」
「管理者ガイド」の「承認プロセスの原則」
次に、コンテンツ・チェッカを作成してデプロイする方法の例を示します。この例では、各ビジネス・エンティティ名を接頭辞org_で開始するというルールが承認者によって設定されます。このルールを満たしていないデータを承認(検出レジストリにコピー)することはできません。 コンテンツ・チェッカは、Oracle Service Registryコンソールの「Approve request」ページで、承認者が「Approve」ボタンを押すと実行されます。
このオプションのコンテンツ・チェックを設定するには、次の手順を実行します。
クラスorg.systinet.uddi.approval.checker.v3.CheckerApiを実装するクラスを作成します。
実装クラスをOracle Service Registryにデプロイします。
コンテンツ・チェッカ・クラスの実装をOracle Service Registryデータに登録します。
次に、各手順の詳細について説明します。
org.systinet.uddi.approval.checker.v3.CheckerApiを実装するクラスを作成します。
例15に示すように、コンテンツ・チェッカ・クラスを作成します。
CheckerApiImpl.javaをコンパイルし、jarをディレクトリPUBLICATION_REGISTRY_HOME/distからクラス・パスに追加します。
実装クラスをOracle Service Registryにデプロイします。
![]() | 注意 |
---|---|
アプリケーション・サーバーにデプロイする場合は、これらが使用される場所に変更を加える必要があります。 これは、インストール・ディレクトリ内ではなく、アプリケーション・サーバーでレジストリが解凍されるレジストリ・ディレクトリ内である場合があります。 レジストリはデプロイされていないが、WAR/EARファイルが使用できる場合は、まずWAR/EARファイルを変更してからデプロイします。 ファイルの相対パスは同じですが、PUBLICATION_REGISTRY_HOMEは異なります。 |
CheckerApiImpl.classを、jarファイルの内部のフォルダcom/systinet/uddi/approval/v3/approverのファイルPUBLICATION_REGISTRY_HOME/app/uddi/services/WASP-INF/lib/approval_staging_v3.jarにコピーします。
Publication Registryを停止しPUBLICATION_REGISTRY_HOME/workディレクトリを削除して、公開レジストリを再起動します。
Oracle Service Registryデータにコンテンツ・チェッカ・クラスの実装を登録します。
公開レジストリに承認者としてログオンします。コンテンツ・チェッカは、次の手順を実行する承認者に適用されます。
チェッカ・サービスの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が、ビジネス・エンティティに公開されます。
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()); } } }