Código de ejemplo para crear un nuevo tipo de entidad extendido en el espacio de nombres predeterminado

Utilice el fragmento de código y los gráficos de datos para crear un tipo de entidad, que se extiende desde un tipo de entidad incorporado, en el espacio de nombres predeterminado.

En este fragmento de código de ejemplo se incluyen los pasos siguientes:

  1. Cree el esquema en el espacio de nombres predeterminado para un nuevo tipo de entidad, PersonAccountExt, que se extiende desde el tipo de entidad incorporado PersonAccount.
  2. Cree una entidad person1 del tipo de entidad PersonAccountExt.
  3. Añada una nueva propiedad, HomePhone, al tipo de entidad que se acaba de crear, PersonAccountExt, y correlacione la nueva propiedad HomePhone con el atributo LDAP primaryOwnerContact.
  4. Añada la propiedad HomePhone con el valor a la entidad person1.
  5. Verifique que la propiedad HomePhone se ha añadido a la entidad person1.

Requisitos previos

Asegúrese de leer la información y completar los pasos que se describen en el tema Requisitos previos de programación, incluida la sección Ampliación del esquema de propiedad, que contiene información sobre los objetos de datos propertySchema y extensionPropertySchema e indica la sintaxis válida para los tipos de datos de propiedad.

Añada también la siguiente sentencia import a la clase:
import com.ibm.websphere.wim.exception.SchemaAlreadyExistException;

Asegúrese de que se haya configurado un depósito LDAP en la configuración de los depósitos federados. Para obtener información consulte el tema Configuración de Lightweight Directory Access Protocol en una configuración de depósito federado en el Information Center de WebSphere Application Server.

Código de ejemplo

Añada el siguiente fragmento de código al código de aplicación y sustituya las variables por los valores reales que desea utilizar.

/**
 * Este método usa la API de extensión de esquema para añadir una nueva entidad
 * que se extiende desde una entidad existente de virtual member manager.
 */
public static void testRunTimeAddNewEntity() 
{
    // Crear esquema para nuevo tipo de entidad
    addEntityPersonAccountExt();
    // Crear entidad de nuevo tipo de entidad
    createPersonAccountExt();
    // Añadir una propiedad 'HomePhone' a 'PersonAccountExt' y
    // correlacionarla con el atributo 'primaryOwnerContact' en LDAP
    addPropertyToPersonAccountExt();
    // Añadir 'HomePhone' a 'person1'
    addHomePhoneForPersonAccountExt();
    // Buscar la persona
    searchPersonAcctExt();
}

/**
 * Método para crear el esquema para 'PersonAccountExt' en el espacio de nombres predeterminado
 */
@SuppressWarnings("unchecked")
private static void addEntityPersonAccountExt() 
{
    try
    {
        System.out.println("\nCLIENT: Creating schema for 'PersonAccountExt' . . . ");
        DataObject root = SDOHelper.createRootDataObject();
        // Crear un objeto de esquema bajo root
        DataObject dynaSchemaDO = root.createDataObject(SchemaConstants.DO_SCHEMA);
        // Crear objeto de esquema de tipo de entidad nuevo. Este objeto incluirá la definición de esquema para
        // el tipo de entidad 'PersonAccountExt' que queremos crear.
        DataObject entitySchemaDO = dynaSchemaDO.createDataObject(SchemaConstants.DO_ENTITY_SCHEMA);
        // Establecer el espacio de nombres para el nuevo tipo de entidad
        entitySchemaDO.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
        // Establecer el nombre de tipo de entidad
        entitySchemaDO.set(SchemaConstants.PROP_ENTITY_NAME, "PersonAccountExt");
        // Establecer el nombre de tipo de entidad padre.
        entitySchemaDO.set(SchemaConstants.PROP_PARENT_ENTITY_NAME, Service.DO_PERSON_ACCOUNT);
        // Crear un objeto de datos de configuración de entidad
        // Este objeto de datos define los detalles del depósito
        DataObject entConfigDO = entitySchemaDO.createDataObject(SchemaConstants.DO_ENTITY_CONFIGURATION);
        // Establecer el padre predeterminado en la entrada base del LDAP configurado.
        entConfigDO.set(SchemaConstants.PROP_DEFAULT_PARENT, "dc=yourco,dc=com");
        // Establecer la propiedad de RDN (inicio de sesión) en uid.
        entConfigDO.set(SchemaConstants.PROP_RDN_PROPERTY, "uid");
        // Establecer el ID de depósito.
        DataObject reposConfigInfo1DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
        reposConfigInfo1DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_OBJECTCLASSES);
        reposConfigInfo1DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
        // Establecer las clases de objeto para el objeto añadido. Estas clases son del esquema LDAP.
        List objReadValues = reposConfigInfo1DO.getList(SchemaConstants.PROP_VALUES);
        objReadValues.add("inetorgperson");
        objReadValues.add("organizationalperson");
        objReadValues.add("person");
        // Establecer la propiedad de RDN para el depósito
        DataObject reposConfigInfo3DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
        reposConfigInfo3DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_RDN_ATTRIBUTES);
        reposConfigInfo3DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
        List values = reposConfigInfo3DO.getList(SchemaConstants.PROP_VALUES);
        values.add("uid");
        System.out.println("Create Schema input datagraph -> " + printDO(root));
        // Invocar la API de creación de esquema
        DataObject outRoot = service.createSchema(root);
        System.out.println("Create Schema output datagraph -> " + printDO(outRoot));
        System.out.println("\nCLIENT: new entity type is created.");
    }
    catch (SchemaAlreadyExistException e) 
    {
        System.out.println("CLIENT: entity type already exists.\n\n");
    }
    		catch(Exception e)
    {
        		e.printStackTrace();
    }
}

/**
 *  Método para crear una entidad del tipo de entidad 'PersonAccountExt'.
 */
private static void createPersonAccountExt() 
{
    //Crear Person 1
    try
    {
        System.out.println("\nCLIENT: Creating Person 1 . . .");
        			//Obtiene un gráfico de datos vacío de Person desde el servicio de WIM.
        DataObject root = SDOHelper.createRootDataObject();
        // Crear un objeto de datos de tipo de entidad "PersonAccount" debajo de root
        DataObject person = root.createDataObject(SchemaConstants.DO_ENTITIES, 
                Service.WIM_NS_URI, "PersonAccountExt");
        // Establezca los valores para los atributos necesarios, uid, cn y sn
        person.set("uid", "person1");
        person.set("cn", "Person 1");
        person.set("sn", "Person1LastName");
        System.out.println("Create PersonAccountExt input datagraph -> " + printDO(root));
        // Invocar la API de creación para crear la entidad de cuenta de persona definida previamente
        root = service.create(root); 
        System.out.println("Create PersonAccountExt output datagraph -> " + printDO(root));
        System.out.println("CLIENT: Person 1 has been created. \n\n");
    }
    		catch(Exception e)
    {
        		e.printStackTrace();
    }
}

/**
 *  Método para añadir una propiedad 'HomePhone' al tipo de entidad 'PersonAccountExt'
 *  y correlacionarla con el atributo 'primaryOwnerContact' en LDAP
 */
@SuppressWarnings("unchecked")
private static void addPropertyToPersonAccountExt() 
    {
    try
    {
        DataObject root = SDOHelper.createRootDataObject();
        // Crear un nuevo objeto "schema" bajo root
        // Este objeto contendrá los detalles de las modificaciones de esquema que deben realizarse
        DataObject schema = root.createDataObject(SchemaConstants.DO_SCHEMA);
        // Crear un objeto de datos de esquema de propiedad debajo del objeto de esquema creado antes
        DataObject propertySchema = schema.createDataObject(SchemaConstants.DO_PROPERTY_SCHEMA);
        // Establecer el nombre de propiedad
        propertySchema.setString(SchemaConstants.PROP_PROPERTY_NAME, "HomePhone");
        // Establecer el espacio de nombres de propiedad como espacio de nombres predeterminado
        propertySchema.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
        // Especificar que la propiedad no es de múltiples valores
        propertySchema.setBoolean(SchemaConstants.PROP_MULTI_VALUED, false);
        // Especificar el tipo de datos de la propiedad como String
        propertySchema.setString(SchemaConstants.PROP_DATA_TYPE, SchemaConstants.DATA_TYPE_STRING);
        // Especificar los tipos de entidad aplicables para esta propiedad
        // La propiedad se añadirá para todos los nombres de tipo de entidad especificados en la lista
        propertySchema.getList(SchemaConstants.PROP_APPLICABLE_ENTITY_TYPE_NAMES)
                .add("PersonAccountExt");
        System.out.println("Add property input datagraph " + printDO(root));
        // Invocar la API de creación de esquema
        root = service.createSchema(root);
        System.out.println("Add property output datagraph " + printDO(root));
        // Correlacionar la propiedad 'HomePhone' creada anteriormente con el atributo LDAP 'primaryOwnerContact'
        Hashtable configData = new Hashtable();
        // Especificar el depósito para el que debe correlacionarse esta propiedad
        configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_REPOS_ID, "LDAP1");
        DataObject configProvider = SDOHelper.createConfigProviderDataObject();
        // Especificar el tipo de depósito como "Ldap"
        DataObject ldapRepos = SDOHelper.createConfigRepositoryDataObject(configProvider,
                ConfigConstants.CONFIG_DO_LDAP_REPOSITORY_TYPE);
        // Proporcionar el nombre de propiedad y el nombre de atributo que deben correlacionarse entre sí
        DataObject attrConfig = ldapRepos.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTE_CONFIGUARTION);
        DataObject attr = attrConfig.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTES);
        attr.setString(ConfigConstants.CONFIG_PROP_PROPERTY_NAME, "HomePhone");
        attr.setString(ConfigConstants.CONFIG_PROP_NAME, "primaryOwnerContact");
        configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_PROP_CONFIG, attr);
        // Invocar la actualización de configuración dinámica
        // Esta API sólo actualiza la correlación para esta sesión, esta correlación no es persistente
        service.dynamicUpdateConfig(DynamicConfigConstants.DYNA_CONFIG_EVENT_ADD_PROPERTY_CONFIG, 
                configData);    }
    		catch(Exception e)
    {
e.printStackTrace(); 
    }
}  

/**
  * Añadir 'HomePhone' a la entidad 'person1' creada previamente en LDAP
  */
private static void addHomePhoneForPersonAccountExt() 
{
    try
    {
    DataObject root = SDOHelper.createRootDataObject();
    DataObject entity = SDOHelper.createEntityDataObject(root, null, "PersonAccountExt");
    // Establecer el nombre exclusivo para el objeto para el que debe establecerse el valor 'HomePhone'
    entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME, 
            "uid=person1,dc=yourco,dc=com");
    // Especificar el valor de 'HomePhone'
    entity.set("HomePhone", "020-2341123");
    System.out.println("Set property input datagraph -> " + printDO(root));
    // Invocar la API de actualización de VMM
    root = service.update(root);    System.out.println("Set property output datagraph -> " + printDO(root));
    }
    		catch(Exception e)
    {
        		e.printStackTrace();
    }
}

/**
  * Buscar 'PersonAccountExt'
  */
@SuppressWarnings("unchecked")
private static void searchPersonAcctExt() 
{
    try
    {
        DataObject root = SDOHelper.createRootDataObject();
        // Crear un objeto de datos de control de búsqueda
        DataObject searchCtrl = SDOHelper.createControlDataObject(root, null, 
                SchemaConstants.DO_SEARCH_CONTROL);
        // Especificar las propiedades que deben obtenerse para todas las entradas coincidentes
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("HomePhone");
        // Especificar los criterios de coincidencia como la expresión de búsqueda
        searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccountExt'");
        // Invocar la API de búsqueda
        root = service.search(root);        System.out.println("Output datagraph -> " + printDO(root));
        // Repetir los resultados de búsqueda
        printIdentifiers(root);
    }
    		catch(Exception e)
    {
        		e.printStackTrace();
    }
}
Nota: En el código de ejemplo, se utiliza la API dynamicUpdateConfig() para añadir la configuración de propiedades para correlacionar una propiedad de virtual member manager con un atributo LDAP. Cuando se realizan actualizaciones de configuración durante la ejecución mediante la API dynamicUpdateConfig(), sólo se actualiza la configuración en la memoria y el archivo de configuración no se actualiza, de modo que los cambios no son persistentes. Para que los cambios en la configuración sean persistentes, utilice el mandato wsadmin addIdMgrLDAPAttr para correlacionar atributos LDAP con propiedades de virtual member manager. Para obtener más información, consulte el tema Grupo de mandatos IdMgrRepositoryConfig para el objeto AdminTask en el Information Center de WebSphere Application Server. Como alternativa, puede correlacionar atributos LDAP con propiedades de virtual member manager utilizando la consola administrativa como se describe en los pasos siguientes:
  1. En la consola administrativa de WebSphere Application Server, pulse Seguridad > Seguridad global.
  2. En Depósito de cuentas de usuarios, seleccione Depósitos federados desde el campo Definiciones de reino disponibles y pulse Configurar.
    Nota: Para configurar un dominio específico en un entorno de dominio de seguridad, pulse Dominios de seguridad >nombre_dominio. En Atributos de seguridad, expanda Reino de usuario y pulse Personalizar para este dominio. Seleccione el tipo de dominio Repositorios federados y, a continuación, pulse Configurar.
  3. En Elementos relacionados, pulse Gestionar repositorios > nombre_depósito.
  4. En el panel que aparece en Propiedades adicionales, pulse Atributos LDAP .
  5. Pulse Añadir y seleccione Soportado en el menú desplegable.
  6. Especifique el nombre de atributo LDAP en el campo Nombre, el nombre de propiedad de virtual member manager en el campo Nombre de propiedad y el tipo de entidad que se aplica a la correlación de atributos en el campo Tipos de entidad. En el caso del ejemplo anterior, debe especificar los siguientes valores:
    • Name: HomePhone
    • Property: primaryOwnerContact
    • Entity types: PersonAccountExt

Gráficos de datos de entrada y salida

Gráfico de datos de entrada para crear un nuevo tipo de entidad extendido:

<?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 nsURI="http://www.ibm.com/websphere/wim"
          entityName="PersonAccountExt" parentEntityName="PersonAccount">
        <wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
          <wim:metaData name="objectClasses" repositoryId="LDAP1">
            <wim:values>inetorgperson</wim:values>
            <wim:values>organizationalperson</wim:values>
            <wim:values>person</wim:values>
          </wim:metaData>
          <wim:metaData name="rdnAttributes" repositoryId="LDAP1">
            <wim:values>uid</wim:values>
          </wim:metaData>
        </wim:entityConfiguration>
      </wim:entitySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de salida posterior a la creación de un nuevo tipo de entidad extendido:

<?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 nsURI="http://www.ibm.com/websphere/wim"
          entityName="PersonAccountExt" parentEntityName="PersonAccount">
        <wim:repositoryIds>LDAP1</wim:repositoryIds>
        <wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
          <wim:metaData name="objectClasses" repositoryId="LDAP1">
            <wim:values>inetorgperson</wim:values>
            <wim:values>organizationalperson</wim:values>
            <wim:values>person</wim:values>
          </wim:metaData>
          </wim:metaData>
          <wim:metaData name="rdnAttributes" repositoryId="LDAP1">
            <wim:values>uid</wim:values>
          </wim:metaData>
        </wim:entityConfiguration>
      </wim:entitySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de entrada para crear una entidad del nuevo tipo de entidad:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccountExt">
      <wim:uid>person1</wim:uid>
      <wim:cn>Person 1</wim:cn>
      <wim:sn>Person1LastName</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de salida posterior a la creación de una entidad del nuevo tipo de entidad:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccountExt">
      <wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
          uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de entrada para crear una nueva propiedad para el nuevo tipo de entidad:

<?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:propertySchema nsURI="http://www.ibm.com/websphere/wim" dataType="String"
          multiValued="false" propertyName="HomePhone">
        <wim:applicableEntityTypeNames>wim:PersonAccountExt</wim:applicableEntityTypeNames>
      </wim:propertySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de salida posterior a la creación de una propiedad para el nuevo tipo de entidad:

<?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:propertySchema nsURI="http://www.ibm.com/websphere/wim" dataType="String"
          multiValued="false" propertyName="HomePhone">
        <wim:repositoryIds>LDAP1</wim:repositoryIds>
        <wim:applicableEntityTypeNames>wim:PersonAccountExt</wim:applicableEntityTypeNames>
      </wim:propertySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de entrada para añadir una propiedad con un valor a la entidad:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccountExt">
      <wim:identifier uniqueName="uid=person1,dc=yourco,dc=com"/>
      <wim:HomePhone>020-2341123</wim:HomePhone>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de salida posterior a la adición de una propiedad con un valor a la entidad:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccountExt">
      <wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
          uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
      <wim:HomePhone>020-2341123</wim:HomePhone>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de entrada para buscar una propiedad extendida:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:controls xsi:type="wim:SearchControl" expression="@xsi:type='wim:PersonAccountExt'">
      <wim:properties>uid</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:properties>cn</wim:properties>
      <wim:properties>wim:HomePhone</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>

Gráfico de datos de salida posterior a la búsqueda de una propiedad extendida:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccountExt">
      <wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
          uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
      <wim:uid>person1</wim:uid>
      <wim:cn>Person 1</wim:cn>
      <wim:sn>Person1LastName</wim:sn>
      <wim:HomePhone>020-2341123</wim:HomePhone>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


Condiciones de uso | Comentarios