Mit dem umfassenden Mustercode und den Datengraphen können Sie Suchoperationen nach geänderten Entitäten ausführen.
Dieses Beispielszenario deckt die folgenden Schritte ab:
Stellen Sie sicher, dass Sie die Informationen gelesen und die Schritte ausgeführt haben, die im Thema Voraussetzungen für die Programmierung beschrieben sind.
Fügen Sie den folgenden umfassenden Mustercode zu Ihrem Anwendungscode hinzu und ersetzen Sie die Variablen durch die tatsächlichen Werte, die Sie verwenden wollen.
public class SearchSample extends BaseApp
{
private static String ejbJndiName = "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome";
/**
* testScenario
* This test scenario does the following:
* Creates two entities
* Gets the current checkpoint for the repository
* Updates one of the entities
* Gets the properties of the updated entity
* Searches for changed entities
*/
public static void main(String[] args) throws Exception
{
// Locate the service
service = locateService(ejbJndiName);
// Create two users with uid user1 and user2 respectively
DataObject root1 = addPersonAccount("user1","Admin","AdminSn");
DataObject root2 = addPersonAccount("user2","Operator","OperatorSn");
// Get the current checkpoint for the repository
// This is required before we do any updates on the entities
// so that it can be passed back when we do a search
// to retrieve entities changed since this checkpoint
DataObject prevRoot = getCurrentCheckPoint();
// Update entity user1
DataObject updatedRoot = updatePersonAccount(root1, "Manager");
// Get the properties of the updated entity
DataObject getRoot = getPersonAccount(updatedRoot);
// Search for the changed entity
DataObject searchRoot = searchChangedEntities(prevRoot);
}
/**
* addPersonAccount
* Adds an entity of PersonAccount entity type
* @param uid value to be set
* @param cn value to be set
* @param sn value to be set
* @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);
// Set the properties that the newly created entity will have
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 Retrieves the current checkpoint from the repository
* @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
* Updates an already existing entity of PersonAccount entity type
* @param entity Input DataObject that needs to be modified
* @param newCn value of property that needs to be updated
* @return Updated DataObject
* @throws Exception
*/
public static DataObject updatePersonAccount(DataObject entity, String newCn) throws Exception
{
DataObject user = (DataObject) entity.getList(SchemaConstants.DO_ENTITIES).get(0);
// Set the new value for cn to update the entity
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
* Gets the properties of an existing entity of PersonAccount entity type
* @param entity Input DataObject that needs to be retrieved with the properties
* @return DataObject with the properties
* @throws Exception
*/
public static DataObject getPersonAccount(DataObject entity) throws Exception
{
DataObject propCtrl = SDOHelper.createControlDataObject(entity, null,
SchemaConstants.DO_PROPERTY_CONTROL);
// Set the properties that have to be retrieved for the entity
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));
// Perform get operation
DataObject root = service.get(entity);
System.out.println("Output datagraph after getting user properties"+ printDO(root));
return root;
}
/**
* searchChangedEntities Searches for the entities that have changed
* @param prevRoot DataObject the represents the previous checkpoint
* @return DataObject with search results
* @throws Exception
*/
public static DataObject searchChangedEntities(DataObject prevRoot) throws Exception
{
DataObject root = SDOHelper.createRootDataObject();
DataObject ctrl = SDOHelper.createControlDataObject(root, null,
SchemaConstants.DO_CHANGE_CONTROL);
// Set the search expression
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");
// Set the CHANGETYPE_ALL to search changed entities
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;
}
}
Die Eingabedatengraphen und die resultierenden Ausgabedatengraphen für die einzelnen Schritte dieses Beispiels sind nachfolgend aufgeführt.
<?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>