Cet exemple de fragment de code et ces graphiques de données permettent de créer un type d'entité, étendu à partir d'un type d'entité intégré, dans l'espace de nom par défaut.
Les étapes suivantes sont abordées dans cet exemple de fragment de code :
Assurez-vous d'avoir bien lu les informations et effectué les étapes décrites dans la rubrique Prérequis pour la programmation et notamment dans la section Schéma de propriété étendu, qui contient des informations sur les objets de données propertySchema et extensionPropertySchema et indique la syntaxe valide pour les types de données de propriété.
import com.ibm.websphere.wim.exception.SchemaAlreadyExistException;
Vérifiez qu'un référentiel LDAP est configuré dans votre configuration de référentiels fédérés. Pour plus d'informations, reportez-vous à la rubrique Configuration du protocole LDAP (Lightweight Directory Access Protocol) dans une configuration de référentiel fédéré dans le centre de documentation de WebSphere Application Server.
Ajoutez le fragment de code ci-après à votre code d'application, puis remplacez les variables par les valeurs réelles à utiliser.
/**
* Cette méthode utilise l'API d'extension de schéma pour ajouter une nouvelle entité
* étendue à partir d'une entité virtual member manager existante.
*/
public static void testRunTimeAddNewEntity()
{
// Création du schéma pour le nouveau type d'entité
addEntityPersonAccountExt();
// Création de l'entité de nouveau type
createPersonAccountExt();
// Ajout d'une propriété 'HomePhone' à 'PersonAccountExt' et
// mappage de cette propriété à l'attribut 'primaryOwnerContact' dans LDAP
addPropertyToPersonAccountExt();
// Ajout de 'HomePhone' à 'person1'
addHomePhoneForPersonAccountExt();
// Recherche de la personne
searchPersonAcctExt();
}
/**
* Méthode de création du schéma de 'PersonAccountExt' dans l'espace de nom par défaut
*/
@SuppressWarnings("unchecked")
private static void addEntityPersonAccountExt()
{
try
{
System.out.println("\nCLIENT: Creating schema for 'PersonAccountExt' . . . ");
DataObject root = SDOHelper.createRootDataObject();
// Création d'un objet de schéma sous la racine
DataObject dynaSchemaDO = root.createDataObject(SchemaConstants.DO_SCHEMA);
// Création d'un objet de schéma de type d'entité. Cet objet contiendra la définition de schéma du
// type d'entité 'PersonAccountExt' à créer.
DataObject entitySchemaDO = dynaSchemaDO.createDataObject(SchemaConstants.DO_ENTITY_SCHEMA);
// Définition de l'espace de nom du nouveau type d'entité
entitySchemaDO.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
// Définition du nom du type d'entité
entitySchemaDO.set(SchemaConstants.PROP_ENTITY_NAME, "PersonAccountExt");
// Définition du nom du type d'entité parent
entitySchemaDO.set(SchemaConstants.PROP_PARENT_ENTITY_NAME, Service.DO_PERSON_ACCOUNT);
// Création d'un objet de données de configuration d'entité
// Cet objet de données définit les détails du référentiel
DataObject entConfigDO = entitySchemaDO.createDataObject(SchemaConstants.DO_ENTITY_CONFIGURATION);
// Définition comme parent par défaut de l'entrée de base du LDAP configuré.
entConfigDO.set(SchemaConstants.PROP_DEFAULT_PARENT, "dc=yourco,dc=com");
// Définition de l'uid comme propriété de nom distinctif relatif (connexion).
entConfigDO.set(SchemaConstants.PROP_RDN_PROPERTY, "uid");
// Définition de l'ID référentiel.
DataObject reposConfigInfo1DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
reposConfigInfo1DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_OBJECTCLASSES);
reposConfigInfo1DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
// Définition des classes d'objets pour l'objet ajouté. Ces classes proviennent du schéma LDAP.
List objReadValues = reposConfigInfo1DO.getList(SchemaConstants.PROP_VALUES);
objReadValues.add("inetorgperson");
objReadValues.add("organizationalperson");
objReadValues.add("person");
// Définition de la propriété de nom distinctif relatif pour le référentiel
DataObject reposConfigInfo3DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
reposConfigInfo3DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_RDN_ATTRIBUTES);
reposConfigInfo3DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
List values = reposConfigInfo3DO.getList(SchemaConstants.PROP_VALUES);
values.add("uid");
System.out.println("Create Schema input datagraph -> " + printDO(root));
// Appel de l'API de création de schéma
DataObject outRoot = service.createSchema(root);
System.out.println("Create Schema output datagraph -> " + printDO(outRoot));
System.out.println("\nCLIENT: new entity type is created.");
}
catch (SchemaAlreadyExistException e)
{
System.out.println("CLIENT: entity type already exists.\n\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Méthode de création d'une entité de type 'PersonAccountExt'.
*/
private static void createPersonAccountExt()
{
//Création de Person 1
try
{
System.out.println("\nCLIENT: Creating Person 1 . . .");
// Extrait un graphique de données vide de Person du service WIM.
DataObject root = SDOHelper.createRootDataObject();
// Création d'un objet de données de type "PersonAccount" sous la racine
DataObject person = root.createDataObject(SchemaConstants.DO_ENTITIES,
Service.WIM_NS_URI, "PersonAccountExt");
// Définition des valeurs des attributs requis, uid, cn et sn
person.set("uid", "person1");
person.set("cn", "Person 1");
person.set("sn", "Person1LastName");
System.out.println("Create PersonAccountExt input datagraph -> " + printDO(root));
// Appel de l'API de création pour créer l'entité de compte de personne définie précédemment
root = service.create(root);
System.out.println("Create PersonAccountExt output datagraph -> " + printDO(root));
System.out.println("CLIENT: Person 1 has been created. \n\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Méthode d'ajout d'une propriété 'HomePhone' au type d'entité 'PersonAccountExt'
* et mappage de cette propriété à l'attribut 'primaryOwnerContact' dans LDAP
*/
@SuppressWarnings("unchecked")
private static void addPropertyToPersonAccountExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
// Création d'un objet "schema" sous la racine
// Cet objet contiendra les détails des modifications de schéma qui doivent être apportées
DataObject schema = root.createDataObject(SchemaConstants.DO_SCHEMA);
// Création d'un objet de données de schéma de propriété sous l'objet de schéma créé précédemment
DataObject propertySchema = schema.createDataObject(SchemaConstants.DO_PROPERTY_SCHEMA);
// Définition du nom de la propriété
propertySchema.setString(SchemaConstants.PROP_PROPERTY_NAME, "HomePhone");
// Définition de l'espace de nom de la propriété comme espace de nom par défaut
propertySchema.setString(SchemaConstants.PROP_NS_URI, SchemaConstants.WIM_NS_URI);
// Spécification de la propriété comme propriété à valeur unique
propertySchema.setBoolean(SchemaConstants.PROP_MULTI_VALUED, false);
// Spécification du type de données de la propriété comme chaîne
propertySchema.setString(SchemaConstants.PROP_DATA_TYPE, SchemaConstants.DATA_TYPE_STRING);
// Spécification des types d'entité applicables pour cette propriété
// La propriété sera ajoutée pour tous les noms de type d'entité spécifiés dans la liste
propertySchema.getList(SchemaConstants.PROP_APPLICABLE_ENTITY_TYPE_NAMES)
.add("PersonAccountExt");
System.out.println("Add property input datagraph " + printDO(root));
// Appel de l'API de création de schéma
root = service.createSchema(root);
System.out.println("Add property output datagraph " + printDO(root));
// Mappage de la propriété 'HomePhone' créée précédemment à l'attribut LDAP 'primaryOwnerContact'
Hashtable configData = new Hashtable();
// Spécification du référentiel pour lequel cette propriété doit être mappée
configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_REPOS_ID, "LDAP1");
DataObject configProvider = SDOHelper.createConfigProviderDataObject();
// Spécification de "Ldap" comme type de référentiel
DataObject ldapRepos = SDOHelper.createConfigRepositoryDataObject(configProvider,
ConfigConstants.CONFIG_DO_LDAP_REPOSITORY_TYPE);
// Spécification du nom de propriété et du nom d'attribut à mapper l'un à l'autre
DataObject attrConfig = ldapRepos.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTE_CONFIGUARTION);
DataObject attr = attrConfig.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTES);
attr.setString(ConfigConstants.CONFIG_PROP_PROPERTY_NAME, "HomePhone");
attr.setString(ConfigConstants.CONFIG_PROP_NAME, "primaryOwnerContact");
configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_PROP_CONFIG, attr);
// Appel de la mise à jour de configuration dynamique
// Cette API ne met à jour que le mappage de cette session ; ce mappage n'est pas permanent
service.dynamicUpdateConfig(DynamicConfigConstants.DYNA_CONFIG_EVENT_ADD_PROPERTY_CONFIG,
configData);
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Ajout de 'HomePhone' à l'entité 'person1' créée précédemment dans LDAP
*/
private static void addHomePhoneForPersonAccountExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
DataObject entity = SDOHelper.createEntityDataObject(root, null, "PersonAccountExt");
// Définition du nom unique de l'objet auquel la valeur 'HomePhone' doit être défini
entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
"uid=person1,dc=yourco,dc=com");
// Spécification de la valeur de 'HomePhone'
entity.set("HomePhone", "020-2341123");
System.out.println("Set property input datagraph -> " + printDO(root));
// Appel de l'API de mise à jour de VMM
root = service.update(root);
System.out.println("Set property output datagraph -> " + printDO(root));
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* Recherche de 'PersonAccountExt'
*/
@SuppressWarnings("unchecked")
private static void searchPersonAcctExt()
{
try
{
DataObject root = SDOHelper.createRootDataObject();
// Création d'un objet de données de contrôle de recherche
DataObject searchCtrl = SDOHelper.createControlDataObject(root, null,
SchemaConstants.DO_SEARCH_CONTROL);
// Spécification des propriétés à extraire pour toutes les entrées correspondantes
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("HomePhone");
// Spécification des critères correspondants comme expression de recherche
searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccountExt'");
// Appel de l'API de recherche
root = service.search(root);
System.out.println("Output datagraph -> " + printDO(root));
// Itération sur les résultats de la recherche
printIdentifiers(root);
}
catch(Exception e)
{
e.printStackTrace();
}
}
Graphique de données d'entrée pour la création d'un type d'entité étendu :
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:entitySchema nsURI="http://www.ibm.com/websphere/wim"
entityName="PersonAccountExt" parentEntityName="PersonAccount">
<wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
<wim:metaData name="objectClasses" repositoryId="LDAP1">
<wim:values>inetorgperson</wim:values>
<wim:values>organizationalperson</wim:values>
<wim:values>person</wim:values>
</wim:metaData>
<wim:metaData name="rdnAttributes" repositoryId="LDAP1">
<wim:values>uid</wim:values>
</wim:metaData>
</wim:entityConfiguration>
</wim:entitySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Graphique de données de sortie après la création d'un type d'entité étendu :
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:entitySchema nsURI="http://www.ibm.com/websphere/wim"
entityName="PersonAccountExt" parentEntityName="PersonAccount">
<wim:repositoryIds>LDAP1</wim:repositoryIds>
<wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
<wim:metaData name="objectClasses" repositoryId="LDAP1">
<wim:values>inetorgperson</wim:values>
<wim:values>organizationalperson</wim:values>
<wim:values>person</wim:values>
</wim:metaData>
</wim:metaData>
<wim:metaData name="rdnAttributes" repositoryId="LDAP1">
<wim:values>uid</wim:values>
</wim:metaData>
</wim:entityConfiguration>
</wim:entitySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Graphique de données d'entrée pour la création d'une entité du nouveau type d'entité :
<?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:PersonAccountExt">
<wim:uid>person1</wim:uid>
<wim:cn>Person 1</wim:cn>
<wim:sn>Person1LastName</wim:sn>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Graphique de données de sortie après la création d'une entité du nouveau type d'entité :
<?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:PersonAccountExt">
<wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Graphique de données d'entrée pour la création d'une propriété pour le nouveau type d'entité :
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:propertySchema nsURI="http://www.ibm.com/websphere/wim" dataType="String"
multiValued="false" propertyName="HomePhone">
<wim:applicableEntityTypeNames>wim:PersonAccountExt</wim:applicableEntityTypeNames>
</wim:propertySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Graphique de données de sortie après la création d'une propriété pour le nouveau type d'entité :
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
xmlns:wim="http://www.ibm.com/websphere/wim">
<wim:Root>
<wim:schema>
<wim:propertySchema nsURI="http://www.ibm.com/websphere/wim" dataType="String"
multiValued="false" propertyName="HomePhone">
<wim:repositoryIds>LDAP1</wim:repositoryIds>
<wim:applicableEntityTypeNames>wim:PersonAccountExt</wim:applicableEntityTypeNames>
</wim:propertySchema>
</wim:schema>
</wim:Root>
</sdo:datagraph>
Graphique de données d'entrée pour l'ajout d'une propriété avec une valeur à l'entité :
<?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:PersonAccountExt">
<wim:identifier uniqueName="uid=person1,dc=yourco,dc=com"/>
<wim:HomePhone>020-2341123</wim:HomePhone>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Graphique de données de sortie après l'ajout d'une propriété avec une valeur à l'entité :
<?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:PersonAccountExt">
<wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
<wim:HomePhone>020-2341123</wim:HomePhone>
</wim:entities>
</wim:Root>
</sdo:datagraph>
Graphique de données d'entrée pour la recherche d'une propriété étendue :
<?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='wim:PersonAccountExt'">
<wim:properties>uid</wim:properties>
<wim:properties>sn</wim:properties>
<wim:properties>cn</wim:properties>
<wim:properties>wim:HomePhone</wim:properties>
</wim:controls>
</wim:Root>
</sdo:datagraph>
Graphique de données de sortie après la recherche d'une propriété étendue :
<?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:PersonAccountExt">
<wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
<wim:uid>person1</wim:uid>
<wim:cn>Person 1</wim:cn>
<wim:sn>Person1LastName</wim:sn>
<wim:HomePhone>020-2341123</wim:HomePhone>
</wim:entities>
</wim:Root>
</sdo:datagraph>