Utilice el método create(DataObject) con un adaptador asíncrono para crear una entidad.
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.
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;
}
<?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>
<?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>
<?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>
<?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>
<?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>