Use o código de amostra de ponta a ponta e os gráficos de dados para procurar operações em entidades alteradas.
As etapas a seguir são cobertas neste cenário de amostra:
Assegure-se de ter lido as informações e concluído as etapas descritas no tópico Pré-requisitos de Programação.
Inclua o seguinte código de amostra de ponta a ponta no código do aplicativo e substitua as variáveis pelos valores reais que você deseja usar.
public class SearchSample extends BaseApp
{
private static String ejbJndiName = "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome";
/**
* testScenario
* Este cenário de teste faz o seguinte:
* Cria duas entidades
* Obtém o ponto de verificação atual para o repositório
* Atualiza uma das entidades
* Obtém as propriedades da entidade atualizada
* Procura entidades alteradas
*/
public static void main(String[] args) throws Exception {
// Localizar o serviço
service = locateService(ejbJndiName);
// Criar dois usuários com o uid user1 e user2 respectivamente
DataObject root1 = addPersonAccount("user1","Admin","AdminSn");
DataObject root2 = addPersonAccount("user2","Operator","OperatorSn");
// Obter o ponto de verificação atual para o repositório
// Isso é necessário para que possamos fazer atualizações nas entidades
// de modo que elas possam ser retransmitidas quando fizermos uma procura
// para recuperar entidades alteradas desde esse ponto de verificação
DataObject prevRoot = getCurrentCheckPoint();
// Atualizar a entidade user1
DataObject updatedRoot = updatePersonAccount(root1, "Manager");
// Obter as propriedades da entidade atualizada
DataObject getRoot = getPersonAccount(updatedRoot);
// Procurar a entidade alterada
DataObject searchRoot = searchChangedEntities(prevRoot);
}
/**
* addPersonAccount
* Inclui uma entidade do tipo PersonAccount
* @param uid valor a ser configurado
* @param cn valor a ser configurado
* @param sn valor a ser configurado
* @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);
// Configurar as propriedades que a entidade recém-criada terá
entity.set("uid", uid);
entity.set("cn", cn);
entity.set("sn", sn);
System.out.println("Gráfico de dados de entrada antes de criar o usuário"+ printDO(root));
root = service.create(root);
System.out.println("Gráfico de dados de saída depois de criar o usuário"+ printDO(root));
return root;
}
/**
* getCurrentCheckPoint Recupera o ponto de verificação atual do repositório
* @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
* Atualiza uma entidade já existente do tipo PersonAccount
* @param entity Objeto de dados de entrada que precisa ser modificado
* @param newCn valor da propriedade que precisa ser atualizado
* @return Objeto de Dados Atualizado
* @throws Exception
*/
public static DataObject updatePersonAccount(DataObject entity, String newCn) throws Exception
{
DataObject user = (DataObject) entity.getList(SchemaConstants.DO_ENTITIES).get(0);
// Configurar o novo valor para cn para atualizar a entidade
user.set("cn", newCn);
System.out.println("Gráfico de dados de entrada antes de atualizar o usuário"+ printDO(entity));
DataObject root = service.update(entity);
System.out.println("Gráfico de dados de saída depois de atualizar o usuário"+ printDO(root));
return root;
}
/**
* getPersonAccount
* Obtém as propriedades de uma entidade existente do tipo PersonAccount
* @param entity Objeto de dados de entrada que precisa ser recuperado com as propriedades
* @return Objeto de Dados com as propriedades
* @throws Exception
*/
public static DataObject getPersonAccount(DataObject entity) throws Exception
{
DataObject propCtrl = SDOHelper.createControlDataObject(entity, null,
SchemaConstants.DO_PROPERTY_CONTROL);
// Configurar as propriedades que precisam ser recuperadas para a entidade
propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
System.out.println("Gráfico de dados de entrada antes de obter as propriedades do usuário"+ printDO(entity));
// Executar a operação get
DataObject root = service.get(entity);
System.out.println("Gráfico de dados de saída depois de obter as propriedades do usuário"+ printDO(root));
return root;
}
/**
* searchChangedEntities Procura as entidades que foram alteradas
* @param prevRoot DataObject que representa o ponto de verificação anterior
* @return DataObject com resultados da procura
* @throws Exception
*/
public static DataObject searchChangedEntities(DataObject prevRoot) throws Exception
{
DataObject root = SDOHelper.createRootDataObject();
DataObject ctrl = SDOHelper.createControlDataObject(root, null,
SchemaConstants.DO_CHANGE_CONTROL);
// Configurar a expressão de procura
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");
// Configurar CHANGETYPE_ALL para procurar entidades alteradas
ctrl.getList(SchemaConstants.PROP_CHANGETYPES).add(SchemaConstants.CHANGETYPE_ALL);
SDOHelper.createChangeCtrlFromChangeRespCtrl(root, prevRoot);
System.out.println("Gráfico de dados de entrada antes de procurar entidades alteradas"+ printDO(root));
DataObject results = service.search(root);
System.out.println("Gráfico de dados de saída depois de procurar entidades alteradas"+ printDO(results));
return results;
}
}
Os gráficos de dados de entrada e os gráficos de dados de saída resultantes para cada etapa deste exemplo são fornecidos a seguir.
<?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>