Código de ejemplo para buscar entidades modificadas

Utilice el código completo y los gráficos de datos para realizar operaciones de búsqueda en entidades modificadas.

En este escenario de ejemplo se incluyen los pasos siguientes:

  1. Crear dos entidades.
  2. Obtenga el punto de comprobación actual para el depósito utilizando el objeto de datos ChangeResponseControl. Este punto de comprobación es necesario porque tiene que pasarlo en la búsqueda de entidades modificadas utilizando el objeto de datos ChangeControl (paso 5), para que sólo se devuelvan entidades modificadas desde este punto de comprobación.
    Importante: Existen dos requisitos previos cuando se utilizan los objetos de datos ChangeControl y ChangeResponseControl: debe establecer el valor de la propiedad supportChangeLog para el depósito en native y habilitar la característica de rastreo de cambios en el depósito subyacente. Para obtener más información, consulte el tema Búsqueda de entidades modificadas.
  3. Actualice una de las entidades.
  4. Obtenga las propiedades de la entidad actualizada.
  5. Busque las entidades modificadas utilizando los objetos de datos ChangeControl y ChangeResponseControl.

Requisitos previos

Asegúrese de leer la información y completar los pasos que se describen en el tema Requisitos previos de programación.

Código de ejemplo

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

public class SearchSample extends BaseApp
{
    private static String ejbJndiName = "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome";

    /**
     *  testScenario 
     *  Este escenario de prueba realiza lo siguiente:
     *  Crea dos entidades
     *  Obtiene el punto de comprobación actual para el depósito
     *  Actualiza una de las entidades
     *  Obtiene las propiedades de la entidad actualizada
     *  Busca las entidades modificadas
     */
    public static void main(String[] args) throws Exception
    {
        // Localizar el servicio
        service = locateService(ejbJndiName);
        // Crear dos usuarios con el uid user1 y user2 respectivamente
        DataObject root1 = addPersonAccount("user1","Admin","AdminSn");
        DataObject root2 = addPersonAccount("user2","Operator","OperatorSn");
        // Obtener el punto de comprobación actual para el depósito
        // Es necesario para poder realizar actualizaciones en las entidades
        // para que se puede devolver cuando realizamos una búsqueda
        // para recuperar las entidades modificadas desde este punto de comprobación
        DataObject prevRoot = getCurrentCheckPoint();
        // Actualizar la entidad user1
        DataObject updatedRoot = updatePersonAccount(root1, "Manager");
        // Obtener las propiedades de la entidad actualizada
        DataObject getRoot = getPersonAccount(updatedRoot);
        // Buscar la entidad modificada
        DataObject searchRoot = searchChangedEntities(prevRoot);
    }
    
    /**
     *  addPersonAccount 
     *  Añade una entidad del tipo de entidad PersonAccount
     *  @param uid valor que debe establecerse
     *  @param cn valor que debe establecerse
     *  @param sn valor que debe establecerse
     *  @return DataObject
     *  @throws Exception
     */
    public static DataObject addPersonAccount(String uid, String cn, String sn) throws Exception
    {
        DataObject root = SDOHelper.createRootDataObject();
        DataObject entity = SDOHelper.createEntityDataObject(root, null,
                SchemaConstants.DO_PERSON_ACCOUNT);
        // Establecer las propiedades que tendrá la entidad que se acaba de crear
        entity.set("uid", uid);
        entity.set("cn", cn);
        entity.set("sn", sn);
        System.out.println("Input datagraph before creating user"+ printDO(root));
        root = service.create(root); 
        System.out.println("Output datagraph after creating user"+ printDO(root));
        return root;
    }
    
    /**
     * getCurrentCheckPoint Recupera el punto de comprobación actual del depósito
     * @return DataObject
     * @throws Exception
     */
    public static DataObject getCurrentCheckPoint() throws Exception 
    { 
        DataObject root = SDOHelper.createRootDataObject();
        DataObject ctrl = SDOHelper.createControlDataObject(root, SchemaConstants.WIM_NS_URI, 
                SchemaConstants.DO_CHANGE_CONTROL);          
        DataObject result = service.search(root);
        System.out.println("Checkpoint: "+ printDO(result));
        return result;
    }
    
    /**
     *  updatePersonAccount 
     *  Actualiza una entidad ya existente del tipo PersonAccount
     *  @param entity DataObject de entrada que debe modificarse
     *  @param newCn valor de la propiedad que debe actualizarse
     *  @return DataObject actualizado
     *  @throws Exception
     */
    public static DataObject updatePersonAccount(DataObject entity, String newCn) throws Exception
    {
        DataObject user = (DataObject) entity.getList(SchemaConstants.DO_ENTITIES).get(0);
        // Establecer el nuevo valor de cn para actualizar la entidad
        user.set("cn", newCn);
        System.out.println("Input datagraph before updating user"+ printDO(entity));
        DataObject root = service.update(entity);
        System.out.println("Output datagraph after updating user"+ printDO(root));   
        return root;
    }
    
    /**
     *  getPersonAccount 
     *  Obtiene las propiedades de una entidad existente del tipo PersonAccount
     *  @param entity DataObject de entrada que debe recuperarse con las propiedades
     *  @return DataObject con las propiedades
     *  @throws Exception
     */
    public static DataObject getPersonAccount(DataObject entity) throws Exception
    {   
        DataObject propCtrl = SDOHelper.createControlDataObject(entity, null, 
                SchemaConstants.DO_PROPERTY_CONTROL);           
        //Establecer las propiedades que deben recuperarse para la entidad
        propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
        propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        System.out.println("Input datagraph before getting user properties"+ printDO(entity));
        // Realizar operación de obtención (get)
        DataObject root = service.get(entity);
        System.out.println("Output datagraph after getting user properties"+ printDO(root));
        return root;
    }
    
    /**
     * searchChangedEntities Busca las entidades modificadas
     *  @param prevRoot DataObject representa el punto de comprobación anterior
     *  @return DataObject con resultados de búsqueda
     * @throws Exception
     */
    public static DataObject searchChangedEntities(DataObject prevRoot) throws Exception
    {
        DataObject root = SDOHelper.createRootDataObject();
        DataObject ctrl = SDOHelper.createControlDataObject(root, null, 
                SchemaConstants.DO_CHANGE_CONTROL);
        // Establecer la expresión de búsqueda
        ctrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccount'");                
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
        // Establecer CHANGETYPE_ALL para buscar entidades modificadas
        ctrl.getList(SchemaConstants.PROP_CHANGETYPES).add(SchemaConstants.CHANGETYPE_ALL);
        SDOHelper.createChangeCtrlFromChangeRespCtrl(root, prevRoot);
        System.out.println("Input datagraph before searching for changed entities"+ printDO(root));
        DataObject results = service.search(root);
        System.out.println("output datagraph after searching changed entities"+ printDO(results));
        return results;
    }
}

Gráficos de datos de entrada y salida

A continuación se proporcionan los gráficos de datos de entrada y los gráficos de datos de salida resultantes para cada paso de este ejemplo.

Gráfico de datos de entrada para crear un usuario (user1):
<?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:PersonAccount">
      <wim:uid>user1</wim:uid>
      <wim:cn>Admin</wim:cn>
      <wim:sn>AdminSn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de crear un usuario (user1):
<?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:PersonAccount">
      <wim:identifier externalName="uid=user1,dc=yourco,dc=com" repositoryId="ldapRepo"
          uniqueId="45258d76-82b4-4a44-9c3a-077f5a82f15e" uniqueName="uid=user1,dc=yourco,dc=com"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para crear otro usuario (user2):
<?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:PersonAccount">
      <wim:uid>user2</wim:uid>
      <wim:cn>Operator</wim:cn>
      <wim:sn>OperatorSn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de crear otro usuario (user2):
<?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:PersonAccount">
      <wim:identifier externalName="uid=user2,dc=yourco,dc=com" repositoryId="ldapRepo"
          uniqueId="6ca02580-d6d1-4131-91ed-2329ad6599eb" uniqueName="uid=user2,dc=yourco,dc=com"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida con el punto de comprobación actual:
<?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:ChangeResponseControl">
      <wim:checkPoint>
        <wim:repositoryId>ldapRepo</wim:repositoryId>
        <wim:repositoryCheckPoint>28</wim:repositoryCheckPoint>
      </wim:checkPoint>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para actualizar user1:
<?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:PersonAccount">
      <wim:identifier externalName="uid=user1,dc=yourco,dc=com" repositoryId="ldapRepo"
          uniqueId="45258d76-82b4-4a44-9c3a-077f5a82f15e" uniqueName="uid=user1,dc=yourco,dc=com"/>
      <wim:cn>Manager</wim:cn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de actualizar user1:
<?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:PersonAccount">
      <wim:identifier externalName="uid=user1,dc=yourco,dc=com" repositoryId="ldapRepo"
          uniqueId="45258d76-82b4-4a44-9c3a-077f5a82f15e" uniqueName="uid=user1,dc=yourco,dc=com"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para obtener las propiedades de user1:
<?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:PersonAccount">
      <wim:identifier externalName="uid=user1,dc=yourco,dc=com" repositoryId="ldapRepo"
          uniqueId="45258d76-82b4-4a44-9c3a-077f5a82f15e" uniqueName="uid=user1,dc=yourco,dc=com"/>
      <wim:cn>Manager</wim:cn>
    </wim:entities>
    <wim:controls xsi:type="wim:PropertyControl">
      <wim:properties>sn</wim:properties>
      <wim:properties>uid</wim:properties>
      <wim:properties>cn</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de obtener las propiedades de user1:
<?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:PersonAccount">
      <wim:identifier externalName="uid=user1,dc=yourco,dc=com" repositoryId="ldapRepo"
          uniqueId="45258d76-82b4-4a44-9c3a-077f5a82f15e" uniqueName="uid=user1,dc=yourco,dc=com"/>
      <wim:uid>user1</wim:uid>
      <wim:cn>Manager</wim:cn>
      <wim:sn>AdminSn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de entrada para buscar entidades modificadas:
<?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:ChangeControl" expression="@xsi:type='PersonAccount'">
      <wim:properties>uid</wim:properties>
      <wim:properties>cn</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:checkPoint>
        <wim:repositoryId>ldapRepo</wim:repositoryId>
        <wim:repositoryCheckPoint>28</wim:repositoryCheckPoint>
      </wim:checkPoint>
      <wim:changeTypes>*</wim:changeTypes>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Gráfico de datos de salida después de buscar entidades modificadas:
<?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:PersonAccount">
      <wim:identifier externalName="uid=user1,dc=yourco,dc=com" repositoryId="ldapRepo"
          uniqueId="45258d76-82b4-4a44-9c3a-077f5a82f15e" uniqueName="uid=user1,dc=yourco,dc=com"/>
      <wim:changeType>modify</wim:changeType>
      <wim:uid>user1</wim:uid>
      <wim:cn>Manager</wim:cn>
      <wim:sn>AdminSn</wim:sn>
    </wim:entities>
    <wim:controls xsi:type="wim:ChangeResponseControl">
      <wim:checkPoint>
        <wim:repositoryId>ldapRepo</wim:repositoryId>
        <wim:repositoryCheckPoint>29</wim:repositoryCheckPoint>
      </wim:checkPoint>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>


Condiciones de uso | Comentarios