Creación de una entidad con un adaptador asíncrono

Utilice el método create(DataObject) con un adaptador asíncrono para crear una entidad.

Acerca de esta tarea

Este tipo de llamada es el mismo que la llamada para crear persona, salvo que la llamada se reenvía a un adaptador que realiza asíncronamente la operación de creación. Este ejemplo concreto muestra cómo crear una entidad PersonAccount, Person X debajo del contenedor cn=users,dc=yourco,dc=com.

Para crear Person X debajo del contenedor cn=users,dc=yourco,dc=com asíncronamente, añada este código de ejemplo a su código de aplicación y sustituya las variables por los valores reales que desea utilizar para esta entidad:
try { 
    //crear dataobject raíz desde el servicio de 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); 

    // Comprobar la respuesta para el dataobject ResponseControl
    // para una operación asíncrona incompleta, debe recibirse un problema.
    String ticket = checkResponse(root); 
    
    if (ticket != null) { 
        // crear DataGraph de entrada con RequestControl para comprobar el estado
        root = service.createRootDataObject(); 
        DataObject reqCtrl = SDOHelper.createControlDataObject(root, null, DO_REQUEST_CONTROL);
        reqCtrl.setString(PROP_TICKET, ticket); 
        // esperar a que finalice la operación asíncrona
        DataObject retRoot = service.get(root); 
        while (checkResponse(retRoot) != null) { 
            Thread.sleep(200); 
            retRoot = service.get(root); 
        }
    }
} 
catch(WIMException e) {
    e.printStackTrace(); 
}
 
// devuelve un problema si la operación no se ha completado
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 ejemplo de datos de entrada y salida

Para este ejemplo concreto, el gráfico de datos de entrada es:
<?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>
El gráfico de datos de salida resultante 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:ResponseControl" complete="false" 
                  ticket="AsyncLDAP1:1113940307424:-1278154994"/>
  </wim:Root>
</sdo:datagraph>
Para comprobar el estado de la operación de creación, el gráfico de datos de entrada para el método get() 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:RequestControl" 
                               ticket="AsyncLDAP1:1113940307424:-1278154994"/>
  </wim:Root>
</sdo:datagraph>
Si la operación de creación no se ha completado, el gráfico de datos de salida del método get() es igual que el gráfico de datos de entrada con la adición de una sentencia 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>
Si la operación de creación se ha completado, el gráfico de datos resultante para este ejemplo 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 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>


Condiciones de uso | Comentarios