動的および静的モデル: 実行時に新しいエンティティーとプロパティーを作成する

Virtual member manager は、 動的モデルまたは静的モデルのいずれかを使用するように構成されています。 実行時に新しいエンティティー・タイプとプロパティー・タイプを作成して、新しいエンティティー・タイプに既存のプロパティー・タイプまたは新しいプロパティー・タイプを追加できます。

このタスクについて

Virtual member manager の createSchema API を呼び出して新しいエンティティー・タイプ、新しいプロパティー・タイプを作成し、Virtual member manager を再始動せずに、実行時に既存のプロパティー・タイプまたは新しいプロパティー・タイプを、新しいエンティティー・タイプに追加する必要があります。すぐに使用可能な LDAP アダプターと DB アダプターは、両方ともこのタイプのプロシージャーをサポートします。 この例では、Virtual member manager の組み込みエンティティー・タイプ PersonAccount から拡張される ContactPerson という新しいエンティティー・タイプを作成します。 また、cellPhone という新しいプロパティー・タイプを作成し、このプロパティー・タイプを、このエンティティー・タイプに追加します。 この例では LDAP アダプターを使用します。

以下を行ってください。

手順

  1. 基礎となるアダプターに LDAP アダプターが含まれている場合は、新しいプロパティー・タイプの対応する LDAP 属性スキーマが LDAP サーバーで定義され、エンティティー・タイプの LDAP オブジェクト・クラスによって含まれます。 Virtual member manager は、LDAP サーバーで LDAP スキーマを作成および更新する機能を備えていません。 この例では、オブジェクト・クラス eContactPerson と属性 cellularTelephoneNumber を作成する必要があります (まだ定義されていない場合)。

    基礎となるアダプターに DB アダプターが含まれている場合は、特に準備を必要としません。

  2. クライアント側で、新しいプロパティー・タイプを作成するデータ・グラフを構成します。

    新しいエンティティー・タイプの作成にはデータ・オブジェクト EntitySchema が使用されます。また、新しいプロパティー・タイプの作成にはデータ・オブジェクト PropertySchema が使用されます。 いずれのデータ・オブジェクトも、新しいエンティティー・タイプとプロパティー・タイプを作成する名前空間 URI を指定する必要があります。 新しいエンティティー・タイプは、その拡張元である親エンティティー・タイプを指定する必要があります。

    いずれのデータ・オブジェクトも、スキーマ情報のほかに、Virtual member manager および基礎となるアダプター (LDAP アダプター) が新しいエンティティー・タイプとプロパティー・タイプをサポートするために必要な構成情報を指定します。 例えば、この新しいエンティティーを Virtual member manager の構成 XML ファイル (wimconfig.xml) に追加するには、 デフォルトの親と RDN プロパティーが必要です。 レルムに定義されているデフォルトの親は、構成マネージャーを通じて作成されます。 LDAP アダプターは、新しいエンティティーを対応する LDAP オブジェクト・クラスにマップするために、属性 objectClasses と objectClassForCreate を必要とします。 新しいプロパティーの場合は、LDAP アダプターが対応する LDAP 属性の名前を必要とします。この名前はプロパティー名と異なることがあります。 名前が異なる場合は、LDAP 属性構成を追加し、対応する Virtual member manager プロパティーの名前を指定する必要があります。これをコマンド行インターフェースを使用して構成する方法については、WebSphere Application Server インフォメーション・センターの「AdminTask オブジェクトの IdMgrRepositoryConfig コマンド・グループ」で、addIdMgrLDAPAttr コマンドについて参照してください。

    次に、サンプル・データ・グラフを示します。 エンティティー ContactPerson のスキーマを定義するために要素 entitySchema が使用されます。 要素 entityConfig には、エンティティー・タイプに必要な構成情報が含まれています。 例えば、要素 actionNotAllow は、このタイプのエンティティーを削除できないことを指定するために使用されます。 要素 propertySchema は、プロパティー cellPhone のスキーマを定義するために使用されます。
    <?xml version="1.0" encoding="UTF-8"?>
    <sdo:datagraph xmlns:sdo="commonj.sdo"
        xmlns:wim="http://www.ibm.com/websphere/wim">
      <wim:Root>
        <wim:schema>
          <wim:entitySchema entityName="ContactPerson" 
                            nsPrefix="yourext" 
                            nsURI="http://www.yourco.com/wim/yourext"
              parentEntityName="PersonAccount">
            <wim:entityConfiguration defaultParent="cn=users,dc=yourco,dc=com" 
                                     rdnProperty="uid">
              <wim:actionNotAllow actionName="delete"/>
              <wim:metaData name="objectClasses">
                <wim:values>eContactPerson</wim:values>
              </wim:metaData>
              <wim:metaData name="objectClassesForCreate">
                <wim:values>eContactPerson</wim:values>
                <wim:values>inetOrgPerson</wim:values>
              </wim:metaData>
              <wim:metaData name="rdnProperties">
                <wim:values>uid</wim:values>
              </wim:metaData>
            </wim:entityConfiguration>
          </wim:entitySchema>
          <wim:propertySchema nsURI="http://www.yourco.com/wim/yourext"
                              dataType="STRING" 
                              multiValued="true" 
                              propertyName="cellPhone">
            <wim:applicableEntityTypeNames>yourext:ContactPerson</wim:applicableEntityTypeNames>
          </wim:propertySchema>
        </wim:schema>
      </wim:Root>
    </sdo:datagraph>
    注: propertySchema データ・オブジェクトと extensionPropertySchema データ・オブジェクトについて詳しくは、プログラミングの前提条件のトピックにあるプロパティー・スキーマの拡張のセクションを参照してください。 また、WebSphere Application Server インフォメーション・センターの「 フェデレーテッド・リポジトリーリポジトリー構成におけるプロパティー拡張リポジトリーの構成」も参照してください。

タスクの結果

クライアント側では、活動中の Virtual member manager アプリケーションが、ローカル・サービス・プロバイダーを通じて Virtual member manager の createSchema API を呼び出します。 ローカル・サービス・プロバイダーは、この呼び出しでスキーマが変更され、createSchema API 呼び出しの完了後にローカル・スキーマ (ECore) が更新されることを検出します。

サーバー側では、スキーマ・マネージャーがクライアントから API 呼び出しを受け取ります。 スキーマ・マネージャーはまず、新しいエンティティー・タイプとプロパティー・タイプが既に存在しているかどうかを調べ、存在している場合には例外をスローします。 次いでスキーマ・マネージャーは、名前空間 URI (http://www.yourco.com/wim/yourext) の新しい ECore モデル (EPackage) を作成します (まだ存在していない場合)。 次に、新しいエンティティー・タイプとプロパティー・タイプのスキーマを、メモリー内の ECore モデルに追加します。

スキーマ・マネージャーは、新しいエンティティー・タイプとプロパティー・タイプのスキーマを、wimxmlextension.xml に追加します。 このファイルが存在しない場合は、新しいファイルが作成されます。 次に、この操作が完了した後の wimxmlextension.xml の内容サンプルを示します。
注: 構成情報は、この XML ファイルには書き込まれません。
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
    xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:schema>
    <wim:entitySchema nsPrefix="yourext" 
                      nsURI="http://www.yourco.com/wim/yourext"
                      entityName="ContactPerson" 
                      parentEntityName="PersonAccount"/>
    <wim:propertySchema nsURI="http://www.yourco.com/yourext" 
                        dataType="STRING" 
                        multiValued="true"
                        propertyName="cellPhone">
      <wim:applicableEntityTypeNames>ContactPerson</wim:applicableEntityTypeNames>
    </wim:propertySchema>
  </wim:schema>
</sdo:datagraph>
次に、スキーマ・マネージャーは構成マネージャーを呼び出します。
構成マネージャーは、新しいタイプの構成情報を、Virtual member manager の構成 XML ファイル (wimconfig.xml) に追加します。 次に、この操作が完了した後で、この新しいエンティティー・タイプ ContactPerson のために wimconfig.xml に追加されたセクションを示します。
<config:supportedEntityTypes defaultParent="cn=users,dc=yourco,dc=com" 
                             name="yourext:ContactPerson">

      <config:rdnProperties>uid</config:rdnProperties>
    </config:supportedEntityTypes>

<config:repositories xsi:type="config:LdapRepositoryType" ...>

      <config:EntityTypesNotAllowDelete>yourext:ContactPerson</config:EntityTypesNotAllowDelete>

      <config:ldapEntityTypes name="yourext:ContactPerson">
        <config:rdnAttributes name="uid"/>
        <config:objectClasses>eContactPerson</config:objectClasses>
        <config:objectClassesForCreate>eContactPerson</config:objectClassesForCreate>
        <config:objectClassesForCreate>inetOrgPerson</config:objectClassesForCreate>
      </config:ldapEntityTypes>
    </config:repositories>
次に、スキーマ・マネージャーはリポジトリー・マネージャーを呼び出します。
リポジトリー・マネージャーは、すべてのアダプターの createSchema SPI メソッドを呼び出します。 次に、スキーマの作成をサポートするアダプターが、新しいスキーマのサポートに必要な操作を実行します。 例えば、LDAP アダプターはキャッシュをリフレッシュして、変更をスキーマと構成に反映させます。 DB アダプターは、データベースに新しいエンティティーとプロパティーのスキーマを作成し、キャッシュをリフレッシュします。
注: スキーマの作成をサポートしないアダプター (例えば、実行時に新しいタイプの作成をサポートしないファイル・アダプター) は、OperationNotSupportedException をスローします。

少なくとも 1 つのリポジトリー・アダプターが新しいエンティティーの作成をサポートしていて、OperationNotSupportedException をスローしなかった場合は、Virtual member manager が出力データ・グラフでこれらのリポジトリーのリポジトリー ID を戻します。

クライアント側では、createSchema API 呼び出しが戻されると、ローカル・サービス・プロバイダーが getEPackages API を呼び出して最新のスキーマを取得します。 ローカル・サービス・プロバイダーは、このスキーマをクライアント JVM に再登録します。 活動中のアプリケーションは、Virtual member manager の create API を呼び出して、 タイプ ContactPerson のエンティティーをプロパティー cellPhone と一緒に作成できます。 Virtual member manager を再始動しなくても、スキーマの変更はアクティブになります。



利用条件 | フィードバック