Criando uma Entidade Utilizando um Adaptador Assíncrono

Utilize o método create(DataObject) com um adaptador assíncrono para criar uma entidade.

Sobre Esta Tarefa

Esse tipo de chamada é o mesmo que a chamada de criação de pessoas, exceto que a chamada é encaminhada para um adaptador que executa de maneira assíncrona a operação de criação. Esse exemplo específico mostra como criar uma entidade PersonAccount, Person X no contêiner cn=users,dc=yourco,dc=com.

Para criar Person X no contêiner cn=users,dc=yourco,dc=com asynchronously, inclua este código de amostra no código do seu aplicativo e substitua as variáveis pelos valores reais que você deseja usar para esta entidade:
try { 
    //criar dataobject raiz a partir do Serviço do virtual member manager. 
    DataObject root = service.createRootDataObject(); 
    DataObject personAccount = SDOHelper.createEntityDataObject(root, null, DO_PERSON_ACCOUNT); 
    personAccount.set("uid", "personx"); 
    personAccount.set("cn", "Person X"); 
    personAccount.set("sn", "PersonXLastName"); 
    
    DataObject contexts = root.createDataObject(DO_CONTEXTS); 
    contexts.set(PROP_KEY, VALUE_CONTEXT_REALM_KEY);
    contexts.set(PROP_VALUE, "realmA"); 
    root = service.create(root); 

    // Verificar a resposta para ResponseControl dataobject
    // se há operação assínc incompleta, deveremos receber um registro. 
    String ticket = checkResponse(root); 
    
    if (ticket != null) { 
        // construir o DataGraph de entrada com RequestControl para verificar o status 
        root = service.createRootDataObject(); 
        DataObject reqCtrl = SDOHelper.createControlDataObject(root, null, DO_REQUEST_CONTROL);
        reqCtrl.setString(PROP_TICKET, ticket); 
        // aguardar a conclusão da operação assínc 
        DataObject retRoot = service.get(root); 
        while (checkResponse(retRoot) != null) { 
            Thread.sleep(200); 
            retRoot = service.get(root); 
        }
    }
} 
catch(WIMException e) {
    e.printStackTrace(); 
}
 
// retorna registro se a operação não estiver concluída
private static String checkResponse(DataObject root) {
    DataObject rspCtrl = null;
    String ticket = null; 
    List controls = root.getList(Service.DO_CONTROLS); 
    if (controls != null) { 
        for (int i = 0; i < controls.size(); i++) { 
            DataObject control = (DataObject)controls.get(i); 
            String type = control.getType().getName(); 
            if (DO_RESPONSE_CONTROL.equals(type)) { 
                rspCtrl = control; 
                break; 
            }
        }
    }
    if (rspCtrl != null) { 
        boolean complete = rspCtrl.getBoolean(Service.PROP_COMPLETE); 
        if (!complete) { 
            ticket = rspCtrl.getString(Service.PROP_TICKET); 
        }
    } 
    return ticket;
}

Gráficos de Dados de Saída e Entrada de Amostra

Especificamente neste exemplo, o gráfico de dados de entrada é:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:="http://www.w3.org/XML/1998/namespace" 
               xmlns:sdo="commonj.sdo" 
               xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:contexts>
      <wim:key>realm</wim:key>
      <wim:value>realmA</wim:value>
    </contexts>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:uid>personx</wim:uid>
      <wim:cn>Person X</wim:cn>
      <wim:sn>PersonXLastName</wim:sn>
    </wim:entities>
  </Root>
</sdo:datagraph>
O gráfico de dados de saída resultante é:
<?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:ResponseControl" complete="false" 
                  ticket="AsyncLDAP1:1113940307424:-1278154994"/>
  </wim:Root>
</sdo:datagraph>
Para verificar o status da operação de criação, o gráfico de dados para o método get() é:
<?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:RequestControl" 
                               ticket="AsyncLDAP1:1113940307424:-1278154994"/>
  </wim:Root>
</sdo:datagraph>
Se a operação de criação não for concluída, o gráfico dos dados de entrada a partir do método get() será igual ao gráfico dos dados de entrada com a adição de uma instrução complete="false":
<?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:ResponseControl" complete="false" 
                                      ticket="AsyncLDAP1:1113940307424:-1278154994"/>
  </wim:Root>
</sdo:datagraph>
Se a operação de criação estiver concluída, o gráfico de dados resultante para esse exemplo será:
<?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 repositoryId="AsyncLDAP1" 
                      uniqueName="uid=personx,cn=users,dc=yourco,dc=com"/>
    </wim:entities>
    <wim:controls xsi:type="wim:ResponseControl" complete="true"/>
  </wim:Root>
</sdo:datagraph>


Termos de uso | Feedback