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 :
Assurez-vous d'avoir bien lu les informations et effectué les étapes décrites dans la rubrique Prérequis pour la programmation.
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;
}
}
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.
<?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>
<?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>
<?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>
<?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>
<?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>
<?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>
<?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>
<?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>
<?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>
<?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>
<?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>