Exemple de code pour la recherche d'entités modifiées

Utilisez l'exemple de code de bout en bout et les graphiques de données pour des opérations de recherche sur les entités modifiées.

Les étapes suivantes sont abordées dans cet exemple de scénario :

  1. Créer deux entités.
  2. Extraire le point de contrôle actuel du référentiel à l'aide de l'objet de données ChangeResponseControl. Ce point de contrôle est nécessaire car vous devez le transmettre lorsque vous recherchez les entités modifiées à l'aide de l'objet données ChangeControl (étape 5), de sorte que seules les entités modifiées depuis ce point de contrôle soient renvoyées.
    Important : Il existe deux conditions lorsque vous utilisez les objets de données ChangeControl et ChangeResponseControl : vous devez affecter à la propriété supportChangeLog du référentiel la valeur native et activer la fonction de suivi des modifications dans le référentiel sous-jacent. Pour plus d'informations, voir la rubrique Recherche des entités modifiées.
  3. Mettre à jour l'une des entités.
  4. Extraire les propriétés de l'entité mise à jour.
  5. Rechercher les entités modifiées à l'aide des objets de données ChangeControl et ChangeResponseControl.

Conditions prérequises

Assurez-vous d'avoir bien lu les informations et effectué les étapes décrites dans la rubrique Prérequis pour la programmation.

Exemple de code

Ajoutez l'exemple de code de bout en bout ci-après à votre code d'application, puis remplacez les variables par les valeurs réelles à utiliser.

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

    /**
     *  testScenario 
     *  Ce scénario de test effectue les opérations suivantes :
     *  Il crée deux entités
     *  Il extrait le point de contrôle actuel du référentiel
     *  Il met à jour l'une des entités
     *  Il extrait les propriétés de l'entité mise à jour
     *  Il recherche les entités modifiées
     */
    public static void main(String[] args) throws Exception
    {
        // Localisation du service
        service = locateService(ejbJndiName);
        // Créez deux utilisateurs avec les uid user1 et user2 respectivement
        DataObject root1 = addPersonAccount("user1","Admin","AdminSn");
        DataObject root2 = addPersonAccount("user2","Operator","OperatorSn");
        // Extrayez le point de contrôle actuel du référentiel
        // Cela est requis avant toute mise à jour des entités
        // pour qu'il puisse être renvoyé lors d'une recherche
        // pour l'extraction des entités modifiées depuis ce point de contrôle
        DataObject prevRoot = getCurrentCheckPoint();
        // Mettez à jour l'entité user1
        DataObject updatedRoot = updatePersonAccount(root1, "Manager");
        // Extrayez les propriétés de l'entité mise à jour
        DataObject getRoot = getPersonAccount(updatedRoot);
        // Recherchez l'entité modifiée
        DataObject searchRoot = searchChangedEntities(prevRoot);
    }
    
    /**
     *  addPersonAccount 
     *  Ajoute une entité de type PersonAccount
     *  @param valeur uid à définir
     *  @param valeur cn à définir
     *  @param valeur sn à définir
     *  @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);
        // Définition des propriétés de l'entité nouvellement créée
        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 Extrait le point de contrôle actuel du référentiel
     * @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 
     *  Met à jour une entité existante de type PersonAccount
     *  @param entity Objet de données en entrée à modifier
     *  @param newCn valeur de la propriété à mettre à jour
     *  @return DataObject mis à jour
     *  @throws Exception
     */
    public static DataObject updatePersonAccount(DataObject entity, String newCn) throws Exception
    {
        DataObject user = (DataObject) entity.getList(SchemaConstants.DO_ENTITIES).get(0);
        // Définition de la nouvelle valeur de cn pour mettre à jour l'entité
        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 
     *  Extrait les propriétés d'une entité existante de type PersonAccount
     *  @param entity Objet de données en entrée à extraire avec les propriétés
     *  @return DataObject avec les propriétés
     *  @throws Exception
     */
    public static DataObject getPersonAccount(DataObject entity) throws Exception
    {   
        DataObject propCtrl = SDOHelper.createControlDataObject(entity, null, 
                SchemaConstants.DO_PROPERTY_CONTROL);           
        // Définition des propriétés à extraire pour l'entité
        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));
        // Exécution de l'opération get
        DataObject root = service.get(entity);
        System.out.println("Output datagraph after getting user properties"+ printDO(root));
        return root;
    }
    
    /**
     * searchChangedEntities Recherche les entités modifiées 
     * @param prevRoot DataObject qui représente le point de contrôle précédent
     * @return DataObject avec les résultats de la recherche
     * @throws Exception
     */
    public static DataObject searchChangedEntities(DataObject prevRoot) throws Exception
    {
        DataObject root = SDOHelper.createRootDataObject();
        DataObject ctrl = SDOHelper.createControlDataObject(root, null, 
                SchemaConstants.DO_CHANGE_CONTROL);
        // Définition de l'expression de recherche
        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");
        // Définition de CHANGETYPE_ALL pour rechercher toutes les entités modifiées
        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;
    }
}

Graphiques de données d'entrée et de sortie

Les graphiques de données d'entrée et les graphiques de données de sortie résultants pour chaque étape de cet exemple sont fournis ci-après.

Graphique de données d'entrée pour la création d'un utilisateur (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>
Graphique de données de sortie après la création d'un utilisateur (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>
Graphique de données d'entrée pour la création d'un autre utilisateur (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>
Graphique de données de sortie après la création d'un autre utilisateur (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>
Graphique de données de sortie avec le point de contrôle actuel :
<?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>
Graphique de données d'entrée pour la mise à jour d'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>
Graphique de données de sortie après la mise à jour d'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>
Graphique de données d'entrée pour l'extraction des properties d'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>
Graphique de données de sortie après l'extraction des propriétés d'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>
Graphique de données d'entrée pour la recherche des entités modifiées :
<?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>
Graphique de données de sortie après la recherche des entités modifiées :
<?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>


Conditions d'utilisation | Commentaires