使用异步适配器创建实体

将 create(DataObject) 方法与异步适配器结合使用可创建实体。

关于此任务

此类型的调用与创建人员调用相同,只是此调用将转发至以异步方式执行 create 操作的适配器。此特定示例显示如何在容器 cn=users,dc=yourco,dc=com 下创建 PersonAccount 实体 Person X。

要以异步方式在容器 cn=users,dc=yourco,dc=com 下创建 Person X,请将以下样本代码添加到应用程序代码,并将变量替换为要用于此实体的实际值:
try { 
    //create root dataobject from virtual member manager Service. 
    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); 

    // Check the response for ResponseControl dataobject
    // for incomplete async operation, we should receive a ticket. 
    String ticket = checkResponse(root); 
    
    if (ticket != null) { 
        // build the input DataGraph with RequestControl to check the status 
        root = service.createRootDataObject(); 
        DataObject reqCtrl = SDOHelper.createControlDataObject(root, null, DO_REQUEST_CONTROL);
        reqCtrl.setString(PROP_TICKET, ticket); 
        // wait for the completion of the async operation 
        DataObject retRoot = service.get(root); 
        while (checkResponse(retRoot) != null) { 
            Thread.sleep(200); 
            retRoot = service.get(root); 
        }
    }
} 
catch(WIMException e) {
    e.printStackTrace(); 
}
 
// returns ticket if the operation is not complete
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>
要检查 create 操作的状态,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>
如果 create 操作未完成,那么 get() 方法的输出数据图与输入数据图相同,只是添加了 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>
如果 create 操作完成,那么对于此示例,生成的数据图为:
<?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>


使用条款 | 反馈