検索ベースを使用して検索するためのサンプル・コード

このエンドツーエンド・サンプル・コードおよびデータ・グラフは、2 つの異なる検索ベースを使用して検索するために使用します。

このサンプル・コード・スニペットでは、以下の手順を実行します。

  1. 1 つの検索ベース内に 2 人のユーザーを作成し、もう 1 つの検索ベース内に別の 2 人のユーザーを作成します。
  2. 異なる検索ベースを設定します。
  3. それぞれの検索ベースを検索し、返されたエンティティーがそれぞれの検索ベースに属することを確認します。

前提条件

プログラミングの前提条件」トピックで説明されている情報を参照済みであること、またトピックの手順を実行済みであることを確認してください。

サンプル・コード

次のエンドツーエンド・サンプル・コードをアプリケーション・コードに追加し、変数 を実際に使用する値に置き換えます。

/**
 *  testSearchBases This test sets different search bases
 *  The results from the two searches returns entities
 *  that are present in a particular search base only
 */
public static void testSearchBases() throws Exception
{
    // Create two users with uid SalesPerson1 and SalesPerson2 respectively 
    // in search base o=SalesPerson,dc=yourco,dc=com
    DataObject user1 = addPersonAccount("SalesPerson1", "SalesPerson1cn","SalesPerson1sn", 
            "o=SalesPerson,dc=yourco,dc=com");
    DataObject user2 = addPersonAccount("SalesPerson2", "SalesPerson2cn","SalesPerson2sn", 
            "o=SalesPerson,dc=yourco,dc=com");
    
    // Create two users with uid SalesManager1 and SalesManager2 respectively 
    // in search base o=SalesManager,dc=yourco,dc=com
    DataObject user3 = addPersonAccount("SalesManager1", "SalesManager1cn","SalesManager1sn", 
            "o=SalesManager,dc=yourco,dc=com");
    DataObject user4 = addPersonAccount("SalesManager2", "SalesManager2cn","SalesManager2sn", 
            "o=SalesManager,dc=yourco,dc=com");
    
    // Now do a search in the two search bases. The output should have users belonging to that search base
    String searchBase1 = "o=SalesPerson,dc=yourco,dc=com";
    String searchBase2 = "o=SalesManager,dc=yourco,dc=com";  
    
    // Search with the searchBase1 set      
    search(searchBase1);   
    
    // Search with the searchBase2 set    
    search(searchBase2);      
}

/**
 *  addPersonAccount
 *  Adds an entity of PersonAccount entity type
 *  @param uid value to be set
 *  @param cn value to be set
 *  @param sn value to be set
 *  @param parent value to be set
 *  @return DataObject
 *  @throws Exception
 */
public static DataObject addPersonAccount(String uid, String cn, String sn, String parent) throws Exception
{
    DataObject root = SDOHelper.createRootDataObject();
    DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_PERSON_ACCOUNT);
    entity.set("uid", uid);
    entity.set("cn", cn);
    entity.set("sn", sn);
    entity.createDataObject(SchemaConstants.DO_PARENT).createDataObject(SchemaConstants.DO_IDENTIFIER)
            .setString(SchemaConstants.PROP_UNIQUE_NAME, parent);
    
    root = service.create(root);  
    return root;
}

/**
 *  Gets the search results for the search base set
 *  @param searchBase the search base to be set on search control
 *  @throws Exception
 */
public static void search(String searchBase) throws Exception
{
    DataObject root = SDOHelper.createRootDataObject();
    
    DataObject searchCtrl = SDOHelper.createControlDataObject(root, null, SchemaConstants.DO_SEARCH_CONTROL);
    searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
    searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
    searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("telephoneNumber");
    searchCtrl.getList(SchemaConstants.PROP_SEARCH_BASES).add(searchBase);
    searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccount' and uid='*'");
    
    System.out.println("Input datagraph before searching with search base "+ searchBase +" " 
            + printDO(root));
    DataObject searchRoot = service.search(root);
    System.out.println("Output datagraph after searching with search base "+ searchBase +" " 
            + printDO(searchRoot));
}

入出力データ・グラフ

検索ベース「o=SalesPerson,dc=yourco,dc=com」でユーザーを検索するための入力データ・グラフ:
<?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:SearchControl" expression="@xsi:type='PersonAccount' and uid='*'">
      <wim:properties>cn</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:properties>telephoneNumber</wim:properties>
      <wim:searchBases>o=SalesPerson,dc=yourco,dc=com</wim:searchBases>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
検索ベース「o=SalesPerson,dc=yourco,dc=com」でユーザーを検索した後の出力データ・グラフ:
<?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 externalName="uid=SalesPerson1,o=SalesPerson,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="e0db3534-a0ec-4c8b-bfff-a399895a7ca3" 
          uniqueName="uid=SalesPerson1,o=SalesPerson,dc=yourco,dc=com"/>
      <wim:cn>SalesPerson1cn</wim:cn>
      <wim:sn>SalesPerson1sn</wim:sn>
      <wim:telephoneNumber>11111111</wim:telephoneNumber>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson2,o=SalesPerson,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="bc9d1275-a2dc-4348-ae2c-4eabb54ad98a" 
          uniqueName="uid=SalesPerson2,o=SalesPerson,dc=yourco,dc=com"/>
      <wim:cn>SalesPerson2cn</wim:cn>
      <wim:sn>SalesPerson2sn</wim:sn>
      <wim:telephoneNumber>22222222</wim:telephoneNumber>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
検索ベース「o=SalesManager,dc=yourco,dc=com」でユーザーを検索するための入力データ・グラフ:
<?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:SearchControl" expression="@xsi:type='PersonAccount' and uid='*'">
      <wim:properties>cn</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:properties>telephoneNumber</wim:properties>
      <wim:searchBases>o=SalesManager,dc=yourco,dc=com</wim:searchBases>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
検索ベース「o=SalesManager,dc=yourco,dc=com」でユーザーを検索した後の出力データ・グラフ:
<?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 externalName="uid=SalesManager1,o=SalesManager,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="b94cc18f-adbb-41aa-a48f-a0e710cd21ed" 
          uniqueName="uid=SalesManager1,o=SalesManager,dc=yourco,dc=com"/>
      <wim:cn>SalesManager1cn</wim:cn>
      <wim:sn>SalesManager1sn</wim:sn>
      <wim:telephoneNumber>11111111</wim:telephoneNumber>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesManager2,o=SalesManager,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="de158d76-f710-44cc-9e21-747baf2f8944" 
          uniqueName="uid=SalesManager2,o=SalesManager,dc=yourco,dc=com"/>
      <wim:cn>SalesManager2cn</wim:cn>
      <wim:sn>SalesManager2sn</wim:sn>
      <wim:telephoneNumber>22222222</wim:telephoneNumber>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


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