ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド
11g リリース1(11.1.1)
B56242-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 Oracle Directory Integration Platform PL/SQL APIリファレンス

この章では、Oracle Directory Provisioning Integration Serviceの登録APIについて説明します。この章では、次の項目について説明します。

13.1 プロビジョニング・ファイルおよびインタフェースのバージョニング

リリース9.0.2では、デフォルトのインタフェース・バージョンは1.1でした。リリース9.0.4および10.1.2.0.0では、インタフェース・バージョンはデフォルトで2.0です。リリース10.1.2.0.1では3つ目のバージョンが追加されました。管理者はこれらのいずれかを使用できます。

13.2 拡張可能なイベント定義の構成

この機能は、発信イベントでのみ使用可能です。プロビジョニング統合サービスがOracle Internet Directoryでの変更を解析し、アプリケーションに対して適切なイベントが生成および伝播されるかどうかを判断できるように、実行時に新しいイベントを定義できます。次に示すイベントは、インストール時に構成のみが行われるイベントです。

イベント定義(エントリ)は、次の属性で構成されます。

これらの属性を持つオブジェクト・クラスはorclODIPProvEventTypeConfigです。すべてのイベント型構成を格納するために、コンテナcn=ProvisioningEventTypeConfig,cn=odi,cn=oracle internet directoryが使用されます。

表13-1に、インストールの一部として事前定義されるイベント定義をリストします。

表13-1 事前定義済のイベント定義

イベント・オブジェクト型 LDAP変更型 イベント基準
ENTRY
ADD
MODIFY
DELETE
objectclass=*
USER
ADD
MODIFY
DELETE
objectclass=interorgperson
objectclass=orcluserv2
IDENTITY
ADD
MODIFY
DELETE
objectclass=interorgperson
objectclass=orcluserv2
GROUP
ADD
MODIFY
DELETE
objectclass=orclgroup
objectclass=groupofuniquenames
SUBSCRPTION
ADD
MODIFY
DELETE
objectclass=orclservicerecepient
SUBSCRIBER
ADD
MODIFY
DELETE
objectclass=orclsubscriber

すべてのイベント定義構成を格納するために、コンテナcn=ProvisioningEventTypeConfig,cn=odi,cn=oracle internet directoryが使用されます。事前定義されたイベント定義のLDAP構成は次のとおりです。

dn: orclODIPProvEventObjectType=ENTRY,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: ENTRY
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=*
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=USER,cn=ProvisioningEventTypeConfig,cn=odi,cn=oracle internet directory
orclODIPProvEventObjectType: USER
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=InetOrgPerson
orclODIPProvEventCriteria: objectclass=orcluserv2
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=IDENTITY,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: IDENTITY
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=inetorgperson
orclODIPProvEventCriteria: objectclass=orcluserv2
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=GROUP,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: GROUP
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=orclgroup
orclODIPProvEventCriteria: objectclass=groupofuniquenames
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=SUBSCRIPTION,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: SUBSCRIPTION
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=orclservicerecepient
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=SUBSCRIBER,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: SUBSCRIBER
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=orclsubscriber
objectclass: orclODIPProvEventTypeConfig

オブジェクト型XYZ(オブジェクト・クラスobjXYZで修飾)の新しいイベントを定義するには、Oracle Internet Directoryに次のエントリを作成します。DIPサーバーはこの新しいイベント定義を認識し、このイベントにサブスクライブするアプリケーションに対し、必要に応じてイベントを伝播します。

dn: orclODIPProvEventObjectType=XYZ,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: XYZ
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=objXYZ
objectclass: orclODIPProvEventTypeConfig

これは、オブジェクト・クラスobjXYZを持つLDAPエントリが追加、変更または削除された場合、DIPによってXYZ_ADDXYZ_MODIFYまたはXYZ_DELETEイベントが関連するアプリケーションに伝播されることを意味します。

13.3 着信イベントおよび発信イベント

アプリケーションは、イベントのサプライヤおよびコンシューマとして登録できます。プロビジョニング・サブスクリプション・プロファイルは、表13-2に示す属性を持ちます。

表13-2 プロビジョニング・サブスクリプション・プロファイルの属性

属性 説明
EventSubscriptions

発信イベントのみ(複数の値を取ります)。

DIPがこのアプリケーションに通知を送信する必要があるイベントです。この文字列の形式は、[USER]GROUP]:[domain_of_interest]:[DELETE|ADD|MODIFY(list_of_attributes_separated_by_comma)]です。

この文字列を異なる値で複数回リストすると、複数の値を指定できます。パラメータを指定しない場合は、デフォルトのUSER:organization_DN:DELETEGROUP:organization_DN:DELETEが使用され、組織識別名に属するユーザーとグループの削除通知が送信されます。

MappingRules

着信イベントのみ(複数の値を取ります)。

アプリケーションおよび修飾フィルタ条件から取得したオブジェクトの型をマップし、このイベントの対象のドメインを判断します。マッピングの形式は次のとおりです。

OBJECT_TYPE: Filter_condition: domain_of_interest

複数の値を指定できます。マッピングEMP:cn=users,dc=example,dc=comでは、取得したオブジェクトの型はEMPです。イベントの対象はドメインcn=users,dc=example,dc=comです。マッピングEMP:l=AMERICA:l=AMER,cn=users,dc=example,dc=comでは、取得したオブジェクトの型はEMPです。イベントの対象はドメインl=AMER,cn=users,dc=example,dc=comです。

permittedOperations

着信イベントのみ(複数の値を取ります)。

アプリケーションがプロビジョニング統合サービスに送信する権限を持つイベントの型を定義します。マッピングの形式は次のとおりです。

Event_Object: affected_domain:operation(attributes, . . . )

マッピングIDENTITY:cn=users,dc=example,dc=com:ADD(*)では、IDENTITY_ADDイベントが指定したドメインに対して許可され、すべての属性も許可されます。マッピングIDENTITY:cn=users,dc=example,dc=com:MODIFY(cn,sn.mail,telephonenumber)では、IDENTITY_MODIFYイベントがリスト内の属性に対してのみ許可されます。その他の属性は暗黙的に無視されます。


13.4 PL/SQL双方向インタフェース(バージョン3.0)

バージョン3.0のPL/SQLインタフェースを使用する前に、次の関連資料を参照してください。

PL/SQLコールバック・インタフェースを使用するには、Oracle Directory Provisioning Integration Serviceがアプリケーション固有のデータベースで起動するPL/SQLパッケージを開発する必要があります。パッケージには任意の名前を選択できますが、サブスクリプション時にパッケージを登録する際は、必ず同じ名前を使用してください。次のPL/SQLパッケージ仕様を使用してパッケージを実装します。

DROP TYPE LDAP_EVENT_LIST_V3;
DROP TYPE LDAP_EVENT_V3;
DROP TYPE LDAP_EVENT_STATUS_LIST_V3;
DROP TYPE LDAP_ATTR_LIST_V3;
DROP TYPE LDAP_ATTR_V3;
DROP TYPE LDAP_ATTR_VALUE_LIST_V3;
DROP TYPE LDAP_ATTR_VALUE_V3;
--------------------------------------------------------------------------------------------------
-- Name: LDAP_ATTR_VALUE_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains values of an attribute. A list of one or
more of this object is passed in any event.
---------------------------------------------------------------------------------------------------
 
CREATE TYPE LDAP_ATTR_VALUES_V3 AS OBJECT (
     attr_value       VARCHAR2(4000),
     attr_bvalue      RAW(2048),
     attr_value_len   INTEGER
);
 
GRANT EXECUTE ON LDAP_ATTR_VALUE_V3 to public;
 
CREATE TYPE LDAP_ATTR_VALUE_LIST_V3 AS TABLE OF LDAP_ATTR_VALUE_V3;
/
GRANT EXECUTE ON LDAP_ATTR_VALUE_LIST_V3 to public;
--------------------------------------------------------------------------------------------------
-- Name: LDAP_ATTR_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains details regarding an attribute. A list of
one or more of this object is passed in any event.
---------------------------------------------------------------------------------------------------
CREATE TYPE LDAP_ATTR_V3 AS OBJECT (
     attr_name        VARCHAR2(256),
     attr_type        INTEGER ,
     attr_mod_op      INTEGER,
     attr_values      LDAP_ATTR_VALUE_LIST_V3
);
 
GRANT EXECUTE ON LDAP_ATTR_V3 to public;
 
CREATE TYPE LDAP_ATTR_LIST_V3 AS TABLE OF LDAP_ATTR_V3;
/
GRANT EXECUTE ON LDAP_ATTR_LIST_V3 to public;
---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains event information plus the attribute List.
---------------------------------------------------------------------------------------------------
 
CREATE TYPE LDAP_EVENT_V3 AS OBJECT (
          event_type  VARCHAR2(32),
          event_id    VARCHAR2(32),
          event_src   VARCHAR2(1024),
          event_time  VARCHAR2(32),
          object_name VARCHAR2(1024),
          object_type VARCHAR2(32),
          object_guid VARCHAR2(32),
          object_dn   VARCHAR2(1024),
          profile_id  VARCHAR2(1024),
          attr_list   LDAP_ATTR_LIST_V3 ) ;
/
 
GRANT EXECUTE ON LDAP_EVENT_V3 to public;
CREATE TYPE LDAP_EVENT_LIST_V3 AS TABLE OF LDAP_EVENT_V3;
/
GRANT EXECUTE ON LDAP_EVENT_LIST_V3 to public;
---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT_STATUS_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains information that is sent by the consumer
of an event to the supplier in response to the actual event.
 ---------------------------------------------------------------------------------------------------
 
CREATE TYPE LDAP_EVENT_STATUS_V3 AS OBJECT (
          event_id     VARCHAR2(32),
          status       VARCHAR2(32),
          status_msg   VARCHAR2(2048),
          object_guid  VARCHAR(32)
) ;
/
 
GRANT EXECUTE ON LDAP_EVENT_STATUS_V3 to public;
CREATE TYPE LDAP_EVENT_STATUS_LIST_V3 AS TABLE OF LDAP_EVENT_STATUS_V3;
/
GRANT EXECUTE ON LDAP_EVENT_STATUS_LIST_V3 to public;
---------------------------------------------------------------------------------------------------
-- Name: LDAP_NTFY
-- DESCRIPTION: This is the interface to be implemented by provisioning integrated
applications to send information to and receive information from the directory.
The name of the package can be customized as needed. The function and procedure
names within this package should not be changed.
 ---------------------------------------------------------------------------------------------------
 
CREATE OR REPLACE PACKAGE LDAP_NTFY AS
 
    -- The Predefined Event Types

    ENTRY_ADD     CONSTANT VARCHAR2 (32) :='ENTRY_ADD';
    ENTRY_DELETE  CONSTANT VARCHAR2 (32) :='ENTRY_DELETE';
    ENTRY_MODIFY  CONSTANT VARCHAR2 (32) :='ENTRY_MODIFY';
 
    USER_ADD     CONSTANT VARCHAR2 (32) :='USER_ADD';
    USER_DELETE  CONSTANT VARCHAR2 (32) :='USER_DELETE';
    USER_MODIFY  CONSTANT VARCHAR2 (32) :='USER_MODIFY';
 
    IDENTITY_ADD     CONSTANT VARCHAR2 (32) :='IDENTITY_ADD';
    IDENTITY_DELETE  CONSTANT VARCHAR2 (32) :='IDENTITY_DELETE';
    IDENTITY_MODIFY  CONSTANT VARCHAR2 (32) :='IDENTITY_MODIFY';
 
    GROUP_ADD     CONSTANT VARCHAR2 (32) :='GROUP_ADD';
    GROUP_DELETE  CONSTANT VARCHAR2 (32) :='GROUP_DELETE';
    GROUP_MODIFY  CONSTANT VARCHAR2 (32) :='GROUP_MODIFY';
 
    SUBSCRIPTION_ADD     CONSTANT VARCHAR2(32) :='SUBSCRIPTION_ADD';
    SUBSCRIPTION_DELETE  CONSTANT VARCHAR2(32) :='SUBSCRIPTION_DELETE';
    SUBSCRIPTION_MODI    CONSTANT VARCHAR2(32) :='SUBSCRIPTION_MODIFY';
 
    SUBSCRIBER_ADD     CONSTANT VARCHAR2(32) :='SUBSCRIBER_ADD';
    SUBSCRIBER_DELETE  CONSTANT VARCHAR2(32) :='SUBSCRIBER_DELETE';
    SUBSCRIBER_MODIFY  CONSTANT VARCHAR2(32) :='SUBSCRIBER_MODIFY';
 
    -- The Attribute Type

    ATTR_TYPE_STRING            CONSTANT NUMBER  := 0;
    ATTR_TYPE_BINARY            CONSTANT NUMBER  := 1;
    ATTR_TYPE_ENCRYPTED_STRING  CONSTANT NUMBER  := 2;
 
    -- The Attribute Modification Type

    MOD_ADD      CONSTANT NUMBER  := 0;
    MOD_DELETE   CONSTANT NUMBER  := 1;
    MOD_REPLACE  CONSTANT NUMBER  := 2;
 
    -- The Event dispostions constants
 
    EVENT_SUCCESS            CONSTANT VARCHAR2(32)  :='EVENT_SUCCESS';
    EVENT_IN_PROGRESS        CONSTANT VARCHAR2(32)  :='EVENT_IN_PROGRESS';
    EVENT_USER_NOT_REQUIRED  CONSTANT VARCHAR2(32)  :='EVENT_USER_NOT_REQUIRED';
    EVENT_ERROR              CONSTANT VARCHAR2(32)  :='EVENT_ERROR';
    EVENT_ERROR_ALERT        CONSTANT VARCHAR2(32)  :='EVENT_ERROR_ALERT';
    EVENT_ERROR_ABORT        CONSTANT VARCHAR2(32)  :='EVENT_ERROR_ABORT';
 
    -- The Actual Callbacks
 
    FUNCTION GetAppEvents (events OUT LDAP_EVENT_LIST_V3)
    RETURN NUMBER;
 
    -- Return CONSTANTS
    EVENT_FOUND      CONSTANT NUMBER:= 0;
    EVENT_NOT_FOUND  CONSTANT NUMBER:= 1403;

着信イベントを処理できない場合、プロビジョニング・サーバーはEVENT_ERROR_ALERTステータスを戻し、その結果Oracle Enterprise Managerにトリガーが生成されます。

イベントを処理できるが、そのイベントが処理できないイベントである(たとえば、変更、サブスクライブまたは削除の対象となるユーザーが存在しない)場合、プロビジョニング・サーバーはEVENT_ERRORを戻し、不具合があることをアプリケーションに示します。ステータス・イベントは、再度アプリケーションによって処理されます。

EVENT_ERRORは、ディレクトリ操作ではエラーがなかったことを意味します。その他の理由により、イベントは処理されませんでした。

-- PutAppEventStatus() : DIP Server invokes this callback in the remote Data
base after processing an event it had received using the GetAppEvents()
callback.  For every event received, the DIP server sends the status event
back after processing the event.  This API will NOT be required by the
Oracle Collaboration Suite release 3.0 components.

PROCEDURE PutAppEventStatus (event_status IN LDAP_EVENT_STATUS_LIST_V3);
 
-- PutOIDEvents() : DIP Server invokes this API in the remote Database. DIP
server sends event to applications using this callback. It also expects a status
event object in response as an OUT parameter. This API needs to be implemented
by all the Oracle Collaboration Suite release 3.0 components.

PROCEDURE PutOIDEvents (event         IN  LDAP_EVENT_LIST_V3,
                       event_status  OUT LDAP_EVENT_STATUS_LIST_V3);
 
END LDAP_NTFY;
/

13.5 PL/SQL双方向インタフェース(バージョン2.0)

PL/SQLコールバック・インタフェースを使用するには、プロビジョニング統合サービスがアプリケーション固有のデータベースで起動するPL/SQLパッケージを開発する必要があります。パッケージには任意の名前を選択できますが、サブスクリプション時にパッケージを登録する際は、必ず同じ名前を使用してください。次のPL/SQLパッケージ仕様を使用してパッケージを実装します。

DROP TYPE LDAP_EVENT;
DROP TYPE LDAP_EVENT_STATUS;
DROP TYPE LDAP_ATTR_LIST;
DROP TYPE LDAP_ATTR;
--------------------------------------------------------------------------------
-- Name: LDAP_ATTR
-- Data Type: OBJECT

DESCRIPTION: This structure contains details regarding an attribute. A list of one
--           or more of this object is passed in any event.
---------------------------------------------------------------------------------------------------
CREATE TYPE LDAP_ATTR AS OBJECT (
     attr_name        VARCHAR2(256),
     attr_value       VARCHAR2(4000),
     attr_bvalue      RAW(2048),
     attr_value_len   INTEGER,
     attr_type        INTEGER ,
     attr_mod_op      INTEGER
);

GRANT EXECUTE ON LDAP_ATTR to public;

CREATE TYPE LDAP_ATTR_LIST AS TABLE OF LDAP_ATTR;
/
GRANT EXECUTE ON LDAP_ATTR_LIST to public;

---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains event information plus the attribute
--              list.
---------------------------------------------------------------------------------------------------

CREATE TYPE LDAP_EVENT AS OBJECT (
          event_type  VARCHAR2(32),
          event_id    VARCHAR2(32),
          event_src   VARCHAR2(1024),
          event_time  VARCHAR2(32),
          object_name VARCHAR2(1024),
          object_type VARCHAR2(32),
          object_guid VARCHAR2(32),
          object_dn   VARCHAR2(1024),
          profile_id  VARCHAR2(1024),
          attr_list   LDAP_ATTR_LIST ) ;
/

GRANT EXECUTE ON LDAP_EVENT to public;

---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT_STATUS
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains information that is sent by the
--              consumer of an event to the supplier in response to the
--              actual event.
 ---------------------------------------------------------------------------------------------------

CREATE TYPE LDAP_EVENT_STATUS AS OBJECT (
          event_id          VARCHAR2(32),
          orclguid          VARCHAR(32),
          error_code        INTEGER,
          error_String      VARCHAR2(1024),
          error_disposition VARCHAR2(32)) ;
/

GRANT EXECUTE ON LDAP_EVENT_STATUS to public;

13.6 プロビジョニング・イベント・インタフェース(バージョン1.1)

プロビジョニング統合サービスによって生成されたイベントをコンシュームするためのロジックを開発する必要があります。アプリケーションとプロビジョニング統合サービス間のインタフェースは、表ベースまたはPL/SQLコールバックを使用したものになります。

PL/SQLコールバック・インタフェースを使用するには、プロビジョニング統合サービスがアプリケーション固有のデータベースで起動するPL/SQLパッケージを開発する必要があります。パッケージには任意の名前を選択できますが、サブスクリプション時にパッケージを登録する際は、必ず同じ名前を使用してください。次のPL/SQLパッケージ仕様を使用してパッケージを実装します。

Rem
Rem      NAME
Rem         ldap_ntfy.pks - Provisioning Notification Package Specification.
Rem

DROP TYPE LDAP_ATTR_LIST;
DROP TYPE LDAP_ATTR;

-- LDAP ATTR
----------------------------------------------------------------
--
--  Name        : LDAP_ATTR
--  Data Type   : OBJECT
--  DESCRIPTION : This structure contains details regarding 
--                an attribute. 
--
----------------------------------------------------------------
CREATE TYPE LDAP_ATTR AS OBJECT (                                
     attr_name        VARCHAR2(255),
     attr_value       VARCHAR2(2048),
     attr_bvalue      RAW(2048),
     attr_value_len   INTEGER,
     attr_type        INTEGER  -- (0 - String, 1 - Binary)
     attr_mod_op      INTEGER
);
/
 GRANT EXECUTE ON LDAP_ATTR to public;

-------------------------------------------------------------
--
--  Name        : LDAP_ATTR_LIST
--  Data Type   : COLLECTION
--  DESCRIPTION : This structure contains collection 
--                of attributes.
--
-------------------------------------------------------------
CREATE TYPE LDAP_ATTR_LIST AS TABLE OF LDAP_ATTR;
/
 GRANT EXECUTE ON LDAP_ATTR_LIST to public;

-------------------------------------------------------------------------------
--
--  NAME        : LDAP_NTFY
--  DESCRIPTION : This is a notifier interface implemented by Provisioning System
--                clients to receive information about changes in Oracle Internet
--                Directory. The name of package can be customized as needed.
--                The function names within this package should not be changed.
--
--
-------------------------------------------------------------------------------
CREATE OR REPLACE PACKAGE LDAP_NTFY AS

--
-- LDAP_NTFY data type definitions
--


-- Event Types
USER_DELETE               CONSTANT VARCHAR2(256) := 'USER_DELETE';
USER_MODIFY               CONSTANT VARCHAR2(256) := 'USER_MODIFY';
GROUP_DELETE              CONSTANT VARCHAR2(256) := 'GROUP_DELETE';
GROUP_MODIFY              CONSTANT VARCHAR2(256) := 'GROUP_MODIFY';

-- Return Codes (Boolean)
SUCCESS                   CONSTANT NUMBER  := 1;
FAILURE                   CONSTANT NUMBER  := 0;

-- Values for attr_mod_op in LDAP_ATTR object.
MOD_ADD                   CONSTANT NUMBER  := 0;
MOD_DELETE                CONSTANT NUMBER  := 1;
MOD_REPLACE               CONSTANT NUMBER  := 2;
---------------------------------------------------------------------------------------------------
-- Name: LDAP_NTFY
-- DESCRIPTION: This is the interface to be implemented by Provisioning System
--              clients to send information to and receive information from
--              Oracle Internet Directory. The name of the package can be 
--              customized as needed. The function names within this package 
--              should not be changed.
 ---------------------------------------------------------------------------------------------------

CREATE OR REPLACE PACKAGE LDAP_NTFY AS

13.6.1 事前定義されるイベント型

ENTRY_ADD                CONSTANT VARCHAR2 (32)    := 'ENTRY_ADD';
ENTRY_DELETE             CONSTANT VARCHAR2 (32)    := 'ENTRY_DELETE';
ENTRY_MODIFY             CONSTANT VARCHAR2 (32)    := 'ENTRY_MODIFY';

USER_ADD                 CONSTANT VARCHAR2 (32)    := 'USER_ADD';
USER_DELETE              CONSTANT VARCHAR2 (32)    := 'USER_DELETE';
USER_MODIFY CONSTANT     VARCHAR2(32)              := 'USER_MODIFY';

IDENTITY_ADD             CONSTANT VARCHAR2 (32)    := 'IDENTITY_ADD';
IDENTITY_DELETE          CONSTANT VARCHAR2 (32)    := 'IDENTITY_DELETE';
IDENTITY_MODIFY          CONSTANT VARCHAR2 (32)    := 'IDENTITY_MODIFY';

GROUP_ADD                CONSTANT VARCHAR2 (32)    := 'GROUP_ADD';
GROUP_DELETE             CONSTANT VARCHAR2 (32)    := 'GROUP_DELETE';
GROUP_MODIFY             CONSTANT VARCHAR2 (32)    := 'GROUP_MODIFY';

SUBSCRIPTION_ADD         CONSTANT VARCHAR2(32)     := 'SUBSCRIPTION_ADD';
SUBSCRIPTION_DELETE      CONSTANT VARCHAR2(32)     := 'SUBSCRIPTION_DELETE';
SUBSCRIPTION_MODI        CONSTANT VARCHAR2(32)     := 'SUBSCRIPTION_MODIFY'; 

SUBSCRIBER_ADD           CONSTANT VARCHAR2(32)     := 'SUBSCRIBER_ADD';
SUBSCRIBER_DELETE        CONSTANT VARCHAR2(32)     := 'SUBSCRIBER_DELETE';
SUBSCRIBER_MODIFY        CONSTANT VARCHAR2(32)     := 'SUBSCRIBER_MODIFY';

13.6.2 属性の型

ATTR_TYPE_STRING              CONSTANT NUMBER    := 0;
ATTR_TYPE_BINARY              CONSTANT NUMBER    := 1;
ATTR_TYPE_ENCRYPTED_STRING    CONSTANT NUMBER    := 2;

13.6.3 属性の変更型

MOD_ADD        CONSTANT NUMBER    := 0;
MOD_DELETE     CONSTANT NUMBER    := 1;
MOD_REPLACE    CONSTANT NUMBER    := 2;

13.6.4 イベント処理の定数

EVENT_SUCCESS    CONSTANT VARCHAR2(32)    := 'EVENT_SUCCESS';
EVENT_ERROR      CONSTANT VARCHAR2(32)    := 'EVENT_ERROR';
EVENT_RESEND     CONSTANT VARCHAR2(32)    := 'EVENT_RESEND';

13.6.5 コールバック

コールバックは、通知イベントの送受信のためにプロビジョニング統合サービスによって起動されるファンクションです。オブジェクトのイベントを送信する際は、関連する属性も他の詳細とともに送信できます。属性は属性コンテナのコレクション(配列)として正規化されていない形式で送信されます。属性に値が2つある場合、コレクションに2つの行がある状態で送信されます。

13.6.5.1 GetAppEvent()

Oracle Directory Integration and Provisioningサーバーは、リモート・データベースでこのAPIを起動します。イベントに応答するのはアプリケーションです。Oracle Directory Integration and Provisioningはイベントを処理し、PutAppEventStatus()コールバックを使用して、ステータスを戻します。GetAppEvent()の戻り値は、イベントが戻されたかどうかを示します。

FUNCTION GetAppEvent (event OUT LDAP_EVENT)
RETURN NUMBER;

-- Return CONSTANTS
EVENT_FOUND          CONSTANT NUMBER  := 0;
EVENT_NOT_FOUND      CONSTANT NUMBER  := 1403;

イベントを処理できない(LDAPエラーが発生した)場合、プロビジョニング・サーバーはEVENT_RESENDを戻します。GetAppEvent()が再度起動されたときに、アプリケーションはそのイベントを再送する必要があります。

イベントを処理できるが、そのイベントが処理できないイベントである(たとえば、変更、サブスクライブまたは削除の対象となるユーザーが存在しない)場合、プロビジョニング・サーバーはEVENT_ERRORを戻し、不具合があることをアプリケーションに示します。イベントの再送は不要です。このイベントはアプリケーションによって処理されます。

前述のEVENT_RESENDEVENT_ERRORの違いに注意してください。EVENT_RESENDの場合、イベントを適用することはできたがサーバーではできなかったことを意味します。そのため、再度イベントを取得すると正常に処理されます。

EVENT_ERRORは、ディレクトリ操作の実行中にはエラーはなかったが、その他の理由でイベントが処理されなかったことを意味します。

13.6.5.2 PutAppEventStatus()

Oracle Directory Integration and Provisioningサーバーは、GetAppEvent()コールバックを使用して受信したイベントを処理した後、リモート・データベースでこのコールバックを起動します。受信した各イベントについて、Oracle Directory Integration and Provisioningサーバーはイベントを処理した後、イベントのステータスを戻します。

PROCEDURE PutAppEventStatus (event_status IN LDAP_EVENT_STATUS);

13.6.5.3 PutOIDEvent()

Oracle Directory Integration and Provisioningサーバーは、リモート・データベースでこのAPIを起動します。Oracle Directory Integration Serverはこのコールバックを使用して、アプリケーションにイベントを送信します。また、OUTパラメータとして、イベント・ステータス・オブジェクトが戻されることを想定します。有効なイベント・ステータス・オブジェクトが戻されない場合、またはRESENDの場合、Oracle Directory Integration and Provisioningサーバーはイベントを再送します。EVENT_ERRORの場合、サーバーはイベントを再送しません。

PROCEDURE PutOIDEvent (event  IN  LDAP_EVENT,   event_status  OUT LDAP_EVENT_STATUS);
END LDAP_NTFY;
/