非同期アダプターを使用したエンティティーの作成

非同期アダプターで create(DataObject) メソッドを使用して、エンティティーを作成します。

このタスクについて

このタイプの呼び出しは、この呼び出しが作成操作を非同期で行うアダプターに送られることを除けば、create person 呼び出しと同じです。 この例は、Person X という PersonAccount エンティティーをコンテナー cn=users,dc=yourco,dc=com の下に作成する方法を示しています。

Person X をコンテナー cn=users,dc=yourco,dc=com の下に非同期で作成するには、このサンプル・コードをアプリケーション・コードに追加し、変数 をこのエンティティーで使用する実際の値で置き換えます。
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>
作成操作の状況を確認するため、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>
作成操作が完了しないと、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>
作成操作が完了すると、この例の結果のデータ・グラフは次のようになります。
<?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>


利用条件 | フィードバック