动态和静态模型:在运行时创建新的实体和属性

Virtual member manager 配置为使用动态模型或静态模型。您可在运行时创建新实体类型和新属性类型,并将现有或新属性类型添加到新实体类型。

关于此任务

您需要调用 virtual member manager createSchema API 以创建新实体类型和新属性类型,并在运行时将现有或新属性类型添加到新实体类型,而无需重新启动 virtual member manager。 现成可用的 LDAP 适配器和数据库适配器均支持这一类型的过程。对于此示例,您希望创建一个名为 ContactPerson 的新实体类型,其扩展自 virtual member manager 内置实体类型 PersonAccount。您还希望创建名为 cellPhone 的新属性类型,并将此属性类型添加到此实体类型。此示例使用 LDAP 适配器。

执行以下步骤:

过程

  1. 如果底层适配器包含 LDAP 适配器,请确保新属性类型的相应 LDAP 属性模式已在 LDAP 服务器中定义,并且包含在实体类型的 LDAP 对象类中。 Virtual member manager 不提供用于在 LDAP 服务器上创建和更新 LDAP 模式的功能。在此示例中,需要创建对象类 eContactPerson 和属性 cellularTelephoneNumber(如果未预定义这两者)。

    如果底层适配器包括数据库适配器,那么无需额外的准备工作。

  2. 在客户机端上,构建一个数据图以创建新属性类型。

    数据对象 EntitySchema 用于创建新实体类型,数据对象 PropertySchema 用于创建新属性类型。这两个数据对象都需要指定要在其中创建新的实体和属性类型的名称空间 URI。新实体类型需要指定其扩展自的父实体类型。

    除了模式信息之外,这两个数据对象都会指定 virtual member manager 和底层适配器(LDAP 适配器)支持新实体类型和属性类型所需的配置信息。例如,需要缺省父级和 RDN 属性以将这个新实体添加到 virtual member manager 配置 XML 文件 (wimconfig.xml)。将通过配置管理器来创建领域中定义的缺省父级。LDAP 适配器需要属性 objectClasses 和 objectClassForCreate 以将新实体映射到相应的 LDAP 对象类。对于新属性,LDAP 适配器需要相应 LDAP 属性的名称,该名称可能不同于属性名。如果这两者不同,那么您必须添加 LDAP 属性配置并指定相应 virtual member manager 特性名的名称。有关使用命令行界面配置此内容的信息,请阅读 WebSphere Application Server 信息中心中 AdminTask 对象的 IdMgrRepositoryConfig 命令组中的 addIdMgrLDAPAttr 命令。

    以下是一个样本数据图。元素 entitySchema 用于定义实体 ContactPerson 的模式。元素 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)。 以下是在此操作完成之后,在 wimconfig.xml 中为这一新实体类型 ContactPerson 添加的部分。
<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 适配器刷新高速缓存以反映模式和配置中的更改。 数据库适配器在数据库中创建新的实体和属性的模式,并刷新高速缓存。
注: 不支持创建模式的适配器(例如,不支持在运行时创建新类型的文件适配器)将抛出 OperationNotSupportedException。

如果至少一个存储库适配器支持创建新实体并且没有抛出 OperationNotSupportedException,那么 virtual member manager 将在输出数据图中返回这些存储库的存储库标识。

在客户机端,返回 createSchema API 调用之后,本地服务提供程序将调用 getEPackages API 以检索最新模式。本地服务提供程序将在客户机 JVM 中注册模式。在用应用程序可调用 virtual member manager 的 create API 来创建 ContactPerson 类型的新实体,且带有属性 cellPhone。Virtual member manager 不需要重新启动即可激活模式更改。



使用条款 | 反馈