Virtual member manager は、 動的モデルまたは静的モデルのいずれかを使用するように構成されています。 実行時に新しいエンティティー・タイプとプロパティー・タイプを作成して、新しいエンティティー・タイプに既存のプロパティー・タイプまたは新しいプロパティー・タイプを追加できます。
Virtual member manager の createSchema API を呼び出して新しいエンティティー・タイプ、新しいプロパティー・タイプを作成し、Virtual member manager を再始動せずに、実行時に既存のプロパティー・タイプまたは新しいプロパティー・タイプを、新しいエンティティー・タイプに追加する必要があります。すぐに使用可能な LDAP アダプターと DB アダプターは、両方ともこのタイプのプロシージャーをサポートします。 この例では、Virtual member manager の組み込みエンティティー・タイプ PersonAccount から拡張される ContactPerson という新しいエンティティー・タイプを作成します。 また、cellPhone という新しいプロパティー・タイプを作成し、このプロパティー・タイプを、このエンティティー・タイプに追加します。 この例では LDAP アダプターを使用します。
以下を行ってください。
クライアント側では、活動中の Virtual member manager アプリケーションが、ローカル・サービス・プロバイダーを通じて Virtual member manager の createSchema API を呼び出します。 ローカル・サービス・プロバイダーは、この呼び出しでスキーマが変更され、createSchema API 呼び出しの完了後にローカル・スキーマ (ECore) が更新されることを検出します。
サーバー側では、スキーマ・マネージャーがクライアントから API 呼び出しを受け取ります。 スキーマ・マネージャーはまず、新しいエンティティー・タイプとプロパティー・タイプが既に存在しているかどうかを調べ、存在している場合には例外をスローします。 次いでスキーマ・マネージャーは、名前空間 URI (http://www.yourco.com/wim/yourext) の新しい ECore モデル (EPackage) を作成します (まだ存在していない場合)。 次に、新しいエンティティー・タイプとプロパティー・タイプのスキーマを、メモリー内の ECore モデルに追加します。
<?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>
次に、スキーマ・マネージャーは構成マネージャーを呼び出します。<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>
次に、スキーマ・マネージャーはリポジトリー・マネージャーを呼び出します。少なくとも 1 つのリポジトリー・アダプターが新しいエンティティーの作成をサポートしていて、OperationNotSupportedException をスローしなかった場合は、Virtual member manager が出力データ・グラフでこれらのリポジトリーのリポジトリー ID を戻します。
クライアント側では、createSchema API 呼び出しが戻されると、ローカル・サービス・プロバイダーが getEPackages API を呼び出して最新のスキーマを取得します。 ローカル・サービス・プロバイダーは、このスキーマをクライアント JVM に再登録します。 活動中のアプリケーションは、Virtual member manager の create API を呼び出して、 タイプ ContactPerson のエンティティーをプロパティー cellPhone と一緒に作成できます。 Virtual member manager を再始動しなくても、スキーマの変更はアクティブになります。